您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關(guān)如何解決springboot配置druid數(shù)據(jù)源不生效的問題,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
如果你的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這個依賴,所以在測試的時候就出了問題,最后還是查找了資料才解決。下面踩的坑就更加離譜了。
起初,我的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è)置的不同。我們再來打斷點具體看一下:
可以看到,在yml文件中,對數(shù)據(jù)源的username、password、url和driverClass配置都是生效的。
再往下看:
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就給我報出無法解析,如圖:
不管它了,死馬也要當活馬醫(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è)資訊頻道,感謝大家的支持。
免責聲明:本站發(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)容。