springboot 配置文件 .properties和.yml的寫法區別html
例如 : redis配置的properties或yml文件,以下:java
- spring.redis.cluster.nodes[0]=192.168.0.1:6379
- spring.redis.cluster.nodes[1]=192.168.0.2:6379
- 或
- spring:
- redis:
- cluster:
- nodes:
- - 192.168.0.1:6379
- - 192.168.0.2:6379
spring boot容許你自定義一個application.properties文件,而後放在如下的地方,來重寫spring boot的環境變量或者定義你本身環境變量node
- 當前目錄的 「/config」的子目錄下
- 當前目錄下
- classpath根目錄的「/config」包下
- classpath的根目錄下
1點和2點適合在生產環境下,例如,打包成可執行的jar包redis
這裏要注意,「當前目錄」是指demo.jar包的目錄下,要使配置文件生效,在使用Java -jar demo.jar的命令時,必須先路由到demo.jar包的路徑下,再使用其命名,spring
3點和4點適合在開發環境下json
若是同時在四個地方都有配置文件,配置文件的優先級是從1到4。tomcat
使用配置文件以後,spring boo啓動時,會自動把配置信息讀取到spring容器中,並覆蓋spring boot的默認配置,那麼,咱們怎麼來讀取和設置這些配置信息呢springboot
1.經過命令行來重寫和配置環境變量,優先級最高,例如能夠經過下面的命令來重寫spring boot 內嵌tomcat的服務端口,注意「=」倆邊不要有空格app
java -jar demo.jar --server.port=9000
- 1
- 1
若是想要設置多個變量怎麼辦,能夠已json的格式字符串來設置less
java -jar demo.jar --spring.application.json='{"foo":"bar"}'
2.經過@value註解來讀取
@RestController @RequestMapping("/task") public class TaskController { @Value("${connection.remoteAddress}") private String address; @RequestMapping(value = {"/",""}) public String hellTask(@Value("${connection.username}")String name){ return "hello task !!"; } }
3.經過Environment接口來獲取,只須要把接口注進去便可
@RestController @RequestMapping("/task") public class TaskController { @Autowired Environment ev ; @Value("${connection.remoteAddress}") private String address; @RequestMapping(value = {"/",""}) public String hellTask(@Value("${connection.username}")String name){ String password = ev.getProperty("connection.password"); return "hello task !!"; } }
4.能夠自定義一個工具類,來獲取,這種方式關鍵在於讀取配置文件信息,適合自定義的配置信息,spring 容器默認的配置信息會讀不到
@Component public class SystemConfig { private static Properties props ; public SystemConfig(){ try { Resource resource = new ClassPathResource("/application.properties");// props = PropertiesLoaderUtils.loadProperties(resource); } catch (IOException e) { e.printStackTrace(); } } /** * 獲取屬性 * @param key * @return */ public static String getProperty(String key){ return props == null ? null : props.getProperty(key); } /** * 獲取屬性 * @param key 屬性key * @param defaultValue 屬性value * @return */ public static String getProperty(String key,String defaultValue){ return props == null ? null : props.getProperty(key, defaultValue); } /** * 獲取properyies屬性 * @return */ public static Properties getProperties(){ return props; } } //用的話,就直接這樣子 String value = SystemConfig.getProperty("key");
5.能夠利用${…}在application.properties引用變量
myapp.name=spring myapp.desc=${myapp.name} nice
6.能夠在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還有@ConfigurationProperties
=================================
SpringBoot讀取application.properties文件,一般有3種方式
1. @Value 例如:
@Value("${spring.profiles.active}")
private String profileActive;------至關於把properties文件中的spring.profiles.active注入到變量profileActive中
2. @ConfigurationProperties 例如:
@Component
@ConfigurationProperties(locations = "classpath:application.properties",prefix="test")
public class TestProperties {
String url;
String key;
}
其餘類中使用時,就能夠直接注入該TestProperties 進行訪問相關的值
3. 使用Enviroment 例如:
private Enviroment env;
env.getProperty("test.url");
而env方式效率較低
注:@ConfigurationProperties也可用於其餘.properties文件,只要locations指定便可