溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何解決springboot配置druid數(shù)據(jù)源不生效的問題

發(fā)布時間:2021-09-26 10:05:38 來源:億速云 閱讀:2279 作者:柒染 欄目:開發(fā)技術(shù)

今天就跟大家聊聊有關(guān)如何解決springboot配置druid數(shù)據(jù)源不生效的問題,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

pom文件

如果你的springboot項目要用到druid,那么這三個依賴必不可少:

<dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.10</version>
        </dependency>
        <!--Druid-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.12</version>
        </dependency>
        <!--log4j-->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>

我踩到的第一個坑就踩到這了。當時我沒有引入druid-spring-boot-starter這個依賴,所以在測試的時候就出了問題,最后還是查找了資料才解決。下面踩的坑就更加離譜了。

踩坑經(jīng)歷與解決方案

起初,我的yml配置文件是這樣寫的:

spring:
  datasource:
    username: root
    password: bugeinikan
    url: jdbc:mysql://localhost:3306/2021summer?useUnicode=true&characterEncoding=utf-8
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      initialSize: 5
      minIdle: 5
      maxActive: 20
      maxWait: 60000
      timeBetweenEvictionRunsMillis: 60000
      minEvictableIdleTimeMillis: 300000
      validationQuery: SELECT 1 FROM DUAL
      testWhileIdle: true
      testOnBorrow: false
      testOnReturn: false
      poolPreparedStatements: true

這看起來毫無毛病,而且idea也并沒有報錯。
然后我們把數(shù)據(jù)源添加到容器中,DruidConfig類代碼如下:

@Configuration
public class DruidConfig {
    @ConfigurationProperties(prefix = "spring.datasource")
    @Bean
    public DataSource druidDataSource() {
        return new DruidDataSource();
    }
}

編寫測試類,測試程類代碼如下:

@SpringBootTest
class ApplicationTests {
    @Autowired
    DataSource dataSource;
    @Test
    void contextLoads() throws SQLException {
        System.out.println(dataSource.getClass());
        //獲得連接
        Connection connection =   dataSource.getConnection();
        System.out.println(connection);
        DruidDataSource druidDataSource = (DruidDataSource) dataSource;
        System.out.println("druidDataSource 數(shù)據(jù)源最大連接數(shù):" + druidDataSource.getMaxActive());
        System.out.println("druidDataSource 數(shù)據(jù)源初始化連接數(shù):" + druidDataSource.getInitialSize());
        //關(guān)閉連接
        connection.close();
    }
}

輸出結(jié)果:

class com.alibaba.druid.pool.DruidDataSource
2021-09-24 16:12:52.689 INFO 4408 — [ main] com.alibaba.druid.pool.DruidDataSource : {dataSource-1} inited
com.mysql.cj.jdbc.ConnectionImpl@7b96de8d
druidDataSource 數(shù)據(jù)源最大連接數(shù):8
druidDataSource 數(shù)據(jù)源初始化連接數(shù):0

程序看上去毫無問題,可是輸出的結(jié)果卻與自己設(shè)置的不同。我們再來打斷點具體看一下:

如何解決springboot配置druid數(shù)據(jù)源不生效的問題

可以看到,在yml文件中,對數(shù)據(jù)源的username、password、url和driverClass配置都是生效的。
再往下看:

如何解決springboot配置druid數(shù)據(jù)源不生效的問題

yml文件中,設(shè)置的maxActive和maxWait明明是20和60000,在這里顯示的卻是默認的屬性,這說明我們在yml文件中寫的spring.datasource.druid配置并沒有生效,抱著試一試的態(tài)度,我對yml文件進行了如下的修改:

spring:
  datasource:
    username: root
    password: bugeinikan
    url: jdbc:mysql://localhost:3306/2021summer?useUnicode=true&characterEncoding=utf-8
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
    initialSize: 5
    minIdle: 5
    maxActive: 20
    maxWait: 60000
    timeBetweenEvictionRunsMillis: 60000
    minEvictableIdleTimeMillis: 300000
    validationQuery: SELECT 1 FROM DUAL
    testWhileIdle: true
    testOnBorrow: false
    testOnReturn: false
    poolPreparedStatements: true

這時,idea就給我報出無法解析,如圖:

如何解決springboot配置druid數(shù)據(jù)源不生效的問題

不管它了,死馬也要當活馬醫(yī),我們啟動測試程序,運行結(jié)果:

class com.alibaba.druid.pool.DruidDataSource
2021-09-24 16:19:45.095 INFO 11428 — [ main] com.alibaba.druid.pool.DruidDataSource : {dataSource-1} inited
com.mysql.cj.jdbc.ConnectionImpl@67e25252
druidDataSource 數(shù)據(jù)源最大連接數(shù):20
druidDataSource 數(shù)據(jù)源初始化連接數(shù):5

這次輸出的居然和我們配置的一樣,在后面的斷點測試中,各項屬性也都和配置的一樣。
不得不說,這次真是被idea坑慘了,剛開始以為是注入失敗的問題,然后還查了很多資料。我的springboot版本是2.5.4,希望這個文章可以幫助那些和我一樣踩坑的人。

看完上述內(nèi)容,你們對如何解決springboot配置druid數(shù)據(jù)源不生效的問題有進一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI