最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring?boot配置綁定和配置屬性校驗(yàn)的方式詳解

 更新時(shí)間:2022年05月07日 10:14:07   作者:桃花鍵神  
這篇文章主要介紹了Spring?boot配置綁定和配置屬性校驗(yàn),SpringBoot 提供了2 種方式進(jìn)行配置綁定,即使用 @ConfigurationProperties 注解和使用 @Value 注解,需要的朋友可以參考下

配置綁定

所謂配置綁定”就是把配置文件中的值與 JavaBean 中對(duì)應(yīng)的屬性進(jìn)行綁定。通常,我們會(huì)把一些配置信息(例如,數(shù)據(jù)庫配置)放在配置文件中,然后通過 Java 代碼去讀取該配置文件,并且把配置文件中指定的配置封裝到 JavaBean(實(shí)體類) 中。
SpringBoot 提供了以下 2 種方式進(jìn)行配置綁定:

  • 使用 @ConfigurationProperties 注解
  • 使用 @Value 注解

先建立數(shù)據(jù)配置文件

application.yml

sb:
  port: 8086
  username: 'abc \n hello' #字符串 
  password: 6564321 #字符串 
  birthday: 2011/12/23 #日期 
  books: #map 
    jsp: 36 
    html: 78 
    spring: 78 
  books2: {jsp: 56,spring: 65,mybatis: 98} #map 行內(nèi) 
  person: #javabean 
    name: abc 
    age: 23 
  person2: {name: lily, age: 36 } #javabean行內(nèi) 
  hobby: #數(shù)組 
    - jsp 
    - hibernate 
    - spring 
    - mybatis 
  list: # list集合 
    - 32 
    - 65
    - 98 
  set: #set 集合 
    - hello 
    - world 
  hobby2: [23,45,56] #數(shù)組 list set 行內(nèi) 
  mapList: # 數(shù)組 list set 里存map 
    - jsp: 36 
      hibernate: 58 
    - html: 65 
      css: 98 
      js: 65
    - {vue: 36,react: 98}

@ConfigurationProperties

通過 Spring Boot 提供的 @ConfigurationProperties 注解,可以將全局配置文件中的配置數(shù)據(jù)綁定到 JavaBean 中。
DbConfig.java

@Configuration 
@ConfigurationProperties(prefix = "sb") 
public class DbConfig { 
String username; 
String password; 
Date birthday;
Map books;
Person person;
Map books2;
Person person2;
String [] hobby;
List list;
Set set ;
int [] hobby2;
List<Map> mapList;
       /************省略geter/seter方法*************/ 
       }

只有在容器中的組件,才會(huì)擁有 SpringBoot 提供的強(qiáng)大功能。如
果我們想要使用 @ConfigurationProperties 注解進(jìn)行配置綁定,
那么首先就要保證該對(duì) JavaBean 對(duì)象在 IoC 容器中,所以需要用
到 @Configuration 注解來添加組件到容器中。
JavaBean 上使用了注解 @ConfigurationProperties(prefix = “sb”)
,它表示將這個(gè) JavaBean 中的所有屬性與配置文件中以“sb”為前
綴的配置進(jìn)行綁定。

@Value

@Value的作用是通過注解將常量、配置文件中的值、其他bean的屬性值注入到變量中,作為變量的初始值。 @Value的值有兩類:
① ${property : default_value }
② #{ obj.property? :default_value }
第一個(gè)注入的是外部配置文件對(duì)應(yīng)的property,第二個(gè)則是SpEL表達(dá)式對(duì)應(yīng)的內(nèi)容。
default_value,就是前面的值為空時(shí)的默認(rèn)值。注意二者的不同,#{}里面那個(gè)obj代表對(duì)象。

