原文轉載至:https://blog.csdn.net/qq_29941401/article/details/79605388
但是我一直沒有搞懂druid是怎么自動配置的?
這個是properties文件的配置,配置數據庫數據源使用druid。
spring.datasource.password=123456 spring.datasource.username=yuanqiao spring.datasource.url=jdbc:oracle:thin:@localhost:1521:orcl spring.datasource.driver-class-name= oracle.jdbc.driver.OracleDriver spring.datasource.type=com.alibaba.druid.pool.DruidDataSource #spring.datasource.schema=oracle # 連接池的配置信息 # 初始化大小,最小,最大 spring.datasource.initialSize=5 spring.datasource.minIdle=5 spring.datasource.maxActive=20 # 配置獲取連接等待超時的時間 spring.datasource.maxWait=60000 # 配置間隔多久才進行一次檢測,檢測需要關閉的空閑連接,單位是毫秒 spring.datasource.timeBetweenEvictionRunsMillis=60000 # 配置一個連接在池中最小生存的時間,單位是毫秒 spring.datasource.minEvictableIdleTimeMillis=300000 spring.datasource.validationQuery=SELECT 1 FROM DUAL spring.datasource.testWhileIdle=true spring.datasource.testOnBorrow=false spring.datasource.testOnReturn=false # 打開PSCache,並且指定每個連接上PSCache的大小 spring.datasource.poolPreparedStatements=true spring.datasource.maxPoolPreparedStatementPerConnectionSize=20 # 配置監控統計攔截的filters,去掉后監控界面sql無法統計,'wall'用於防火牆 spring.datasource.filters=stat,wall,log4j # 通過connectProperties屬性來打開mergeSql功能;慢SQL記錄 spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
其實根本不用下面這個配置類,Springboot就能自動實例DataSource了,但是實例出來的DataSource會缺少很多DruidDataSource的屬性。
package com.yuanqiao.configuration; import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.support.http.StatViewServlet; import com.alibaba.druid.support.http.WebStatFilter; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.boot.web.servlet.ServletRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import javax.sql.DataSource; import java.util.Arrays; import java.util.HashMap; import java.util.Map; @Configuration public class DruidConfiguration { @ConfigurationProperties(prefix = "spring.datasource") @Bean public DataSource druid(){ return new DruidDataSource(); } //配置druid的監控 //配置一個后台管理的Servlet @Bean public ServletRegistrationBean StatViewServlet(){ ServletRegistrationBean bean=new ServletRegistrationBean(new StatViewServlet(),"/druid/*"); Map<String,String> initParams=new HashMap<>(); initParams.put("loginUsername","admin"); initParams.put("loginPassword","123456"); initParams.put("allow","");//默認就是允許所有 initParams.put("deny","192.168.1.4"); bean.setInitParameters(initParams); return bean; } //配置一個監控的Filter @Bean public FilterRegistrationBean webStatFilter(){ FilterRegistrationBean bean =new FilterRegistrationBean(); bean.setFilter(new WebStatFilter()); Map<String,String> initParams=new HashMap<>(); initParams.put("exclusions","*.js,*.css,/druid/*"); bean.setUrlPatterns(Arrays.asList("/*")); bean.setInitParameters(initParams); return bean; } }
那個spring的IOC容易不就自動注入了兩個DataSource實例嗎?還是說,我們自己配置了DataSource之后,就以我們配置的為主呢?