首頁 >Java >java教程 >properties配置的詳細介紹

properties配置的詳細介紹

零下一度
零下一度原創
2017-07-26 11:13:582287瀏覽

  SpringBoot中免除了大部分手動配置,但是對於一些特定的情況,還是需要我們進行手動配置的,SpringBoot為我們提供了application.properties配置文件,讓我們可以進行自定義配置,來對默認的配置進行修改,以適應具體的生產情況,當然也包括一些第三方的配置。幾乎所有設定都可以寫到application.peroperties檔案中,這個檔案會被SpringBoot自動載入,免去了我們手動載入的煩惱。但實際上,很多時候我們會自訂設定文件,這些文件就需要我們進行手動加載,SpringBoot是不會自動識別這些文件的,下面就來仔細看看這些方面的內容。

1、設定檔的格式

  SpringBoot可以辨識兩種格式的設定文件,分別是yml檔案與properties文件,我們可以將application.properties檔案換成application. yml,這兩個文件都可以被SpringBoot自動識別並加載,但是如果是自訂的配置文件,就最好還是使用properties格式的文件,因為SpringBoot中暫時還並未提供手動加載yml格式文件的功能(這裡指註解方式)。

  application.properties設定檔欲被SpringBoot自動加載,需要放置到指定的位置:src/main/resource目錄下,一般自訂的設定檔也位於此目錄之下。

2、設定檔的載入

  載入的意思就是將檔案讀取到Spring容器之中,更確切的說就是將各個設定項裝載到Spring上下文容器之中供隨時取用。

  application.properties設定檔是在SpringBoot專案啟動的時候被自動載入的,其內部的相關設定會自動覆蓋SpringBoot預設的對應設定項,所以的設定項都會儲存到Spring容器之中。

1-公共設定檔:application.properties

1 donghao.name=唯一浩哥2 donghao.sex=男3 donghao.age=80

  自訂的xxx.properties設定檔是不會被SpringBoot自動載入的,需要手動去進行加載,這裡的手動加載一般指的是註解的方式加載,這裡就涉及到我們今天的重點之一:加載自定義屬性文件的註解:@PropertySource("classpath:xxx.properties"),這個註解專門用來載入指定位置的properties文件,Spring暫未提供載入指定位置yml檔案的註解,所以才有先前的說法。

2-自訂設定檔:donghao.properties

1 donghao1.name=动画2 donghao1.sex=女3 donghao1.age=22

  其实无论对于哪里的properties文件,当我们需要使用其中配置内容的时候,就在当前类的顶部加注该注解,将该配置文件加载到内存,这些配置文件一次加载即可多次使用。

3、配置项的使用

  配置项的使用其实很简单,只要是加载到Spring容器中的配置项都可以直接使用@Value("${key}")的方式来引用,一般将其配置在字段顶部,表示将配置项的值赋值给该字段。

  当然更多的情况是将这些配置项与一个JavaBean绑定起来使用,这样绑定一次,我们就可以随时使用。这里涉及到两种情况,一种是将application.properties中的配置与JavaBean绑定,一种是将自定义配置文件中的配置与Javabean绑定。

  第一种:applicaiton.properties属性绑定JavaBean

  这种情况相对简单(因为application.properties文件会被自动加载,也就是说配置项会被自动加载到内存,到Spring容器之中,省去了手动加载的配置),然后我们在要与属性绑定的JavaBean的类定义顶部加@Component注解和@ConfigurationProperties(prefix="key")注解,前者的目的是为了这个JavaBean可以被SpringBoot项目启动时候被扫描到并加载到Spring容器之中,重点是后者,这个注解一般不是单独使用的,他一般与后面要说的@EnableConfigurationProperties(JavaBean.class)配合使用,但是二者并非使用在同一位置,@ConfigurationProperties(prefix="key")注解加注在JavaBean类定义之上,按字面可以理解为属性配置注解,更直接点的说法就是属性绑定注解,官方解释是:如果想要绑定或者验证一些来源自.properties文件中的额外属性时,你可以在一个标注的@Configuration的类的注有@Bean注解的方法或者一个类之上加注这个注解。我们完全可以将其理解为绑定专用注解。它的作用就是将指定的前缀的配置项的值与JavaBean的字段绑定,这里要注意,为了绑定的成功,一般将字段的名称与配置项键的最后一个键名相同,这样整个键在去掉前缀的情况下就和字段名称一致,以此来进行绑定。

  第二种:自定义配置的属性绑定JavaBean

  这种情况与之前的基本相同,只是不能自动加载,需要手动加载,在JavaBean之上加上之前介绍的@PropertySource注解进行配置文件加载。还有一点就是将@Component改为@Configuration,为什么这么做呢?

  @Configuration注解的底层就是@Component,但是二者意义不同,@Configuration注解侧重配置之意,@Component侧重组件之意,当然配置也是项目组件之一,在这里我们要将配置文件属性与JavaBean绑定,当然更侧重配置之意。

  将配置与JavaBean绑定之后,我们就可以通过JavaBean来获取配置的内容,而且JavaBean已经被@Component注解或者@Configuration注解加载到Spring容器,我们可以使用自动注入的方式在其他类中随便使用。

  这里要注意一点:当我们在某个类中要使用这个JavaBean时,需要在这个类中指定这个JavaBean的类型,这个指定也要使用注解来制定,正是之前介绍的@EnableConfigurationProperties注解,这个注解与@ConfigurationProperties注解配套使用。官方给出的解释:这个注解是对@ConfigurationProperties的有效支持。标注有@ConfigurationProperties注解的Beans可以被使用标准的方式注册(使用@Bean注解),或者,为了方便起见,直接用使用@EnableConfigurationProperties指定注册。意思是这个注解提供了一种方便直接的注册Bean的方式。

