欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot獲取配置文件的簡單實現(xiàn)方法

 更新時間:2020年05月31日 09:37:09   作者:阿福聊編程  
這篇文章主要給大家介紹了關(guān)于SpringBoot如何獲取配置文件的簡單實現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Spring Boot具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧

前言

在講SpringBoot 獲取配置文件之前我們需要對SpringBoot 的項目有一個整體的了解,如何創(chuàng)建SpringBoot 項目,項目結(jié)構(gòu)等等知識點,我在這里就不一一講述了,沒有學(xué)過的小伙伴可以自己在網(wǎng)上找一些資料進(jìn)行學(xué)習(xí),很簡單的。

下面讓我們開始今天的內(nèi)容講解吧。

一、SpringBoot 全局配置文件的加載順序

在SpringBoot 當(dāng)中,全局配置文件有兩種不同的格式,一個是我們常見的properties, 一種是yml.

這兩種格式的文件其實也沒什么太大的區(qū)別,使用的時候按照個人的習(xí)慣來就行,下面我們用的是yml文件。

首先,當(dāng)我們創(chuàng)建SpringBoot 的項目時,默認(rèn)在resources目錄下創(chuàng)建一個application.properties文件,這時我們可以在

這個文件當(dāng)中對項目進(jìn)行配置即可。但是在SpringBoot 中application.properties可以存放在以下幾個位置:

file:./config/ 項目根目錄下的config文件夾下

file:./ 項目根目錄下

classpath:/config/ 類路徑下的config文件夾下

classpath:/ 類路徑下

文件的加載順序:即根目錄下的config目錄下,然后是 根目錄下,然后是classpath路徑下的config目錄下,最后是classpath路徑下。

優(yōu)先級由高到低,高優(yōu)先級的配置會覆蓋低優(yōu)先級的配置。

假如:根目錄下的config目錄下定義端口為8084, 根目錄下定義端口為8083 ,classpath路徑下的config目錄定義端口為8082,classpath路徑下定義端口為8081,最后啟動,啟動的端口為8084 ,高優(yōu)先級會覆蓋低優(yōu)先級。

注意: 并不是高優(yōu)先級的被加載了,低優(yōu)先級的就不會再加載,實際上是SpringBoot會從這四個位置全部加載主配置文件,并且還能產(chǎn)生互相配置的效果。

除此外,我們還可以通過spring.config.location來改變默認(rèn)的配置文件位置。

項目打包好以后,我們可以使用命令行參數(shù)的形式,啟動項目的時候來指定配置文件的新位置;指定默認(rèn)加載的這些配置文件共同起作用形成互補(bǔ)配置。

在 G盤目錄下,創(chuàng)建一個application.yml文件,定義端口為8085

打包項目,啟動命令行:java -jar spring-boot-config-0.0.1-SNAPSHOT.jar --spring.config.location=G:/application.yml 回車運(yùn)行。

外部配置加載順序

1、命令行參數(shù)

eg: java -jar spring-boot-config-0.0.1-SNAPSHOT.jar --server.port=8087

---- 由jar包外向jar包內(nèi)進(jìn)行尋找:

​ 2、 優(yōu)先加載帶profile

jar包外部的 application-{profile}.properties或application.yml(帶spring.profile)配置文件

將打好的jar包放在一個目錄下,然后再該文件夾下新建一個名為application.yml的文件,其中指定

port為8082 ,訪問路徑為/boot ,然后命令行直接啟動項目。java -jar spring-boot-config-0.0.1-SNAPSHOT.jar --application.yml

在講配置文件之前,我先說一說yml文件配置信息書寫格式

基本數(shù)據(jù)類型(8種基本數(shù)據(jù)類型)以k: v 形式書寫即可

比如我在一個實體類(Person)中定義一個 屬性(age),類型是 int ,在yml文件中的書寫格式如下

person:
 age: 20

實體類對象(Person),Map ,k:v 在下一行來寫對象的屬性和值的關(guān)系,注意縮進(jìn)

person:
 userName: zhans
 age: 20
#另一種行內(nèi)寫法 
person: {userName: zhans.age: 20} 

List ,數(shù)組的書寫,注意 - 后有空格

pets:
 - cat
 - dog
 - pig
#另一種行內(nèi)寫法 
pets:{cat,dog,pi}

二、SpringBoot 獲取配置文件的方式

**@Value **

創(chuàng)建配置類,由于篇幅問題這里省略了 setter、getter 方法,但是實際開發(fā)中這個是必須的,否則無法成功注入,@Component表示把當(dāng)前配置類注入到Spring容器當(dāng)中。

@Component
public class PersonConfig {

 @Value("${person.userName}")
 private String userName;
 @Value("${person.age}")
 private int age;
 
}

在主配置文件中添加如下配置(application.yml)

server:
 port: 8081
person:
 userName: hello
 age: 20

測試類:

@RestController
public class PersonController {
 @Autowired
 private Person person;

 @RequestMapping(value = "/get",method = RequestMethod.GET)
 public String findPerson(){
 return "姓名:"+person.getUserName()+"年齡:"+person.getAge();
 }
}

