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

java?springboot中如何讀取配置文件的屬性

 更新時(shí)間:2022年01月23日 14:44:40   作者:灰小猿  
大家好,本篇文章主要講的是java?springboot中如何讀取配置文件的屬性,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下

我們知道在比較大型的項(xiàng)目的開發(fā)中,比較經(jīng)常修改的屬性我們一般都是不會(huì)在代碼里面寫死的,而是將其定義在配置文件中,之后如果修改的話,我們可以直接去配置文件中修改,那么在springboot的項(xiàng)目中,我們應(yīng)該如何實(shí)現(xiàn)這個(gè)呢?

接下來我們以一個(gè)實(shí)例的形式教大家如何讀取配置文件中的屬性并使用。

以yml中數(shù)據(jù)庫(kù)的配置為例,配置文件如下:

配置文件

jdbc:
  driverClassName: com.mysql.jdbc.Driver
  url: jdbc:mysql://127.0.0.1:3306/test
  username: root
  password: root

(1)使用注解@Value映射

首先第一種方法,使用@Value注解進(jìn)行映射,這種方法適用于對(duì)象的參數(shù)比較少的情況,我們可以直接在對(duì)象的屬性上使用@Value注解,在其中以${}的形式傳入配置文件中對(duì)應(yīng)的屬性

同時(shí)需要在該類的上方使用@Configuration注解,將該類作為配置文件加入,在啟動(dòng)項(xiàng)目的時(shí)候?qū)崿F(xiàn)注入。

實(shí)例如下:

@Configuration
public class JdbcProperties {
    @Value("${jdbc.driverClassName}")
    private String driverClassName;
    @Value("${jdbc.url}")
    private String url;
    @Value("${jdbc.username}")
    private String username;
    @Value("${jdbc.password}")
    private String password;
}

這樣我們?cè)谑褂迷搶?duì)象的屬性值的時(shí)候,可以直接通過調(diào)用該對(duì)象的屬性獲取。

(2)使用@ConfigurationProperties映射

第二種方法相對(duì)于第一種方法更簡(jiǎn)單一些,不需要在每一個(gè)字段的上面的使用@Value注解,直接使用一個(gè)@ConfigurationProperties注解標(biāo)注在類上即可,在其中傳入的參數(shù)為在yml配置文件上參數(shù)的前綴,但是效果是和第一種是一樣的

@ConfigurationProperties注解聲明當(dāng)前類為配置讀取類

prefix="jdbc"表示讀取前綴為jdbc的屬性

會(huì)將配置文件中前綴為prefix的屬性賦給類中同名的字段

實(shí)例如下:

@ConfigurationProperties(prefix = "jdbc")
public class JdbcProperties {
    private String driverClassName;
    private String url;
    private String username;
    private String password;
}

使用該注解時(shí)有一點(diǎn)需要注意:必須保證屬性名稱和字段一模一樣,且類需要提供字段的setter方法

但是如果只使用@ConfigurationProperties注解是沒有效果的,他并不會(huì)講配置文件中的參數(shù)和屬性匹配。他需要配合其他在啟動(dòng)項(xiàng)目時(shí)會(huì)生效的注解一起使用才會(huì)生效

一種方法是在JdbcProperties類上添加一個(gè)@Configuration注解,將其標(biāo)識(shí)為配置類

如下:

@Configuration
@ConfigurationProperties(prefix = "jdbc")
public class JdbcProperties {
    private String driverClassName;
    private String url;
    private String username;
    private String password;
}

或者還有第二種方法:我們還可以在Spring中使用這個(gè)配置讀取類,通過@EnableConfigurationProperties注解可以將指定的配置讀取類的對(duì)象加載到Spring容器,也就是說,在其他配置類上使用一個(gè)@EnableConfigurationProperties注解,來將配置文件的參數(shù)和JdbcProperties類的屬性綁定。這樣就不需要在JdbcProperties類上使用@Configuration注解了

實(shí)例如下:

@Configuration
@EnableConfigurationProperties(JdbcProperties.class)
public class JdbcConfig {
    @Autowired
    private JdbcProperties prop;

    /**
    這種方式不需要@Autowired注入字段,也不需要構(gòu)造函數(shù)注入,
    直接在方法中定義配置讀取類的形參,Springboot在創(chuàng)建DataSource對(duì)象時(shí)會(huì)自動(dòng)注入JdbcProperties對(duì)象
    */
    @Bean
    public DataSource dataSource(){
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(prop.getDriverClassName());
        dataSource.setUrl(prop.getUrl());
        dataSource.setUsername(prop.getUsername());
        dataSource.setPassword(prop.getPassword());
        return dataSource;
    }
}

