在程序開發過程中可能會有這樣的需求:開發和部署的配置信息可能會不同,以傳統的方式就是在配置文件裏面寫好配置,在部署的時候再去修改這些配置,這樣肯定會有很多問題,比如忘記修改、修改錯誤等。 而Springboot提供了多配置文件的支持解決了這壹問題。
Springboot的多配置文件是指:系統中存在多個配置文件,在不同的運行環境使用不同的配置文件即可。
創建測試項目
新建的study04項目的文件結構如下:
|-study04(項目名稱)
| - src
| | - main
| | | - java
| | | | - com.zslin
| | | | | - RootApplication.java
| | | - resources
| | | | - application.properties
| | | | - application-dev.properties
| | | | - application-test.properties
| | - test
| | | - java
| | | | - com.zslin
| | | | | - MyTest.java
| - pom.xml
| - study04.iml
RootApplication.java
@SpringBootApplication
public class RootApplication {
public static void main(String [] args) {
SpringApplication.run(RootApplication.class, args);
}
}
這個Java文件沒有什麽特別,只是壹個最基本的Springboot的入口
application.properties
spring.profiles.active=dev
在核心配置文件裏面的spring.profiles.active=dev這個設置表示系統默認使用dev(即application-dev.properties)中的配置。
application-dev.properties
server.port=2222
test.msg=this is dev config
在這個配置文件裏面只設置了端口為2222,和配置test.msg為this is dev config
application-test.properties
server.port=1111
test.msg=this is test config
在這個配置文件裏面和application-dev.properties中的配置壹樣,只是對應值有所不同。
現在在系統中已經有兩種不同的配置信息,只是默認是使用application-dev.properties中的配置。
MyTest.java
@RunWith(SpringRunner.class)
@SpringBootTest
public class MyTest {
@Value("${test.msg}")
private String msg;
@Test
public void testConfig() {
System.out.println("cur msg is : "+ msg);
}
}
這裏的輸入結果是:cur msg is : this is dev config,說明現在使用的配置文件是application-dev.properties
註意: 當將application.properties的內容修改為spring.profiles.active=test後,再運行這個測試方法時將得到結果:cur msg is : this is test config
在單元測試中指定配置文件
@RunWith(SpringRunner.class)
@SpringBootTest
@ActiveProfiles("test")
public class MyTest2 {
@Value("${test.msg}")
private String msg;
@Test
public void testConfig() {
System.out.println("cur msg is : "+ msg);
}
}
MyTest2與MyTest唯壹的區別就是在MyTest2的類上多加了壹個註釋@ActiveProfiles("test"),加上這個註釋就表示現在使用application-test.properties這個配置文件,同樣換成dev也就是使用application-dev.properties中的配置。
運行測試方法即可得到對應配置文件中的信息。
啟動項目時指定不同的配置文件
啟動項目的方法壹般有兩種 :
1、 運行RootApplication中的main方法。
2、 使用命令:mvn spring-boot:run
這兩方法默認都是使用application.properties中的配置信息,如果有指定spring.profiles.active則使用指定的配置信息,這種方式壹般用在產品運行時,在開發和測試的時候則需要指定配置文件。
運行main可以在運行裏的Config裏面來配置,這個我基本沒有使用過,我用的是第二種方法:
mvn spring-boot:run -Dspring.profiles.active=dev 即使用application-dev.properties中的配置信息,此時可以看到控制臺顯示系統使用的端口是dev中的2222
多配置文件這塊我應用的較多的是在數據庫的配置,開發過程中的數據庫肯定是在本機,用戶名和密碼也是本機數據庫的,而當項目部署到服務器時,數據庫的地址、用戶名和密碼就得修改,所以使用了多配置文件,只需要在啟動項目的時候指定配置文件即可。
示例代碼:/zsl131/spring-boot-test/tree/master/study04