Java Spring Boot 注解 profile 区分环境
配置文件约定
application.yaml
公共配置
application-dev.yaml
开发环境配置
application-test.yaml
测试环境配置
application-prod.yaml
生产环境配置
可以在 application.yaml
配置文件中激活
1 2 3
| spring: profiles: activate: prod
|
也可以在一个 yaml
文件中完成所有的 profile
配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| spring: profiles: activate: - prod - dev ---
spring: profiles: dev
---
spring: profiles: test
|
在代码中区分环境
修饰类
1 2 3 4 5 6 7 8 9 10
| @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"); } }
|
修饰注解
1 2 3 4 5
| @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Profile("production") public @interface Production { }
|
修饰方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| @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"); } }
|
激活使用
插件
1
| spring-boot:run -Drun.profiles=prod
|
Jar 激活
1
| java -jar -Dspring.profiles.active=prod *.jar
|
在Java中使用
1
| System.setProperty("spring.profiles.active", "test");
|
1 2 3 4
| AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); ctx.getEnvironment().setActiveProfiles("development"); ctx.register(SomeConfig.class, StandaloneDataConfig.class, JndiDataConfig.class); ctx.refresh();
|