(3)推薦使用:極簡(jiǎn)方式 @Bean和@ConfigurationProperties注解一起使用,

對(duì)于我個(gè)人的習(xí)慣而言,在使用的時(shí)候,我還是喜歡使用第三種方法,這種方法使用起來最簡(jiǎn)單,而且也最實(shí)用

在一個(gè)帶@Configuration注解的配置類中,我們可以直接把@ConfigurationProperties(prefix = “jdbc”)注解聲明在需要使用的@Bean的方法上,Springboot會(huì)自動(dòng)將配置文件中以prefix開頭的屬性賦給要?jiǎng)?chuàng)建對(duì)象的類的同名字段上,使用前提:要求類該類必須提供了setter方法

使用這種方法的好處就是不要在bean上做任何額外的注解聲明。統(tǒng)一將需要進(jìn)行注入容易或和配置文件參數(shù)進(jìn)行綁定的類放置在一個(gè)帶@Configuration注解的類中即可!

@Configuration
public class JdbcConfig {
    @Bean
    @ConfigurationProperties(prefix = "jdbc")
    public JdbcProperties jdbcProperties(){
        return new JdbcProperties();
    }
}

但是以上的操作,只是將bean注入到了容器中,那么在其他類中使用的話,還是需要在每一個(gè)對(duì)象上使用@Autowired注解,那么有沒有什么方法可以不使用@Autowired注解來聲明自動(dòng)注入呢?

@RequiredArgsConstructor注解實(shí)現(xiàn)自動(dòng)注入

使用@RequiredArgsConstructor注解可以代替@autowired注解實(shí)現(xiàn)對(duì)象屬性的自動(dòng)注入,

使用場(chǎng)景:需要注入很多的mapper接口或者另外的service接口,這時(shí)候就會(huì)寫很多的@Autowired注解,代碼看起來很亂,lombok提供了一個(gè)注解:

@RequiredArgsConstructor(onConstructor =@_(@Autowired))

寫在類上可以代替@Autowired注解,需要注意的是在注入時(shí)需要用final定義,或者使用@notnull注解

@RestController
@RequiredArgsConstructor
public class LoginTest {

//    @Autowired
    private final LoginProperties loginProperties;

    @RequestMapping("/login01")
    public void loginTest01(){
        System.out.println("進(jìn)入loginTest01方法~~~");
        String language = loginProperties.getLanguage();
        System.out.println(language);
    }

}

這樣就可以避免寫入重復(fù)的@Autowired了,但是就是需要注意對(duì)象必須是final修飾的才行

總結(jié)

如果需要將類屬性與配置文件中的參數(shù)綁定,并且注入到容器中時(shí),推薦使用第三種方法和@RequiredArgsConstructor注解來實(shí)現(xiàn)?。?!