啟動項目,訪問地址http://localhost:8080/get運(yùn)行結(jié)果:

姓名:hello年齡:20

所以,我們就可以通過 @Value(${key})的方式獲取全局配置文件中的指定配置項。

@ConfigurationProperties

如果我們需要取 許多個配置項,通過 @Value 的方式去配置項需要一個一個去取,顯然有點麻煩。所以我們可以使用 @ConfigurationProperties。

標(biāo)有 @ConfigurationProperties的類的所有屬性和配置文件中相關(guān)的配置項進(jìn)行綁定,綁定之后我們就可以通過這個類去訪問全局配置文件中的屬性值。

代碼實例如下:

1、在主配置文件中添加如下配置

user:
 username: admin
 password: 123456
 map: {k1: v1,k2: v2}
 list:
 - cat
 - dog
 person:
 userName: hello
 age: 20
 objects:
 - aaa
 - bbb
 - ccc

創(chuàng)建配置類,由于篇幅問題這里省略了 setter、getter ,toString 方法,但是實際開發(fā)中這個是必須的,否則無法成功注入。

@Component
@ConfigurationProperties(prefix = "user")
public class User {
 private String username;
 private String password;
 private Map<String,String> map;
 private Person person;
 private List<String> list;
 private Object[] objects;

}

這里 @ConfigurationProperties 有一個 prefix參數(shù),主要是用來指定該配置項在配置文件中的前綴,即user。

測試類

@RestController
public class PersonController {
 @Autowired
 private Person person;
 @RequestMapping(value = "/findUser",method = RequestMethod.GET)
 public String findUser(){
 return user.toString();
 }
}

我們在頁面訪問 http://localhost:8081/findUser,頁面就顯示我們在yml文件中配置的信息了。

User{username='admin', password='123456', map={k1=v1, k2=v2}, person=com.zfcoding.config.Person@93471e6, list=[cat, dog], objects=[aaa, bbb, ccc]}

以上的兩種方式有什么區(qū)別呢?

@ConfigurationProperties @Value
功能 批量注入配置文件的屬性 一個一個指定
松散綁定 支持 不支持
JSR303數(shù)據(jù)校驗 支持 不支持
復(fù)雜數(shù)據(jù)封裝 支持 不支持(Map)

松散綁定,username 可以用user-name 表示,來獲取值

JSR303數(shù)據(jù)校驗,如果用@Value獲取全局配置文件的屬性,使用@Validated文件格式校驗是不起作用的。

@PropertySource 注解加載指定的配置文件。

​ @PropertySource (value = “ ”) 指明加載類路徑下的哪個配置文件來注入值

創(chuàng)建配置類,由于篇幅問題這里省略了 setter、getter ,toString 方法,但是實際開發(fā)中這個是必須的,否則無法成功注入。

@Component
@PropertySource( "classpath:student.properties")
@ConfigurationProperties(prefix = "student")
public class Student {

 private String sname;
}

在student.properties文件中添加如下配置

student.sname=admin

測試類

@SpringBootTest
class SpringbootExampleApplicationTests {
 @Autowired
 private DogConfig dogConfig;
 @Test
 void contextLoads() {
 System.out.println("注入的對象:"+dogConfig.getName());
 }

}

運(yùn)行結(jié)果:

Student{sname='admin'}

@ImportResource 導(dǎo)入Spring 配置文件

@ImportResource 注解用來導(dǎo)入 Spring 的配置文件,如果Spring配置文件 "bean.xml",從而讓配置文件里面的內(nèi)容生效,通??梢园袬ImportResource標(biāo)注在@SpringBootApplication的啟動類上即可。

舉例說明:比如我們把PersonService注入到Spring容器當(dāng)中,通過Spring配置文件的方式操作,代碼示例如下:

public class PersonService {
}
@ImportResource("classpath:bean.xml")
@SpringBootApplication
public class SpringBootConfigApplication {

 public static void main(String[] args) {
 SpringApplication.run(SpringBootConfigApplication.class, args);
 }

}

Spring的配置文件:bean.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
 <bean id="personService" class="com.zfcoding.service.PersonService"></bean>
</beans>

測試的案例:

@SpringBootTest
class SpringBootConfigApplicationTests {
 @Autowired
 private PersonService personSerivcer;
 @Test
 void contextLoads() {
 System.out.println("注入的對象:"+personSerivcer);
 }
}

運(yùn)行的結(jié)果:

注入的對象:com.zfcoding.service.PersonService@5b84f14

這Spring 中bean的配置實現(xiàn),但是SpringBoot 推薦我們使用注解開發(fā),那Springboot 中注解是如何實現(xiàn)bean 的注入呢?

@Configuration:指明當(dāng)前類是配置類,就是代替上面說到的spring的配置文件.

@Bean 將方法返回值添加到容器當(dāng)中,容器中這個組件默認(rèn)的id 是方法名

@Configuration
public class MyConfig {
 @Bean
 public PersonSerivcer personSerivcer(){
 return new PersonSerivcer();
 }
}

