一.首先創建一個SpringBoot項目
項目結構:
創建pom文件,映入maven工程依賴
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.csrcb</groupId>
<artifactId>spring_static</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.6.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
</project>
二、創建配置文件
在resource目錄下,創建配置文件application.yml,創建幾個不同環境的application-dev,application-sit、application-prod.yml的配置文件,稍後做測試使用,看是否加載不同環境下的配置參數的值
application.yml很簡單就一個端口號的配置:
在application-dev.yml(開發環境的配置參數的值)、以及sit(測試)、uat(驗證)、prod(生產)環境設置一些值
不同環境下的測試的配置參數的值不一致,爲了測試參數名設置相同下,是否取得對應運行環境的值
三.創建實體類
1.創建加載配置文件的配置類
/**
* @Classname TestConfig
* @Description 加載配置文件的配置類
* @Date 2020/6/16 16:28
* @Created by gangye
*/
@Configuration
@Data
public class TestConfig {
@Value("${ftp.username}")
private String username;
@Value("${ftp.passwd}")
private String passwd;
@PostConstruct
public void init(){
ClientUtil.setConfigInfo(this);
}
}
2.創建工具類,工具類獲得配置類的參數值
/**
* @Classname ClientUtil
* @Description 工具類,將配置文件的數據通過config引入到靜態變量中
* @Date 2020/6/16 16:29
* @Created by gangye
*/
@Slf4j
public class ClientUtil {
private static String USERNAME;
private static String PASSWD;
public static void setConfigInfo(TestConfig testConfig) {
ClientUtil.USERNAME = testConfig.getUsername();
ClientUtil.PASSWD = testConfig.getPasswd();
}
public static String getValue(){
log.info("獲得配置文件的username的值:{}",USERNAME);
return USERNAME;
}
}
3.創建路由,模擬調用
/**
* @Classname controller
* @Date 2020/6/16 16:35
* @Created by gangye
*/
@RestController
@RequestMapping(value = "/test")
public class TestController {
@GetMapping("/getvalue")
public String getValue(){
return ClientUtil.getValue();
}
}
4.創建啓動類,在啓動類中添加Bean,爲了防止啓動時配置類的@Value註解找不到配置文件中的值,一個配置文件找不到繼續找
/**
* @Classname AppStart
* @Description 啓動類
* @Date 2020/6/16 16:26
* @Created by gangye
*/
@SpringBootApplication
public class AppStart {
public static void main(String[] args) {
SpringApplication.run(AppStart.class,args);
}
}
啓動時添加對應的運行環境設置
-Dspring.profiles.active=sit
若springboot版本低可能會出現java.lang.IllegalArgumentException: Could not resolve placeholder ‘username’ in value “${ftp.username}”這樣的報錯
解決辦法:在啓動類中添加下面的代碼
/**
* Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder ‘name’ in value “${name}”
* @Description 爲了防止啓動時配置類的@Value註解找不到配置文件中的值,一個配置文件找不到繼續找
* @Date 2020年6月17日14:40:08
* @return
*/
@Bean
public static PropertySourcesPlaceholderConfigurer placeholderConfigurer(){
PropertySourcesPlaceholderConfigurer c = new PropertySourcesPlaceholderConfigurer();
c.setIgnoreUnresolvablePlaceholders(true);
return c;
}
再次啓動環境(sit下)
在瀏覽器中輸入:http://localhost:8000/test/getvalue
再指定prod環境下的運行
使用瀏覽器請求路由
關鍵使用了@Value註解以及@PostConstruct註解