美文网首页
SpringBoot 之 profile 的应用

SpringBoot 之 profile 的应用

作者: 今年的草莓味奶茶超级好喝 | 来源:发表于2021-09-07 11:49 被阅读0次

    一、区分环境的配置

    1、properties 配置

    假设,一个应用的工作环境有:dev、test、prod
    
    那么,我们可以添加 4 个配置文件:
    
    applcation.properties - 公共配置
    application-dev.properties - 开发环境配置
    application-test.properties - 测试环境配置
    application-prod.properties - 生产环境配置
    在 applcation.properties 文件中可以通过以下配置来激活 profile:
    
    spring.profiles.active = test
    

    2、yml 配置

    与 properties 文件类似,我们也可以添加 4 个配置文件:
    
    applcation.yml - 公共配置
    application-dev.yml - 开发环境配置
    application-test.yml - 测试环境配置
    application-prod.yml - 生产环境配置
    在 applcation.yml 文件中可以通过以下配置来激活 profile:
    
    spring:
      profiles:
        active: prod
    

    此外,yml 文件也可以在一个文件中完成所有 profile 的配置:

    # 激活 prod
    spring:
      profiles:
        active: prod
    # 也可以同时激活多个 profile
    # spring.profiles.active: prod,proddb,prodlog
    ---
    # dev 配置
    spring:
      profiles: dev
    
    # 略去配置
    
    ---
    spring:
      profiles: test
    
    # 略去配置
    
    ---
    spring.profiles: prod
    spring.profiles.include:
      - proddb
      - prodlog
    
    ---
    spring:
      profiles: proddb
    
    # 略去配置
    
    ---
    spring:
      profiles: prodlog
    # 略去配置
    

    二、区分环境的代码

    使用 @Profile 注解可以指定类或方法在特定的 Profile 环境生效。
    1、修饰类

    @Configuration
    @Profile("production")
    public class JndiDataConfig {
    
        @Bean(destroyMethod="")
        public DataSource dataSource() throws Exception {
            Context ctx = new InitialContext();
            return (DataSource) ctx.lookup("java:comp/env/jdbc/datasource");
        }
    }
    

    2、修饰注解

    @Target(ElementType.TYPE)
    @Retention(RetentionPolicy.RUNTIME)
    @Profile("production")
    public @interface Production {
    }
    

    3、修饰方法

    @Configuration
    public class AppConfig {
    
        @Bean("dataSource")
        @Profile("development")
        public DataSource standaloneDataSource() {
            return new EmbeddedDatabaseBuilder()
                .setType(EmbeddedDatabaseType.HSQL)
                .addScript("classpath:com/bank/config/sql/schema.sql")
                .addScript("classpath:com/bank/config/sql/test-data.sql")
                .build();
        }
    
        @Bean("dataSource")
        @Profile("production")
        public DataSource jndiDataSource() throws Exception {
            Context ctx = new InitialContext();
            return (DataSource) ctx.lookup("java:comp/env/jdbc/datasource");
        }
    }
    

    三、激活 profile

    1、插件激活 profile

    spring-boot:run -Drun.profiles=prod
    

    2、main 方法激活 profile

    --spring.profiles.active=prod
    

    3、jar 激活 profile

    java -jar -Dspring.profiles.active=prod *.jar
    

    4、在 Java 代码中激活 profile

    直接指定环境变量来激活 profile:
    
    System.setProperty("spring.profiles.active", "test");
    在 Spring 容器中激活 profile:
    
    AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
    ctx.getEnvironment().setActiveProfiles("development");
    ctx.register(SomeConfig.class, StandaloneDataConfig.class, JndiDataConfig.class);
    ctx.refresh();
    

    相关文章

      网友评论

          本文标题:SpringBoot 之 profile 的应用

          本文链接:https://www.haomeiwen.com/subject/azguwltx.html