這樣就可以就可以通過注解實現(xiàn)代替Spring 中的配置文件了。

三、SpringBoot 的Profile

我們這里就以yml文件為例

第一種是我在 主配置文件編寫的時候,文件名可以是application-{profile}.yml(application-dev.yml, application-prod.yml),默認(rèn)使用 文件application.yml 的配置

1、如果我們想要使用的application-dev.yml 全局配置文件,在application.yml 指定即可。

配置實例:

在application.yml 配置文件中添加如下配置

spring:
 profiles:
 active: dev

在application-dev.ym 配置文件中添加如下配置l

server:
 port: 8080
#應(yīng)用訪問的項目路徑
 servlet:
 context-path: /boot
person:
 username: 占山

2、yml支持多文檔快方式

那么,在application-dev.ym 配置文件中添加如下配置l

spring:
 profiles:
 active: prod
---
server:
 port: 8080
 servlet:
 context-path: /zf
spring:
 profiles: dev
---
person:
 userName: 啊哈
server:
 port: 8081
 servlet:
 context-path: /boot
spring:
 profiles: prod

3、Program arguments

   在Program arguments中配置參數(shù)

--spring.profiles.active=dev

4、虛擬機(jī)的方式

在VM options下使用命令:-Dspring.profiles.active=prod

四、小結(jié)

實際開發(fā)中我們?nèi)绻绻覀冃枰?許多個配置項,就使用@ConfigurationProperties注解,如果只是注入一個屬性就使用@Value,

@PropertySource 注解加載指定的配置文件,@ImportResource 導(dǎo)入Spring 配置文件(這里可以使用注解來替代)。

到此這篇關(guān)于SpringBoot獲取配置文件的簡單實現(xiàn)方法就介紹到這了,更多相關(guān)SpringBoot獲取配置文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 說一說java關(guān)鍵字final和transient

    說一說java關(guān)鍵字final和transient

    這篇文章主要和大家說一說java關(guān)鍵字final和transient,感興趣的小伙伴們可以參考一下
    2016-06-06
  • SpringBoot yaml語法與JRS303校驗超詳細(xì)講解

    SpringBoot yaml語法與JRS303校驗超詳細(xì)講解

    YAML 是 “YAML Ain’t Markup Language”(YAML 不是一種標(biāo)記語言)的遞歸縮寫。在開發(fā)的這種語言時,YAML 的意思其實是:“Yet Another Markup Language”(仍是一種標(biāo)記語言),本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-10-10
  • java中的Io(input與output)操作總結(jié)(四)

    java中的Io(input與output)操作總結(jié)(四)

    前面已經(jīng)把java io的主要操作講完了,這一節(jié)我們來說說關(guān)于java io的其他內(nèi)容:Serializable序列化/DataOutputStream和DataInputStream類/管道流等等,感興趣的朋友可以了解下
    2013-01-01
  • Java基礎(chǔ)之FastJson詳解

    Java基礎(chǔ)之FastJson詳解

    今天給大家復(fù)習(xí)Java基礎(chǔ)FastJson,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-05-05
  • 解析阿里一面CyclicBarrier和CountDownLatch的區(qū)別

    解析阿里一面CyclicBarrier和CountDownLatch的區(qū)別

    這篇文章主要介紹了阿里一面CyclicBarrier和CountDownLatch的區(qū)別是啥,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • Swing中依據(jù)鼠標(biāo)拖拽來畫出矩形的實現(xiàn)方法

    Swing中依據(jù)鼠標(biāo)拖拽來畫出矩形的實現(xiàn)方法

    這篇文章主要介紹了Swing中依據(jù)鼠標(biāo)拖拽來畫出矩形的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Java面向?qū)ο蠡A(chǔ)知識之?dāng)?shù)組和鏈表

    Java面向?qū)ο蠡A(chǔ)知識之?dāng)?shù)組和鏈表

    這篇文章主要介紹了Java面向?qū)ο蟮闹當(dāng)?shù)組和鏈表,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java基礎(chǔ)的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-11-11
  • 淺談序列化之protobuf與avro對比(Java)

    淺談序列化之protobuf與avro對比(Java)

    下面小編就為大家?guī)硪黄獪\談序列化之protobuf與avro對比(Java)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • idea2020.3配置maven環(huán)境并配置Tomcat的詳細(xì)教程

    idea2020.3配置maven環(huán)境并配置Tomcat的詳細(xì)教程

    這篇文章主要介紹了idea2020.3配置maven環(huán)境并配置Tomcat的詳細(xì)教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • Java中RSA加密解密的實現(xiàn)方法分析

    Java中RSA加密解密的實現(xiàn)方法分析

    這篇文章主要介紹了Java中RSA加密解密的實現(xiàn)方法,結(jié)合具體實例形式分析了java實現(xiàn)RSA加密解密算法的具體步驟與相關(guān)操作技巧,并附帶了關(guān)于RSA算法密鑰長度/密文長度/明文長度的參考說明,需要的朋友可以參考下
    2017-07-07

最新評論