也就是說@Value注解有兩種用法,一種是@Value(“${}”)和@Value(“#{}”),搞清楚分類后我們一一來分析。

第一種 @Value(“${}”)

controller層代碼:

@RestController
@RequestMapping("/test")
public class ValueController {
    @Autowired
    private CarpollingService carpollingService;
    @GetMapping("/getValue")
    public String getValue(){
        return carpollingService.getValue();
    }
}

配置類代碼:

@Configuration 
public class CarpollingServiceImpl {
    @Value("${db.port}")
    private String port;
    @Override
    public String getValue() {
        return port;
    }
}

第二種@Value(“#{}”)

注意: #{}是不能以第一種方式來進(jìn)行取值,否則會(huì)報(bào)錯(cuò)

前面已經(jīng)說了,#{}里面包含的是obj,所以需要配合bean來使用,現(xiàn)在創(chuàng)建一個(gè)UserBean,并且給某個(gè)字段加上@Value(“#{}”)注解(按自己的需求任意添加注解)

UserBean類代碼:

@Data
@Component//添加component注解,使其注冊(cè)進(jìn)容器,交由容器進(jìn)行管理
public class UserBean {
    private String name="張三";}

controller層代碼:

@RestController
@RequestMapping("/test")
public class ValueController {
       @Autowired
    CarpollingServiceImpl carpollingService;
    @GetMapping("/getValue")
    public String getValue(){
        return carpollingService.getValue();
    }
}

配置類代碼:

@Configuration
public class CarpollingServiceImpl {
    @Value("#{userBean.name}")
    private String port;
    public String getValue() {
        return port;
    }
}

@PropertySource

如果將所有的配置都集中到 application.properties 或 application.yml
中,那么這個(gè)配置文件會(huì)十分的臃腫且難以維護(hù),因此我們通常會(huì)將與Spring Boot 無關(guān)的配置(例如自定義配置)提取出來,寫在一個(gè)單獨(dú)的配置文件中,并在對(duì)應(yīng)的 JavaBean 上使用 @PropertySource 注解指向該配置文件。

我們也可以自定義配置文件,例如新建 db.properties ,配置內(nèi)容如下:

pro.username=admin 
pro.password=123456 
pro.birthday=2000/12/01 
pro.age=23 
pro.books={jsp:36,html:360,spring:65} 
pro.hobby=23,34 
pro.list=sprig,myatis 

配置類:

@Component 
@PropertySource("classpath:db.properties") 
@Data 
public class User {
 @Value("${pro.username}") 
 String username; 
 @Value("${pro.password}") 
 String password; 
 @Value("${pro.birthday}") 
 Date birthday;
 }

注: 該注解只能引用properties文件

配置屬性校驗(yàn)

自定義配置文件時(shí),可以使用@Validated注解對(duì)注入的值進(jìn)行一些簡單的校驗(yàn),示例代碼:
Testconfig.java

@Validated
@Configuration
@ConfigurationProperties(prefix = "sb")
public class Testconfig {
    @Max(value = 123)
    private String password;
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
}

測試

 @Autowired
    Testconfig testconfig;
    @Test
    void a() {
        System.out.println(testconfig.getPassword());
    }

拋出錯(cuò)誤,最大值不能超過123

@Max(value = 123)注解會(huì)對(duì)注入的值進(jìn)行校驗(yàn),如果不是小于123的將會(huì)報(bào)錯(cuò)拋出
其它常見注解:
@AssertFalse 校驗(yàn)false
@AssertTrue 校驗(yàn)true
@DecimalMax(value=,inclusive=) 小于等于value,inclusive=true,
是小于等于
@DecimalMin(value=,inclusive=) 與上類似
@Max(value=) 小于等于value
@Min(value=) 大于等于value
@NotNull 檢查Null
@Past 檢查日期
@Pattern(regex=,flag=) 正則
@Size(min=, max=) 字符串,集合,map限制大小
@Validate 對(duì)po實(shí)體類進(jìn)行校驗(yàn)

上述的這些注解位于javax.validation.constraints包下, SpringBoot 2.3.0以后maven引用:

<dependency> 
<groupId>org.springframework.boot</groupId> 
<artifactId>spring-boot-starter-validation</artifactId> 
</dependency>

@Value 與 @ConfigurationProperties對(duì)比

@Value 和 @ConfigurationProperties 注解都能讀取配置文件中的屬性值并綁定到 JavaBean 中,但兩者存在以下不同。

1. 使用位置不同

  • @ConfigurationProperties:標(biāo)注在 JavaBean 的類名上;
  • @Value:標(biāo)注在 JavaBean 的屬性上。

2. 功能不同

  • @ConfigurationProperties:用于批量綁定配置文件中的配置;
  • @Value:只能一個(gè)一個(gè)的指定需要綁定的配置。

3. 松散綁定支持不同

@ConfigurationProperties:支持松散綁定(松散語法),例如實(shí)體類Person 中有一個(gè)屬性為 firstName,那么配置文件中的屬性名支持以下寫法:

  • person.firstName
  • person.first-name
  • person.first_name
  • PERSON_FIRST_NAME

@Vaule:不支持松散綁定。

4. SpEL 支持不同

  • @ConfigurationProperties:不支持 SpEL 表達(dá)式;
  • @Value:支持 SpEL 表達(dá)式。

5. 復(fù)雜類型封裝

  • @ConfigurationProperties:支持所有類型數(shù)據(jù)的封裝,例如 Map、 List、Set、以及對(duì)象等;
  • @Value:支持基本數(shù)據(jù)類型的封裝,例如字符串、布爾值、整數(shù)等類型, 對(duì)集合Map list set配置有要求

6.屬性校驗(yàn)

  • @Value不支持屬性校驗(yàn)
  • @ConfigurationProperties 支持屬性校驗(yàn)

7. 應(yīng)用場景不同

@Value 和 @ConfigurationProperties 兩個(gè)注解之間,并沒有明顯的優(yōu)劣之分,它們只是適合的應(yīng)用場景不同而已。

  • 若只是獲取配置文件中的某項(xiàng)值,則推薦使用 @Value 注解;
  • 若專門編寫了一個(gè) JavaBean 來和配置文件進(jìn)行映射,則建議使用 @ConfigurationProperties 注解。

我們?cè)谶x用時(shí),根據(jù)實(shí)際應(yīng)用場景選擇合適的注解能達(dá)到事半功倍的效果

到此這篇關(guān)于Spring boot配置綁定和配置屬性校驗(yàn)的文章就介紹到這了,更多相關(guān)Spring boot配置屬性校驗(yàn)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

出国| 石景山区| 女性| 晋宁县| 通渭县| 大姚县| 永城市| 陆丰市| 昌乐县| 绥德县| 抚远县| 丹棱县| 普洱| 祁门县| 延安市| 孝感市| 定远县| 合江县| 两当县| 龙胜| 宿迁市| 沅陵县| 冕宁县| 阜康市| 河间市| 博罗县| 新源县| 温宿县| 金湖县| 土默特右旗| 民丰县| 福海县| 平凉市| 灯塔市| 兴隆县| 华宁县| 秀山| 广南县| 四川省| 鄂州市| 丹寨县|