SpringBoot獲取配置檔案資訊
阿新 • • 發佈:2019-02-16
預設application.properties中的資訊:
local.ip=192.168.238.133
local.port=8080
一、Environment(一)
直接在SpringBoot啟動類main方法中:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication ;
import org.springframework.context.ConfigurableApplicationContext;
@SpringBootApplication
public class App {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(App.class, args);
String port = context.getEnvironment().getProperty ("local.port");
System.out.println(port);
}
}
二、Environment(二)
在SpringBoot啟動類App,下級新建ConfigurationFile:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
@Component
public class ConfigurationFile {
@Autowired
private Environment environment;
public void getConfigInfo (){
String ip = environment.getProperty("local.ip");
System.out.println("ip = " + ip);
}
}
App.java
import com.xh.config.ConfigurationFile;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
@SpringBootApplication
public class App {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(App.class, args);
ConfigurationFile configurationFile = context.getBean(ConfigurationFile.class);
configurationFile.getConfigInfo();
}
}
三、使用@value註解
在SpringBoot掃描包下新建ServerInfo.java:
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class ServerInfo {
@Value("${local.ip}")
private String ip;
@Value("${local.port}")
private Integer port;
public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
public Integer getPort() {
return port;
}
public void setPort(Integer port) {
this.port = port;
}
@Override
public String toString() {
return "ServerInfo{" +
"ip='" + ip + '\'' +
", port=" + port +
'}';
}
}
App.java
import com.xh.config.ServerInfo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
@SpringBootApplication
public class App {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(App.class, args);
ServerInfo serverInfo = context.getBean(ServerInfo.class);
System.out.println(serverInfo);
}
}
注意: @Value(“${local.port}”)中,local.port必須在載入的配置檔案中,可以為空,不然會出現類似於Could not resolve placeholder 'local.ipq' in value "${local.ipq}"
的錯誤。
如果沒有配置項,可以給預設值,例:@Value("${local.ipq:192.168.238.145}")
, 而我的配置檔案中沒有local.ipq項也不會報錯。
四、變數的引用
配置檔案中引用配置檔案,例在application.properties中:
local.ip=192.168.238.133
local.port=8080
my.address= ${local.ip}:${local.port}
得到的my.address得值就是:192.168.238.133:8080
五、獲取集合、陣列
配置方式:name[index] = value
application.properties中配置:
ds.hosts[0]=192.168.238.130
ds.hosts[1]=192.168.238.131
ds.hosts[2]=192.168.238.132
ds.ports[0]=8080
ds.ports[1]=8081
ds.ports[2]=8082
新建ClusterConfig.java :
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@Component
@ConfigurationProperties("ds") // ds對應配置檔案ds.hosts[0]等中的ds字首
public class ClusterConfig {
// 變數名對應配置檔案ds.hosts[0]等中的 hosts
private List<String> hosts = new ArrayList<>();
// 變數名對應配置檔案ds.ports[0]等中的 ports
private Integer[] ports;
public List<String> getHosts() {
return hosts;
}
public void setHosts(List<String> hosts) {
this.hosts = hosts;
}
public Integer[] getPorts() {
return ports;
}
public void setPorts(Integer[] ports) {
this.ports = ports;
}
@Override
public String toString() {
return "ClusterConfig{" +
"hosts=" + hosts +
", ports=" + Arrays.toString(ports) +
'}';
}
}
App.java
import com.xh.config.ClusterConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
@SpringBootApplication
public class App {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(App.class, args);
ClusterConfig clusterConfig = context.getBean(ClusterConfig.class);
System.out.println(clusterConfig);
}
}
六、SpringBoot設定屬性預設值
application.properties:
my.username=admin
my.password=123456
方法一:直接@Value("${my.username:root}")
方法二:
App.java中
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
@SpringBootApplication
public class App {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(App.class, args);
// 如果沒有該配置項,則返回defaultValue,如果有該配置項,則返回對應值
String myUsername = context.getEnvironment().getProperty("my.username","root");
System.out.println("myUsername = " + myUsername);
String mysqlUsername = context.getEnvironment().getProperty("mysql.username","root");
System.out.println("mysqlUsername = " + mysqlUsername);
}
}
控制檯列印結果:
myUsername = admin
mysqlUsername = root
方法三:SpringApplication、map設定多個值
在App.java中:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import java.util.HashMap;
import java.util.Map;
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication application = new SpringApplication(App.class);
Map<String, Object> defaultMap = new HashMap<String, Object>();
// 如果沒有該配置項,則返回設定,如果有該配置項,則返回對應值
defaultMap.put("my.username", "root");
defaultMap.put("my.password", "111111");
defaultMap.put("my.url", "jdbc:mysql://127.0.0.1:3306/test");
defaultMap.put("my.username", "com.mysql.jdbc.Driver");
// 還可以是Properties物件
application.setDefaultProperties(defaultMap);
ConfigurableApplicationContext context = application.run(args);
System.out.println("my.username = " + context.getEnvironment().getProperty("my.username"));
System.out.println("my.password = " + context.getEnvironment().getProperty("my.password"));
System.out.println("my.url = " + context.getEnvironment().getProperty("my.url"));
System.out.println("my.username = " + context.getEnvironment().getProperty("my.username"));
}
}
控制檯列印結果:
my.username = admin
my.password = 123456
my.url = jdbc:mysql://127.0.0.1:3306/test
my.username = admin