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

關(guān)于SpringBoot的@ConfigurationProperties注解和松散綁定、數(shù)據(jù)校驗

 更新時間:2023年05月12日 11:29:25   作者:Java筆記蝦  
這篇文章主要介紹了關(guān)于SpringBoot的@ConfigurationProperties注解和松散綁定、數(shù)據(jù)校驗,@ConfigurationProperties主要作用就是將prefix屬性指定的前綴配置項的值綁定到這個JavaBean上?,通過指定的前綴,來綁定配置文件中的配置,需要的朋友可以參考下

@ConfigurationProperties

源碼分析

@ConfigurationProperties主要作用就是將prefix屬性指定的前綴配置項的值綁定到這個JavaBean上 ,通過指定的前綴,來綁定配置文件中的配置,通過如下源碼可以看出, 如果你想綁定和驗證一些外部屬性,可以將它添加到類定義或@Configuration類中的@Bean方法上。

7da7d0d31ad38c784dd075d0b603cb8a.jpg

標(biāo)注在類上

@Data   //使用該注解需要導(dǎo)入Lombok依賴
@Component
@ConfigurationProperties(prefix = "userinfo")
public class UserInfo {
    private String userId;
    private String name;
}

application.yml文件配置內(nèi)容

userInfo:
  userId: 1001
  name: lucy

接下來通過控制器方法來返回這個對象,查看數(shù)據(jù)是否綁定

@RestController
public class HelloController {
    @Autowired
    private UserInfo userInfo;
    @GetMapping("/user")
    public UserInfo getUserInfo(){
        return userInfo;
    }
}

cc5710581bf9ec2df57a9ad4ff92b399.jpg

標(biāo)注在方法上

上面源碼中說到可以將它添加到@Configuration類中的@Bean方法上,所以下面來看看標(biāo)注在方法上是如何使用的!

比如我們用到druid數(shù)據(jù)源的操作,這個數(shù)據(jù)源是屬于第三方的,所以我們不能操作源碼,不能再源碼里面找到它的對象來給他添加注解,但我們可以在yml文件中給他配置,來拿到它的屬性。

首先添加所需的依賴

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.2.11</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

接著在yml文件中配置數(shù)據(jù)源

spring:
  datasource:
    druid:
      driver-class-name: com.mysql.jdbc.Driver
      url: jdbc:mysql://localhost:3306/test?serverTimezone=UTC
      username: root
      password: root

創(chuàng)建一個配置類,然后在類方法上添加注解,并通過prefix綁定數(shù)據(jù)

@SpringBootConfiguration
public class DatasourceConfig {
    @Bean
    @ConfigurationProperties(prefix = "spring.database.druid")
    public DataSource database(){
        return new DruidDataSource();
    }
}

通過控制器方法來檢驗綁定效果

@RestController
public class HelloController {
    @Autowired
    private DataSource dataSource;
    @GetMapping("/datasource")
    public void getDataSource(){
        System.out.println(dataSource);
    }
}

訪問//localhost/datasource,查看控制臺輸出?。?!

9341b6ef6b34654a409363627fb1bf96.jpg

松散綁定

我們在使用 @ConfigurationProperties注解的時候,@ConfigurationProperties(prefix = “userinfo”),這里給prefix的屬性值與yml文件中的屬性名稱不一致,但是依舊綁定成功了!原因是什么呢?

這就需要提到Spring的松散綁定屬性規(guī)則。因此使用以下方式書寫都能與類的屬性名稱匹配。

userInfo:
  userId: 1001 # 駝峰命名方式
  #user_id: 1002 #下劃線方式
  #user-id: 1003 #烤肉串方式
  #USER_ID: 1004 # 常量方式
  name: lucycd

需要注意的是,prefix的屬性值必須全部為小寫,就像下圖所示,就會報錯:前綴必須是規(guī)范形式。

7f7e06d63d00ee6236b83733a142d102.jpg

運行程序,也會在控制臺提示你:配置屬性名稱“userInfo”無效;無效字符:“I”

0b108ee9daa67a61f1e6ea76d2325384.jpg

數(shù)據(jù)校驗

Spring Boot中有很多配置文件,配置文件中我們可以自定義一些對應(yīng)的屬性值。那么這些屬性值是否合法呢?我們?nèi)绾蝸硇r??在Java中有一種JSR303規(guī)范,我們可以針對一些對應(yīng)的數(shù)值來進(jìn)行校驗。按照規(guī)范來進(jìn)行書寫,如果不符合要求就說明校驗失敗,反之,則成功!

SpringBoot也給出了強大的數(shù)據(jù)校驗功能,可以有效的避免此類問題的發(fā)生。在JAVA EE的JSR303規(guī)范中給出了具體的數(shù)據(jù)校驗標(biāo)準(zhǔn),開發(fā)者可以根據(jù)自己的需要選擇對應(yīng)的校驗框架,此處使用Hibernate提供的校驗框架來作為實現(xiàn)進(jìn)行數(shù)據(jù)校驗。

導(dǎo)入驗證包和校驗實現(xiàn)包