3-绑定JavaBean:Donghao.java

 1 package com.donghao.model; 2  3 import org.springframework.boot.context.properties.ConfigurationProperties; 4 import org.springframework.context.annotation.Configuration; 5 import org.springframework.context.annotation.PropertySource; 6  7 @Configuration 8 @PropertySource("classpath:donghao.properties") 9 @ConfigurationProperties(prefix="donghao1")10 public class Donghao {11     private String name;12     private String sex;13     private String age;14     public String getName() {15         return name;16     }17     public void setName(String name) {18         this.name = name;19     }20     public String getSex() {21         return sex;22     }23     public void setSex(String sex) {24         this.sex = sex;25     }26     public String getAge() {27         return age;28     }29     public void setAge(String age) {30         this.age = age;31     }32 }

4-定义控制器:DonghaoController

 1 package com.donghao.controller; 2  3 import org.springframework.beans.factory.annotation.Autowired; 4 import org.springframework.beans.factory.annotation.Value; 5 import org.springframework.boot.context.properties.EnableConfigurationProperties; 6 import org.springframework.web.bind.annotation.RequestMapping; 7 import org.springframework.web.bind.annotation.RestController; 8  9 import com.donghao.model.Donghao;10 11 @RestController12 @RequestMapping("/donghao")13 @EnableConfigurationProperties(Donghao.class)14 public class DonghaoController {15     16     @Autowired17     Donghao donghao;18     19     @Value("${donghao.name}")20     private String name;21     22     @Value("${donghao.sex}")23     private String sex;24     25     @Value("${donghao.age}")26     private String age;27 28     29     @RequestMapping("/hello")30     public String hello(){31         return "我的名字叫"+name+",我是"+sex+"生,今年"+age+"岁了!";32     }33     34     @RequestMapping("/ss")35     public String ss(){36         return donghao.getName()+donghao.getSex()+donghao.getAge();37     }38 }

5-定义启动入口类:DonghaoApplication.java

 1 package com.donghao; 2  3 import org.springframework.boot.SpringApplication; 4 import org.springframework.boot.autoconfigure.SpringBootApplication; 5  6 @SpringBootApplication 7 public class DonghaoApplication { 8  9     public static void main(String[] args) {10         11         SpringApplication.run(DonghaoApplication.class, args);12         13     }14 15 }

  啟動程式之後,瀏覽器存取:http://localhost:8080/donghao/hello,結果為:

##  瀏覽器存取:http://localhost :8080/donghao/ss

  我這裡要重點強調一點,載入和使用並不相關聯,雖然載入的目的是為了使用,但是載入和使用之間並不是強關聯的,我們完全可以加載但不實用,所以我們應該將加載的過程與使用的過程分開來分析,他們對應於不同的註解,這些註解之間並不是強關聯的,他們各有各的用途,各有作用,如果只是載入自訂設定文件,只要一個@PropertySource註解就完事,使用方面的註解不用去管,當需要使用的使用,我們完全可以選擇多種使用的方式,直接使用的話我們就使用@Value註解進行直接賦值,這個註解就可以直接將被載入到Spring容器中的屬性配置的值賦值到指定的字段,當然也可以使用綁定JavaBean的方式。

  還有一點要注意,千萬不要在公共設定檔application.properties和自訂設定檔xxx.properties中配置相同的的設定項的不同值,因為公共設定檔的優先權最高,會覆蓋掉自訂設定檔中的內容,你可以這麼理解,公共設定檔中的某個設定被在啟動時載入到Spring容器中,之後又在另外一個自訂設定檔中載入了同名的設定項,二者有不同的值,但是係統會檢查二者的優先權,誰高誰留,誰低誰走,最後自訂設定檔中的值無效。

以上是properties配置的詳細介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn