国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Spring boot中PropertySource注解的使用方法詳解

Spring boot中PropertySource注解的使用方法詳解

2021-03-04 10:15分享牛 Java教程

這篇文章主要給大家介紹了關于Spring boot中PropertySource注解的使用方法,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Spring boot具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧。

前言

本文將重點講解一下Spring中@PropertySource注解的使用,如何通過PropertySource注解加載指定的配置文件。以及PropertySource注解與@ConfigurationProperties兩個注解的配合使用。下面話不多說了,來隨著小編來一起學習學習吧。

1.1. PropertySource注解加載指定的屬性文件

Spring框架提供了PropertySource注解,目的是加載指定的屬性文件,接下來我們看一下如何使用該注解。首先我們定義一個配置類,并在類中添加PropertySource注解,如下所示:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@Component
@PropertySource(value= {"classpath:config/jdbc-bainuo-dev.properties"},ignoreResourceNotFound=false,encoding="UTF-8",name="jdbc-bainuo-dev.properties",)
public class CustomerDataSourceConfig1 {
private String url;
 public String getUrl() {
  return url;
 }
 public void setUrl(String url) {
  this.url = url;
 }
 @Override
 public String toString() {
  return "CustomerDataSourceConfig{" +
    "url='" + url + '\'' +
    '}';
 }
}

上述的代碼目的是加載classpath路徑中config文件中的jdbc-bainuo-dev.properties。其中encoding用于指定讀取屬性文件所使用的編碼,我們通常使用的是UTF-8;ignoreResourceNotFound含義是當指定的配置文件不存在是否報錯,默認是false;比如上文中指定的加載屬性文件是jdbc-bainuo-dev.properties。如果該文件不存在,則ignoreResourceNotFound為true的時候,程序不會報錯,如果ignoreResourceNotFound為false的時候,程序直接報錯。實際項目開發中,最好設置ignoreResourceNotFound為false。該參數默認值為false。

value值是設置需要加載的屬性文件,可以一次性加載多個。name的值我們設置的是jdbc-bainuo-dev.properties。這個值在Springboot的環境中必須是唯一的,如果不設置,則值為:“class path resource [config/jdbc-bainuo-dev.properties] “。

可能很多人比較納悶,為什么是“class path resource [config/jdbc-bainuo-dev.properties] “呢?這個就涉及到了Spring中對資源文件的封裝類Resource。上文我們配置的value值為"classpath:config/jdbc-bainuo-dev.properties",因此Spring發現是classpath開頭的,因此最終使用的是Resource的子類ClassPathResource。如果是file開頭的,則最終使用的類是FileSystemResource。

了解了上文所述的Resource類之后。我們再次明確一點,如果@PropertySource中如果沒有設置name值,則name值的生成規則是:根據value值查找到最終封裝的Resource子類,然后調用具體的Resource子類實例對象中的getDescription方法,getDescription方法的返回值為最終的name值。

比如ClassPathResource類中的getDescription方法實現如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public String getDescription() {
 StringBuilder builder = new StringBuilder("class path resource [");
 String pathToUse = path;
 if (this.clazz != null && !pathToUse.startsWith("/")) {
 builder.append(ClassUtils.classPackageAsResourcePath(this.clazz));
 builder.append('/');
 }
 if (pathToUse.startsWith("/")) {
 pathToUse = pathToUse.substring(1);
 }
 builder.append(pathToUse);
 builder.append(']');
 return builder.toString();
}

上述的name處理邏輯暫時先有個印象即可,后續會詳細地跟蹤源碼進行講解。

1.2. PropertySource注解加載指定的屬性文件測試

上文我們設置了PropertySource注解來加載"classpath:config/jdbc-bainuo-dev.properties"文件。該文件的目錄結構如下圖所示:

Spring boot中PropertySource注解的使用方法詳解

jdbc-bainuo-dev.properties文件內容如下:

?
1
spring.datasource.shareniu.url=shareniu

application.properties文件內容如下:

?
1
spring.profiles.active=dev

上面的配置文件中,spring.profiles.active屬性配置了當前使用的環境是dev。spring.datasource.shareniu.url只是一個普通的屬性,本身并沒有什么特殊的含義。

下面開始書寫Springboot的啟動類,如下所示:

?
1
2
3
4
5
6
7
8
9
10
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
 SpringApplication springApplication = new SpringApplication(DemoApplication.class);
 ConfigurableApplicationContext configurableApplicationContext = springApplication.run(args);
 CustomerDataSourceConfig1 customerDataSourceConfig = configurableApplicationContext
 .getBean(CustomerDataSourceConfig1.class);
 System.out.print(customerDataSourceConfig);
}
}

運行上述的代碼,程序的輸出如下:

?
1
CustomerDataSourceConfig{url='null'}

奇怪了,怎么url是空呢?PropertySource注解不是已經將jdbc-bainuo-dev.properties文件加載到當前的環境中了嗎?我們不妨試一下看看jdbc-bainuo-dev.properties中的spring.datasource.shareniu.url屬性是否可以獲取到,進而從側面驗證PropertySource注解已經將jdbc-bainuo-dev.properties文件加載到當前的環境中。

修改上述啟動類的代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
 SpringApplication springApplication = new SpringApplication(DemoApplication.class);
 ConfigurableApplicationContext configurableApplicationContext = springApplication.run(args);
 CustomerDataSourceConfig1 customerDataSourceConfig = configurableApplicationContext.getBean(CustomerDataSourceConfig1.class);
 String property = configurableApplicationContext.getEnvironment().getProperty("spring.datasource.shareniu.url");
 System.out.println(property);
 System.out.print(customerDataSourceConfig);
}
}

運行上述的代碼,程序的輸出如下:

?
1
Shareniu

通過上述的代碼可以看出PropertySource確實是生效了。那么我們怎么將spring.datasource.shareniu.url屬性值自動注入到CustomerDataSourceConfig1 類中的url屬性中呢?

1.3. PropertySource注解讀取指定文件并將屬性注入到配置類

Spring中提供了@Value注解,用于將配置文件中的屬性值讀取出來并設置到相應的屬性中。在這里我們學習一下如何使用@Value注解。同樣的還是以上文的兩個類為例進行詳細說明,首先需要修改CustomerDataSourceConfig1類,修改部分如下所示:

?
1
2
3
4
5
6
@Component
@PropertySource( name="jdbc-bainuo-dev.properties",value= {"classpath:config/jdbc-bainuo-dev.properties"},ignoreResourceNotFound=false,encoding="UTF-8")
public class CustomerDataSourceConfig1 {
 @Value("${spring.datasource.shareniu.url}")
 private String url;
}

上述的類中,在url字段中增加了@Value注解,并指定了SPEL表達式為${spring.datasource.shareniu.url} 。再次運行springboot啟動類,控制臺的輸出為shareniu。表明確實可以通過@Value進行屬性值的注入。但是使用@Value注解方式有一個不太友好的地方就是,當項目中有大量的屬性進行配置的時候,我們需要一個個的在類的字段中增加@Value注解,這樣確實很費勁,不過我們可以通過Springboot提供的@ConfigurationProperties注解解決這個問題。

1.4. ConfigurationProperties注解使用

@ConfigurationProperties是類級別的注解,具體使用方式如下:

?
1
2
3
4
5
6
@Component
@ConfigurationProperties(prefix = "spring.datasource.shareniu")
@PropertySource( name="jdbc-bainuo-dev.properties",value= {"classpath:config/jdbc-bainuo-dev.properties"},ignoreResourceNotFound=false,encoding="UTF-8")
public class CustomerDataSourceConfig1 {
 private String url;
 }

上述代碼中,在CustomerDataSourceConfig1類中增加了ConfigurationProperties注解,并且指明了屬性的前綴為spring.datasource.shareniu。這樣Springboot在處理的時候,會去掃描當前類中的所有字段并進行屬性的查找以及組裝。比如我們配置的prefix = "spring.datasource.shareniu" ,CustomerDataSourceConfig1類中有一個url字段,則url字段需要匹配的屬性是prefix+字段=spring.datasource.shareniu.url

那不僅有個疑問?如果指定的字段沒有找到屬性怎么辦呢?這個可以進行如下的配置:

?
1
@ConfigurationProperties(prefix = "spring.datasource.shareniu",ignoreUnknownFields=true,ignoreInvalidFields=true)

ignoreUnknownFields:忽略未知的字段。

ignoreInvalidFields:是否忽略驗證失敗的字段。這個怎么理解呢?比如我們在配置文件中配置了一個字符串類型的變量,類中的字段是int類型,那肯定會報錯的。如果出現這種情況我們可以容忍,則需要配置該屬性值為true。該參數值默認為false。

本文暫且講解到這里,后續的文章我們來講解@PropertySource注解如何實現讀取不同環境中的配置文件,這個不同環境的文件動態切換讀取,PropertySource默認是不支持的,因此我們需要擴展該注解對應的源碼。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

原文鏈接:http://blog.csdn.net/qq_30739519/article/details/78791142

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 亚洲综合射| 日韩在线电影一区 | 国产麻豆精品 | 国产一区二区三区免费 | 九九综合九九 | 欧美日韩精品一区二区在线播放 | 日韩一区二区在线播放 | 成人在线免费观看 | 久久社区 | 日本全黄裸体片 | 全部古装三级在线播放 | 久re在线| 国产精品不卡一区二区三区 | yw193.com尤物在线 | 国产精品一区二区久久 | 中国在线观看片 | 久久久久久久久久久久久大色天下 | 亚洲不卡视频 | av电影免费在线观看 | 国产精品视频一区二区三区 | 久久国产精品免费一区二区三区 | 成人欧美| av电影免费在线观看 | 日韩精品一区二区三区中文字幕 | 亚洲精品日韩在线 | 亚洲精品免费观看 | 超碰在线国产 | 国产精品久久久久久久久软件 | 国产精品久久久久久久午夜 | 午夜精品久久久久久久 | 91精品国产九九九久久久亚洲 | 国产成人精品一区二区三区四区 | 黄色在线观看网址 | 伊人91视频 | 亚洲字幕成人中文在线观看 | 亚洲综合精品久久 | 国产欧美精品一区二区 | 欧美精品久久久久久久久老牛影院 | 日韩精品二区 | 在线日韩| 狠狠干av |