Spring Boot讀取配置的 5 種方式
讀取application文件
在application.yml或者properties文件中添加:
-
user.address=china user.company=demo user.name=讓我康康
1、使用@Value註解讀取
直接 代碼如下:
package im.homeapi.controller;
import org.springframework.beans.factory.annotation.Value;
import org.omg.CORBA.PUBLIC_MEMBER;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@RestController
@RequestMapping(value="/api")
public class HomeController {
@Value("${user.address}")
private String address;
@Value("${user.company}")
private String company;
@Value("${user.name}")
private String name;
//value 指定訪問地址,method 指定請求類型
@RequestMapping(value = "/home",method = RequestMethod.GET)
public String Home()
{
return "Hello Word";
}
@RequestMapping(value = "/getConfig")
public String getConfig() {
return "獲取的配置信息 :" +
" name=" + name +
" address=" + address +
" , company=" + company;
}
}
放到單獨的配置類中讀取:
package im.homeapi.entity;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class UserConfig {
@Value("${user.address}")
private String address;
@Value("${user.company}")
private String company;
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getCompany() {
return company;
}
public void setCompany(String company) {
this.company = company;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Value("${user.name}")
private String name;
}
調用如下:
@Autowired
private UserConfig userConfig;
//讀取配置類
@RequestMapping(value = "/getConfigEntity")
public String getConfigEntity() {
return "獲取的配置信息 :" +
" name=" + userConfig.getName() +
" address=" + userConfig.getAddress() +
" , company=" + userConfig.getCompany();
}
運行結果如下:
2、使用@ConfigurationProperties註解讀取方式
代碼如下:
package im.homeapi.entity;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "user")
public class UserConfig1 {
private String address;
private String company;
private String name;
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getCompany() {
return company;
}
public void setCompany(String company) {
this.company = company;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
調用:
package im.homeapi.controller;
import im.homeapi.entity.UserConfig;
import im.homeapi.entity.UserConfig1;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.omg.CORBA.PUBLIC_MEMBER;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@RestController
@RequestMapping(value="/api")
public class ConfigController {
@Autowired
private UserConfig1 userConfig;
//讀取配置類 ConfigurationProperties註解讀取方式
@RequestMapping(value = "/getConfigEntity1")
public String getConfigEntity() {
return "獲取的配置信息 :" +
" name=" + userConfig.getName() +
" address=" + userConfig.getAddress() +
" , company=" + userConfig.getCompany();
}
}
運行結果:
3、讀取指定文件
3.1、@PropertySource+@Value註解讀取方式
在resources下新建配置config/db-config.properties
注意:@PropertySource不支持yml文件讀取。
db.username=root
db.password=123456
如圖:
代碼:
package im.homeapi.entity;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
@Component
@PropertySource(value = { "config/db-config.properties" })
public class DBConfig {
@Value("${db.username}")
private String username;
@Value("${db.password}")
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
調用代碼:
package im.homeapi.controller;
import im.homeapi.entity.DBConfig;
import im.homeapi.entity.UserConfig;
import im.homeapi.entity.UserConfig1;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.omg.CORBA.PUBLIC_MEMBER;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@RestController
@RequestMapping(value="/api")
public class DbController {
@Autowired
private DBConfig dbConfig;
//讀取配置類 PropertySource+@Value註解讀取方式
@RequestMapping(value = "/getConfigdb")
public String getConfigdb() {
return "獲取的配置信息 :" +
" name=" + dbConfig.getUsername() +
" , password=" + dbConfig.getPassword();
}
}
運行結果:
3.2、@PropertySource+@ConfigurationProperties註解讀取方式
代碼:
package im.homeapi.entity;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "db")
@PropertySource(value = { "config/db-config.properties" })
public class DBconfig1 {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
調用代碼:
@Autowired
private DBconfig1 dbConfig1;
//讀取配置類 @PropertySource+@ConfigurationProperties註解讀取方式
@RequestMapping(value = "/getConfigdb1")
public String getConfigdb1() {
return "獲取的配置信息 :" +
" name=" + dbConfig1.getUsername() +
" , password=" + dbConfig1.getPassword();
}
運行結果:
@Component 表示將該類標識爲Bean
@ConfigurationProperties(prefix = "db")用於綁定屬性,其中prefix表示所綁定的屬性的前綴。
@PropertySource(value = "config/db-config.properties")表示配置文件路徑。
4、使用Environment讀取
代碼:
@Autowired
private Environment environment;
//讀取配置類 CEnvironment讀取方式
@RequestMapping(value = "/getConfigenv")
public String getConfigenv() {
return "獲取的配置信息 :" +
" name=" + environment.getProperty("user.name") +
" address=" + environment.getProperty("user.address") +
" , company=" + environment.getProperty("user.company");
}
運行結果:
總結
從以上示例來看,Spring Boot可以通過@PropertySource,@Value,@Environment,@ConfigurationProperties來綁定變量。