讀取核心配置文件 核心配置文件是指在resources根目錄下的application.properties或application.yml配置文件,讀取這兩個配置文件的方法有兩種,都比較簡單。 先創建一個簡單的springBoot程式,可以參考: "http://www.cnblogs.com/l ...
讀取核心配置文件
核心配置文件是指在resources根目錄下的application.properties或application.yml配置文件,讀取這兩個配置文件的方法有兩種,都比較簡單。
先創建一個簡單的springBoot程式,可以參考:
http://www.cnblogs.com/lspz/p/6344327.html
核心配置文件application.properties內容如下:
server.port=9090
test.msg=Hello World Springboot!
編製Example.java
package com.example.web;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class Example {
@RequestMapping("/")
public String home(@Value("${test.msg}") String msg) {
return msg;
}
}
註意:在@Value的${}中包含的是核心配置文件中的鍵名。在Controller類上加@RestController表示將此類中的所有視圖都以JSON方式顯示,類似於在視圖方法上加@ResponseBody,spring boo預設已經配置了很多環境變數,例如,tomcat的預設埠是8080,項目的contextpath是“/”等等,我們在application.properties中設置了server.port=9090,重寫了spring boot 內嵌tomcat埠。
訪問:http://localhost:9090 時將得到 Hello World Springboot!
二、使用Environment方式
package com.example.web;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class WebController {
@Autowired
private Environment env;
@RequestMapping(value = "index", method = RequestMethod.GET)
public String index() {
return env.getProperty("test.msg");
}
}
註意:這種方式是依賴註入Evnironment來完成,在創建的成員變數private Environment env上加上@Autowired註解即可完成依賴註入,然後使用env.getProperty("鍵名")即可讀取出對應的值。
訪問:http://localhost:9090/index 時將得到Hello World Springboot!
三、讀取自定義配置文件
為了不破壞核心文件的原生態,但又需要有自定義的配置信息存在,一般情況下會選擇自定義配置文件來放這些自定義信息,這裡在resources目錄下創建配置文件my-web.properties
resources/my-web.properties內容如下:
com.name=testName
com.password=123
創建管理配置的實體類:
package com.example.model;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
@Component
@PropertySource("classpath:/my-web.properties")
@ConfigurationProperties(prefix = "com")
public class ConfigBean {
private String name;
private String password;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
註意:
spring boot1.5以上版本@ConfigurationProperties取消了location需要用@PropertySource來指定自定義的資源目錄。
prefix:指定配置文件中鍵名稱的首碼(我這裡配置文件中所有鍵名都是以web.開頭)
使用@Component是讓該類能夠在其他地方被依賴使用,即使用@Autowired註釋來創建實例。
創建測試Controller
package com.example.web;
import com.example.model.ConfigBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@Autowired
ConfigBean configBean;
@RequestMapping("/user")
public String user() {
return configBean.getName() + ":" + configBean.getPassword();
}
}
由於在ConfigBean類上加了註釋@Component,所以可以直接在這裡使用@Autowired來創建其實例對象。
訪問:http://localhost:9090/user 時將得到testName:123
四、參數間引用
可以利用${…}在application.properties引用變數
myapp.name=spring
myapp.desc=${myapp.name} nice
五、在application.properties配置隨機變數
在application.properties配置隨機變數,利用的是RandomValuePropertySource類
my.secret=${random.value}
my.number=${random.int}
my.bignumber=${random.long}
my.number.less.than.ten=${random.int(10)}
my.number.in.range=${random.int[1024,65536]}
六、使用profiles實現快速切換配置
新建一個properties文件application-prod.properties對應為
生產環節的配置。
application-prod.properties:
server.port=8080
test.msg=This is prod!
接下來,使用CMD進入src目錄打包jar:
mvn package -Dmaven.test.skip=true
success後使用
java -jar -Dspring.profiles.active=prod target/loadProperties-0.0.1-SNAPSHOT.jar運行。
訪問:http://localhost:8080/ 時得到 This is prod!
註意:
發現埠已經變成8080了。這是因為在“application-prod.properties”中規定了server.port=8080。
“java -jar”的命令中使用-D來傳遞參數:
java -jar -D配置=值 jar名.jar
“-Dspring.profiles.active=”用來指定切換到哪個配置,表達式為:“application-${profile}.properties”
七、配置文件優先順序
application.properties和application.yml文件可以放在一下四個位置:
外置,在相對於應用程式運行目錄的/congfig子目錄里。
外置,在應用程式運行的目錄里
內置,在config包內
內置,在Classpath根目錄
同樣,這個列表按照優先順序排序,也就是說,src/main/resources/config下application.properties覆蓋src/main/resources下application.properties中相同的屬性,此外,如果你在相同優先順序位置同時有application.properties和application.yml,那麼application.yml裡面的屬性就會覆蓋application.properties里的屬性。