到此這篇關(guān)于java springboot中如何讀取配置文件的屬性的文章就介紹到這了,更多相關(guān)java springboot讀取文件屬性內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 在Java中去除字符串末尾的換行符的常用方法小結(jié)

    在Java中去除字符串末尾的換行符的常用方法小結(jié)

    在日常開發(fā)中,字符串操作是非常常見的需求,其中去除字符串末尾的換行符(\n)是一個(gè)很有代表性的場(chǎng)景,本文將從 Java 的幾種常用方法著手,全面解析如何去除字符串末尾的換行符,并結(jié)合代碼示例和實(shí)際使用場(chǎng)景,幫助大家掌握這一技巧,需要的朋友可以參考下
    2024-12-12
  • 詳解JVM系列之對(duì)象的鎖狀態(tài)和同步

    詳解JVM系列之對(duì)象的鎖狀態(tài)和同步

    鎖和同步是java多線程編程中非常常見的使用場(chǎng)景。為了鎖定多線程共享的對(duì)象,Java需要提供一定的機(jī)制來實(shí)現(xiàn)共享對(duì)象的鎖定。當(dāng)?shù)诙€(gè)線程進(jìn)入同一個(gè)區(qū)域的時(shí)候,必須等待第一個(gè)線程解鎖該對(duì)象。JVM是怎么做到的呢?快來一起看看吧。
    2021-06-06
  • 簡(jiǎn)單了解Spring中的事務(wù)控制

    簡(jiǎn)單了解Spring中的事務(wù)控制

    這篇文章主要介紹了簡(jiǎn)單了解Spring中的事務(wù)控制,事務(wù)是一組操作的執(zhí)行單元,下面我們來簡(jiǎn)單學(xué)習(xí)一下吧
    2019-05-05
  • Java如何獲取真實(shí)請(qǐng)求IP

    Java如何獲取真實(shí)請(qǐng)求IP

    這篇文章主要介紹了Java如何獲取真實(shí)請(qǐng)求IP問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 淺析Jmeter多用戶token使用問題

    淺析Jmeter多用戶token使用問題

    這篇文章主要介紹了Jmeter多用戶token使用問題,通過具體的例子給大家介紹了Jmeter多用戶token使用場(chǎng)景接口分析,需要的朋友可以參考下
    2021-10-10
  • SpringBoot中AOP的動(dòng)態(tài)匹配和靜態(tài)匹配詳解

    SpringBoot中AOP的動(dòng)態(tài)匹配和靜態(tài)匹配詳解

    這篇文章主要介紹了SpringBoot中AOP的動(dòng)態(tài)匹配和靜態(tài)匹配詳解,在創(chuàng)建代理的時(shí)候?qū)δ繕?biāo)類的每個(gè)連接點(diǎn)使用靜態(tài)切點(diǎn)檢查,如果僅通過靜態(tài)切點(diǎn)檢查就可以知道連接點(diǎn)是不匹配的,則在運(yùn)行時(shí)就不再進(jìn)行動(dòng)態(tài)檢查了,需要的朋友可以參考下
    2023-09-09
  • Java中BigDecimal的加減乘除、比較大小與使用注意事項(xiàng)

    Java中BigDecimal的加減乘除、比較大小與使用注意事項(xiàng)

    對(duì)于不需要任何準(zhǔn)確計(jì)算精度的數(shù)字可以直接使用float或double,但是如果需要精確計(jì)算的結(jié)果,則必須使用BigDecimal類,而且使用BigDecimal類也可以進(jìn)行大數(shù)的操作,下面這篇文章給大家介紹了Java中BigDecimal的加減乘除、比較大小與使用注意事項(xiàng),需要的朋友可以參考下。
    2017-11-11
  • java開發(fā)ExecutorService監(jiān)控實(shí)現(xiàn)示例詳解

    java開發(fā)ExecutorService監(jiān)控實(shí)現(xiàn)示例詳解

    這篇文章主要為大家介紹了java開發(fā)ExecutorService監(jiān)控實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • 解決IDEA報(bào)錯(cuò)Caused by: org.springframework.boot.web.server.WebServerException: Unable to start embedded

    解決IDEA報(bào)錯(cuò)Caused by: org.springframework.boot.web.se

    遇到IDEA啟動(dòng)報(bào)錯(cuò),可嘗試以下方法:打開項(xiàng)目設(shè)置(Ctrl+Shift+Alt+S),將JDK版本修改為1.8;或者檢查TomCat依賴,若有問題可嘗試刪除,此外,確保每次拉取項(xiàng)目后,maven地址設(shè)置為本地,并且JDK版本設(shè)置為1.8,以上為個(gè)人解決經(jīng)驗(yàn),希望對(duì)大家有所幫助
    2024-09-09
  • Java多線程的實(shí)現(xiàn)方式比較(兩種方式比較)

    Java多線程的實(shí)現(xiàn)方式比較(兩種方式比較)

    Java多線程實(shí)現(xiàn)方式有兩種,第一種是繼承Thread類,第二種是實(shí)現(xiàn)Runnable接口,兩種有很多差異,下面跟著本文一起學(xué)習(xí)吧
    2015-11-11

最新評(píng)論

金沙县| 漳州市| 东安县| 班玛县| 翁牛特旗| 桃源县| 南城县| 隆回县| 胶州市| 峨眉山市| 鄂州市| 乌拉特后旗| 西安市| 新平| 甘肃省| 县级市| 西贡区| 红原县| 武夷山市| 屏南县| 乃东县| 苗栗县| 宣城市| 黄大仙区| 阿尔山市| 广西| 团风县| 双江| 山丹县| 上栗县| 绥滨县| 辉南县| 资溪县| 长泰县| 平潭县| 饶平县| 南华县| 伊宁县| 名山县| 通州市| 尚志市|