文章目錄
目錄
本篇博客主要的內容概要:
一.讀取單個配置文件:
application.properties中自定義2個屬性
local.ip=192.168.1.100
local.port=8080
@Value讀取
@Component
public class Test {
@Value("${local.ip}")
private String ip;
@Value("${local.port}")
private Integer port;
public void show(){
System.out.println("local.ip===="+ip );
System.out.println("local.port===="+port);
}
}
入口中測試下:
@SpringBootApplication
public class Demo2Application {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(Demo2Application.class, args);
context.getBean(Test.class).show();
context.close();
}
}
結果顯示已經讀取到屬性:
②通過Environment的getProperty方法
修改test試下:
@Component
public class Test {
@Autowired
private Environment env;
public void show(){
System.out.println("local.ip===="+env.getProperty("local.ip") );
System.out.println("local.ip===="+env.getProperty("local.port") );
}
}
運行入口函數:
測試結果ok。
同時也可以在入口函數中使用:
@SpringBootApplication
public class Demo2Application {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(Demo2Application.class, args);
context.getBean(Test.class).show();
System.out.println(context.getEnvironment().getProperty("local.ip"));
System.out.println(context.getEnvironment().getProperty("local.port"));
context.close();
}
}
運行結果:
爲什麼context可以直接使用這種方式調用呢?
看下e-r圖:
ConfigurableApplicationContext 的上級可以找到EnvironmentCapable這個接口,該接口有獲取Enviroment對象的方法,所以就可以直接使用了。
二、配置文件的屬性值操作
1.配置屬性可以爲空值
application.properties中讓tomcat.port爲空值
local.ip=192.168.1.100
local.port=8080
tomcat.port=
@Component
public class Test {
@Value("${tomcat.port}")
private String tomcatPort;
public void show(){
System.out.println("local.ip===="+tomcatPort );
}
}
測試一下:
@SpringBootApplication
public class Demo2Application {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(Demo2Application.class, args);
context.getBean(Test.class).show();
context.close();
}
}
運行結果:沒有報錯,打印空值:
2.配置屬性設置默認值
@Component
public class Test {
@Value("${tomcat.port:9090}")
private String tomcatPort;
public void show(){
System.out.println("tomcat.port===="+tomcatPort );
}
}
然後,properties配置文件中,刪除這個屬性 tomcat.port=
測試,已經設置了默認值9090:
三、修改配置文件名稱:
配置文件默認名稱爲:application,後綴,爲properties或者yml:
如果不是這個名會報錯:
怎麼解決呢?
方式有2種,一種是啓動參數修改,另一種哦是用@PropertySource指定。
我們先說啓動參數修改的方法,註解的後面講配置文件位置的時候一塊說:
@Component
public class Test {
@Value("${local.port}")
private String port;
public void show(){
System.out.println("local.port===="+port );
}
}
修改默認配置文件名稱爲app.properties:
啓動報錯,解決方式:
使用-spring.config.name來指定,只需要指定文件的名字,文件擴展名可以省略
:
再次運行,顯示了屬性值:
四、配置配置文件位置操作
1.默認位置
默認位置在resurces的目錄下,或者resources下的config目錄下.
2.設置在其他位置並讀取
啓動方式設置,和剛纔的修改配置文件名一樣
我們來演示個複雜的,多個配置文件。一個在resources的其他目錄下,一個在本地盤符,用啓動方式設置啓動,看是否可以讀取到屬性值:
- 項目中的配置文件
注意配置文件也可以是${}引用,如下面的app.name如果想使用上面的name的話:
app.properties內容:
local.ip=192.168.1.100
local.port=8080
name=springboot
app.name=this is ${name}
- 項目外的配置文件:
my配置內容:
jetty.port=18880
- 修改啓動類:
spring.config.location=classpath:/conf/app.properties,file:D:/tmp/my.properties
@Component
public class Test {
@Value("${local.ip}")
private String ip;
@Value("${app.name}")
private String appName;
@Value("${jetty.port:9090}")
private String jettPort;
public void show(){
System.out.println("local.ip===="+ip);
System.out.println("app.name===="+appName);
System.out.println("jetty.port===="+jettPort);
}
}
運行入口函數:
結果顯示: 內部外部的配置文件都打印了。
@PropertySource編碼方式讀取
編寫一個jdbc.properties
url=jdbc:mysql:///springboot
driverClassName=com.mysql.jdbc.Driver
@Component
@PropertySource(value = "classpath:jdbc.properties",encoding = "utf-8")
public class JdbcConfig {
@Value("${url}")
private String url;
@Value("${driverClassName}")
private String driverClassName;
@Autowired
private Environment env;
public void show(){
System.out.println("=============DataSourcePropeties===========");
System.out.println("url: ===="+ env.getProperty("url"));
System.out.println("driverClassName:==== "+ driverClassName );
}
}
入口類:
@SpringBootApplication
public class Demo2Application {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(Demo2Application.class, args);
context.getBean(JdbcConfig.class).show();
context.close();
}
}
看下運行結果:
已經讀取出來了。
五、一次讀取多個配置文件屬性
主要的方式就是使用@ConfigurationProperties(prefix = "xx")
,配置文件前綴如果prefix 也可不寫。
重寫jdbc.properties
ds.url=jdbc:mysql:///springboot
ds.driverClassName=com.mysql.jdbc.Driver
ds.username=root
ds.password=12345
DataSourcePropeties 類,必須得有set方法:
@Component
@PropertySource(value = "classpath:jdbc.properties",encoding = "utf-8")
@ConfigurationProperties(prefix = "ds")
public class DataSourcePropeties {
private String url;
private String driverClassName;
private String username;
private String password;
public void show(){
System.out.println("========DataSourcePropeties============");
System.out.println("ds.url: ===="+ url);
System.out.println("ds.driverClassName:==== "+ driverClassName );
System.out.println("ds.username:==== "+ username );
System.out.println("ds.password:==== "+ password );
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getDriverClassName() {
return driverClassName;
}
public void setDriverClassName(String driverClassName) {
this.driverClassName = driverClassName;
}
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;
}
}
測試:
@SpringBootApplication
public class Demo2Application {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(Demo2Application.class, args);
context.getBean(DataSourcePropeties.class).show();
context.close();
}
}
結果:
完美顯示.
個人微信公號:
搜索: 怒放de每一天
不定時推送相關文章,期待和大家一起成長!!
完