1.Springboot 整合 druid
引入依賴:
- <dependency>
- <groupId>com.alibaba</groupId>
- <artifactId>druid-spring-boot-starter</artifactId>
- </dependency>
java config 配置:
- @Configuration
- @EnableConfigurationProperties(DruidPropertityConfig.class)
- public class DruidConfig {
-
- // 日誌
- private final Logger logger = LoggerFactory.getLogger(getClass());
-
- @Autowired
- private DruidPropertityConfig propertityConfig;
-
- /**
- * druid屬性配置 Springboot 預設使用org.apache.tomcat.jdbc.pool.DataSource資料來源,預設配置如下:
- * Springboot預設支援4種資料來源型別,定義在
- * org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
- * 中,分別是: org.apache.tomcat.jdbc.pool.DataSource
- * com.zaxxer.hikari.HikariDataSource org.apache.commons.dbcp.BasicDataSource
- * org.apache.commons.dbcp2.BasicDataSource 對於這4種資料來源,當 classpath
- * 下有相應的類存在時,Springboot 會透過自動配置為其生成DataSource Bean,DataSource
- * Bean預設只會生成一個,四種資料來源型別的生效先後順序如下:Tomcat--> Hikari --> Dbcp --> Dbcp2 。
- * @return
- */
- @Bean(name = "dataSource")
- @Primary
- public DataSource druidDataSource() {
-
- logger.info("dataSource propertityConfig:{}", propertityConfig);
-
- DruidDataSource dataSource = new DruidDataSource();
- dataSource.setUrl(propertityConfig.getUrl());
- dataSource.setUsername(propertityConfig.getUsername());
- dataSource.setPassword(propertityConfig.getPassword());
- dataSource.setDriverClassName(propertityConfig.getDriverClassName());
- // configuration
- dataSource.setInitialSize(propertityConfig.getInitialSize());
- dataSource.setMinIdle(propertityConfig.getMinIdle());
- dataSource.setMaxActive(propertityConfig.getMaxActive());
- dataSource.setMaxWait(propertityConfig.getMaxWait());
- dataSource.setTimeBetweenEvictionRunsMillis(propertityConfig.getTimeBetweenEvictionRunsMillis());
- dataSource.setMinEvictableIdleTimeMillis(propertityConfig.getMinEvictableIdleTimeMillis());
- dataSource.setTestWhileIdle(propertityConfig.isTestWhileIdle());
- dataSource.setTestOnBorrow(propertityConfig.isTestOnBorrow());
- dataSource.setTestOnReturn(propertityConfig.isTestOnReturn());
- dataSource.setPoolPreparedStatements(propertityConfig.isPoolPreparedStatements());
- dataSource.setMaxPoolPreparedStatementPerConnectionSize(
- propertityConfig.getMaxPoolPreparedStatementPerConnectionSize());
- dataSource.setValidationQuery(propertityConfig.getValidationQuery());
- return dataSource;
- }
-
- /**
- * 註冊一個druidStatViewServlet
- *
- * @return
- */
- @Bean
- public ServletRegistrationBean druidStatViewServlet() {
- ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(),
- "/druid/*");
- servletRegistrationBean.addInitParameter("allow", "*");
- servletRegistrationBean.addInitParameter("loginUsername", "admin");
- servletRegistrationBean.addInitParameter("loginPassword", "password");
- servletRegistrationBean.addInitParameter("resetEnable", "false");
- return servletRegistrationBean;
- }
-
- /**
- * 註冊一個druidStatFilter
- *
- * @return
- */
- @Bean
- public FilterRegistrationBean druidStatFilter() {
- FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
- filterRegistrationBean.addUrlPatterns("/*");
- filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
- return filterRegistrationBean;
- }
-
- }
配置屬性:
- @ConfigurationProperties(prefix = "jdbc.datasource")
- @Data
- public class DruidPropertityConfig {
-
- private String driverClassName;
- private String url;
- private String username;
- private String password;
- private int initialSize;
- private int minIdle;
- private int maxActive;
- private int maxWait;
- private int timeBetweenEvictionRunsMillis;
- private int minEvictableIdleTimeMillis;
- private boolean testWhileIdle;
- private boolean testOnBorrow;
- private boolean testOnReturn;
- private boolean poolPreparedStatements;
- private int maxPoolPreparedStatementPerConnectionSize;
- private String filters;
- private String validationQuery;
- }
application.yml
- jdbc:
- datasource:
- driverClassName: com.mysql.cj.jdbc.Driver
- url: jdbc:mysql:XXXX
- username: xxxx
- password: xxxx
- #初始連線數
- initialSize: 20
- #最小空閒連線數
- minIdle: 20
- 最大連線池數量
- maxActive: 100
- #獲取連結超時時間
- maxWait: 60000
- #每30秒執行一次空閒連接回收器
- timeBetweenEvictionRunsMillis: 30000
- #池中的連線空閒30分鐘後被回收
- minEvictableIdleTimeMillis: 1800000
- #此項配置為true即可,不影響效能,並且保證安全性。意義為:申請連線的時候檢測,如果空閒時間大於timeBetweenEvictionRunsMillis,執行validationQuery檢測連線是否有效
- testWhileIdle: true
- #獲取連結的時候,不校驗是否可用,開啟會有損效能
- testOnBorrow: false
- #歸還連結到連線池的時候校驗連結是否可用
- testOnReturn: false
- #開啟遊標快取(mysql不建議開啟)
- #poolPreparedStatements: true
- #maxPoolPreparedStatementPerConnectionSize: 100
- filters: stat,wall,slf4j
- #檢測資料庫連結是否有效,必須配置
- validationQuery: select 1
常用資料庫validationQuery檢查語句
資料庫 | validationQuery |
Oracle | select 1 from dual |
mysql | select 1 |
DB2 | select 1 from sysibm.sysdummy1 |
microsoft sql | select 1 |
hsqldb | select 1 from INFORMATION_SCHEMA.SYSTEM_USERS |
postgresql | select version() |
ingres | select 1 |
derby | select 1 |
H2 | select 1 |
基本配置引數說明:
本文章已修改原文用詞符合繁體字使用者習慣使其容易閱讀
版權宣告:此處為CSDN博主「haohao_ding」的原創文章,依據CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。
原文連結:https://blog.csdn.net/haohao_ding/article/details/101297148