Springboot有一個全局配置文件,這個配置文件默認是properties文件,就是application.properties文件,其實還有一種文件,就是yml文件,只不過這種文件是需要自己創建的。這個配置文件是用來修改Springboot的默認配置的。
比如說當我們集成了start-web之後,Springboot默認的web服務器是Tomcat,我們可以對Tomcat的默認配置做一些處理。配置文件能做的事情很多,語法也很簡單。
一、基礎配置
當快速入門示例中,我們創建 Spring Boot 的工程項目時,系統默認會爲我們在 src/main/java/resources 目錄下創建一個application.properties。個人習慣,我會將 application.properties 改爲 application.yml 文件,兩種文件格式都支持。
Spring Boot 的默認配置文件位置爲: src/main/java/resources/application.properties
在application.yml自定義一組屬性:
my:
name: sanke
age: 11
與其等價的 properties 配置如下
my.name=sanke
my.age=11
我們需要讀取配置文件的值只需要加 @Value(“${屬性名}”)
:
@RestController
public class MyController {
@Value("${my.name}")
private String name;
@Value("${my.age}")
private int age;
@RequestMapping(value = "/my")
public String my(){
return name+":"+age;
}
}
啓動工程,訪問:localhost:8080/my, 瀏覽器顯示:
sanke:11
二、配置文件的屬性對應實體類
當我們有很多配置屬性的時候,這樣一個個接受非常繁瑣 ,這個時我們就會把這些屬性作爲字段來創建一個 JavaBean,並將屬性值賦予給他們,比如:
my:
name: sanke
age: 12
number: ${random.int}
uuid : ${random.uuid}
max: ${random.int(10)}
value: ${random.value}
greeting: hi,i'm ${my.name}
其中配置文件中用到了 ${random} ,它可以用來生成各種不同類型的隨機值。
怎麼將這些屬性賦於給一個 JavaBean 呢,首先創建一個 JavaBean:
@ConfigurationProperties(prefix = "my")
@Component
public class ConfigBean {
private String name;
private int age;
private int number;
private String uuid;
private int max;
private String value;
private String greeting;
省略了getter setter....
}
需要加個註解 @ConfigurationProperties,並加上它的 prrfix。另外 @Component 可加可不加。
另外需要在 應用類或者 application啓動類,加 EnableConfigurationProperties 註解。
@EnableConfigurationProperties註解的作用是:使使用 @ConfigurationProperties 註解的類生效。
@RestController
@EnableConfigurationProperties({MyConfig.class})
public class MyConfigController {
@Autowired
private MyConfig myConfig;
@GetMapping("/myConfig")
public String myConfig(){
return myConfig.getGreeting()+" >>>"+myConfig.getName()+" >>>"+ myConfig.getUuid()+" >>>"+myConfig.getMax();
}
}
啓動工程,訪問 localhost:8080/myConfig, 我們會發現配置文件信息讀到了。
三、自定義配置文件
上面介紹的是我們都把配置文件寫到 application.yml 中。有時我們不想把配置都寫到 application 配置文件中,這時我們可以自定義配置文件,比如 my.properties:
com.sanke.name=sanke
com.sanke.age=12
怎麼將這個配置文件信息賦予給一個 JavaBean 呢?
@Configuration
@PropertySource(value = "classpath:my.properties")
@ConfigurationProperties(prefix = "com.sanke")
public class User {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
在最新版本的 springboot,需要加這三個註解。@Configuration
@PropertySource
@ConfigurationProperties
@RestController
@EnableConfigurationProperties({MyConfig.class, User.class})
public class UserController {
@Autowired
private MyConfig myConfig;
@GetMapping(value = "/user/myConfig")
public String myConfig(){
return myConfig.getGreeting()+" >>>"+myConfig.getName()+" >>>"+ myConfig.getUuid()+" >>>"+myConfig.getMax();
}
@Autowired
private User user;
@GetMapping(value = "/user")
public String user(){
return user.getName()+ ":" +user.getAge();
}
}
啓動工程,打開 localhost:8080/user ;瀏覽器會顯示:
sanke:12
四、多個環境配置文件
在實際的開發過程中,我們需要在不同環境下使用不同的配置; 格式爲application-{profile}.properties,其中 {profile} 對應你的環境標識,比如:
application-test.properties
:測試環境 application-dev.properties
:開發環境 application-prod.properties
:生產環境
怎麼使用?只需要我們在application.yml中加:
spring:
profiles:
active: test
其中application-dev.yml:
server:
port: 8090
啓動工程,發現程序的端口不再是 8080, 而是 8090,表示測試環境已經成功啓用了。