<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
</dependency>
<dependency>
    <groupId>org.hibernate.validator</groupId>
    <artifactId>hibernate-validator</artifactId>
</dependency>

添加注解@Validated

給屬性添加驗證規(guī)則

@Data
@Component
@ConfigurationProperties(prefix = "userinfo")
@Validated
public class UserInfo {
   @Max(value = 1000,message = "userid超出范圍了!")
   @Min(value = 0,message = "userid不能小于0!")
   private String userId;
   @Size(min = 2,max = 5,message = "name長度應(yīng)該在2-5之間")
   private String name;
}

這里我們先輸入不符合規(guī)范的數(shù)據(jù),來驗證數(shù)據(jù)是否能夠校驗成功

userInfo:
  userId: 1001
  name: lucycd

編寫一個控制器方法來檢驗

@RestController
public class HelloController {
    @Autowired
    private UserInfo userInfo;
    @GetMapping("/user")
    public UserInfo getUserInfo(){
        return userInfo;
    }
}

運行程序,查看控制臺,校驗成功?。。?/p>

d5e87ab790d2ba511cdf8834919d6419.jpg

同樣,將數(shù)據(jù)修改為符合規(guī)則的數(shù)據(jù),程序就可以成功運行了!?。?/p>

當(dāng)然,這里的校驗規(guī)則還有許多,@NotNull@NotEmpty、@Email等等,可以根據(jù)實際情況選擇合適的注解。

1e6daa080e31ba54174d354bd095abf2.jpg

到此這篇關(guān)于關(guān)于SpringBoot的@ConfigurationProperties注解和松散綁定、數(shù)據(jù)校驗的文章就介紹到這了,更多相關(guān)SpringBoot的@ConfigurationProperties注解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 搭建Spring Boot聚合項目的實現(xiàn)示例

    搭建Spring Boot聚合項目的實現(xiàn)示例

    本文主要介紹了搭建Spring Boot聚合項目的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-04-04
  • 使用IDEA查看jar包及jar包的正確打開方式

    使用IDEA查看jar包及jar包的正確打開方式

    IDEA 是把 jar 包添加為 Libraries,然后展開后即可查看,因為是編譯后的 class 文件,所以注釋是沒有的,今天小編給大家介紹下使用IDEA查看jar包及jar包的正確打開方式,感興趣的朋友一起看看吧
    2023-07-07
  • 詳解Java如何優(yōu)雅的處理異常

    詳解Java如何優(yōu)雅的處理異常

    在編寫 Java 程序的過程中,有一種異常幾乎每個開發(fā)者都會遇到——空指針異常(NullPointerException),那么我們應(yīng)該如何有效且優(yōu)雅的處理空指針異常呢,下面小編就來詳細(xì)介紹這個處理方案吧
    2023-08-08
  • Spring activiti如何實現(xiàn)指定任務(wù)處理者

    Spring activiti如何實現(xiàn)指定任務(wù)處理者

    這篇文章主要介紹了Spring activiti如何實現(xiàn)指定任務(wù)處理者,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-11-11
  • Java中的鎖與鎖的狀態(tài)升級詳細(xì)解讀

    Java中的鎖與鎖的狀態(tài)升級詳細(xì)解讀

    這篇文章主要介紹了Java中的鎖與鎖的狀態(tài)升級詳細(xì)解讀,Java 1.6以后官方針對鎖的優(yōu)化,主要是增加了兩種新的鎖:偏向鎖和輕量級鎖,再加上本身重量級鎖,那么鎖基本上可以大致分為這三種,它們之間的區(qū)別主要是體現(xiàn)在等待時間上面,需要的朋友可以參考下
    2024-01-01
  • Spring Boot日志控制詳解

    Spring Boot日志控制詳解

    這篇文章主要為大家詳細(xì)介紹了Spring Boot日志控制的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Java基于LoadingCache實現(xiàn)本地緩存的示例代碼

    Java基于LoadingCache實現(xiàn)本地緩存的示例代碼

    本文主要介紹了Java基于LoadingCache實現(xiàn)本地緩存的示例代碼,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Java與Oracle實現(xiàn)事務(wù)(JDBC事務(wù))實例詳解

    Java與Oracle實現(xiàn)事務(wù)(JDBC事務(wù))實例詳解

    這篇文章主要介紹了Java與Oracle實現(xiàn)事務(wù)(JDBC事務(wù))實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • java之路徑分隔符介紹

    java之路徑分隔符介紹

    考慮到程序的可移植性,創(chuàng)建文件時建議大家選用"/",因為經(jīng)過測試用java創(chuàng)建文件時在windows平臺下用“/”也是可以的,java貌似在后臺作過處理了。
    2013-03-03
  • Spring 加載多個xml配置文件的原理分析

    Spring 加載多個xml配置文件的原理分析

    我們知道Spring一次可以加載多個Bean定義的Xml配置文件,我們可以設(shè)想下如果讓我們來做我們會怎么做?我估計會根據(jù)配置文件的順序依次讀取并加載,那再來看看Spring是如何做的?
    2021-06-06

最新評論