您好,登錄后才能下訂單哦!
一個應用為了在不同的環境下工作,常常會有不同的配置,代碼邏輯處理。Spring Boot 對此提供了簡便的支持。
關鍵詞:?@Profile
、spring.profiles.active
區分環境的配置
properties 配置
yml 配置
區分環境的代碼
修飾類
修飾注解
修飾方法
激活 profile
插件激活 profile
main 方法激活 profile
jar 激活 profile
在 Java 代碼中激活 profile
假設,一個應用的工作環境有:dev、test、prod
那么,我們可以添加 4 個配置文件:
applcation.properties
?- 公共配置
application-dev.properties
?- 開發環境配置
application-test.properties
?- 測試環境配置
application-prod.properties
?- 生產環境配置
在?applcation.properties
?文件中可以通過以下配置來激活 profile:
spring.profiles.active?=?test
與 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
?注解可以指定類或方法在特定的 Profile 環境生效。
@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"); ????} }
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Profile("production") public?@interface?Production?{ }
@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"); ????} }
spring-boot:run?-Drun.profiles=prod
--spring.profiles.active=prod
java?-jar?-Dspring.profiles.active=prod?*.jar
直接指定環境變量來激活 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();
使用方法:
mvn?clean?package cd?target java?-jar?-Dspring.profiles.active=prod?sbe-core-profile.jar
本人免費整理了Java高級資料,涵蓋了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo高并發分布式等教程,一共30G,需要自己領取。
傳送門:https://mp.weixin.qq.com/s/JzddfH-7yNudmkjT0IRL8Q
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。