知識(shí)
不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價(jià)值,我們?cè)谧非笃湟曈X(jué)表現(xiàn)的同時(shí),更側(cè)重于功能的便捷,營(yíng)銷(xiāo)的便利,運(yùn)營(yíng)的高效,讓網(wǎng)站成為營(yíng)銷(xiāo)工具,讓軟件能切實(shí)提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序?yàn)楹笃谏?jí)提供便捷的支持!
Springboot整合druid,日數(shù)據(jù)量超出500萬(wàn)頻繁操作數(shù)據(jù)時(shí)數(shù)據(jù)庫(kù)經(jīng)常斷開(kāi)連接的問(wèn)題
發(fā)表時(shí)間:2019-9-24
發(fā)布人:葵宇科技
瀏覽次數(shù):264
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 默認(rèn)使用org.apache.tomcat.jdbc.pool.DataSource數(shù)據(jù)源,默認(rèn)配置如下:
* Springboot默認(rèn)支持4種數(shù)據(jù)源類(lèi)型,定義在
* 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 對(duì)于這4種數(shù)據(jù)源,當(dāng) classpath
* 下有相應(yīng)的類(lèi)存在時(shí),Springboot 會(huì)通過(guò)自動(dòng)配置為其生成DataSource Bean,DataSource
* Bean默認(rèn)只會(huì)生成一個(gè),四種數(shù)據(jù)源類(lèi)型的生效先后順序如下: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;
}
/**
* 注冊(cè)一個(gè)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;
}
/**
* 注冊(cè)一個(gè)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
#初始連接數(shù)
initialSize: 20
#最小空閑連接數(shù)
minIdle: 20
最大連接池?cái)?shù)量
maxActive: 100
#獲取鏈接超時(shí)時(shí)間
maxWait: 60000
#每30秒運(yùn)行一次空閑連接回收器
timeBetweenEvictionRunsMillis: 30000
#池中的連接空閑30分鐘后被回收
minEvictableIdleTimeMillis: 1800000
#此項(xiàng)配置為true即可,不影響性能,并且保證安全性。意義為:申請(qǐng)連接的時(shí)候檢測(cè),如果空閑時(shí)間大于timeBetweenEvictionRunsMillis,執(zhí)行validationQuery檢測(cè)連接是否有效
testWhileIdle: true
#獲取鏈接的時(shí)候,不校驗(yàn)是否可用,開(kāi)啟會(huì)有損性能
testOnBorrow: false
#歸還鏈接到連接池的時(shí)候校驗(yàn)鏈接是否可用
testOnReturn: false
#開(kāi)啟游標(biāo)緩存(mysql不建議開(kāi)啟)
#poolPreparedStatements: true
#maxPoolPreparedStatementPerConnectionSize: 100
filters: stat,wall,slf4j
#檢測(cè)數(shù)據(jù)庫(kù)鏈接是否有效,必須配置
validationQuery: select 1
常用數(shù)據(jù)庫(kù)validationQuery檢查語(yǔ)句
數(shù)據(jù)庫(kù) 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基本配置參數(shù)說(shuō)明:
相關(guān)案例查看更多
相關(guān)閱讀
- 表單
- 云南網(wǎng)站建設(shè)報(bào)價(jià)
- 河南小程序制作
- 江蘇小程序開(kāi)發(fā)
- 軟件定制
- 云南小程序制作
- 云南手機(jī)網(wǎng)站建設(shè)
- 網(wǎng)站建設(shè)服務(wù)公司
- 報(bào)廢車(chē)回收
- 小程序生成海報(bào)
- 小程序定制開(kāi)發(fā)
- 搜索排名
- 商標(biāo)注冊(cè)
- 生成海報(bào)
- 小程序開(kāi)發(fā)課程
- 網(wǎng)站建設(shè)案例
- 小程序設(shè)計(jì)
- 云南旅游網(wǎng)站建設(shè)
- 網(wǎng)站建設(shè)選
- 云南小程序公司
- 智慧農(nóng)貿(mào)市場(chǎng)
- 手機(jī)網(wǎng)站建設(shè)
- 網(wǎng)站建設(shè)首選
- 保險(xiǎn)網(wǎng)站建設(shè)公司
- 汽車(chē)報(bào)廢回收管理軟件
- 網(wǎng)站制作哪家好
- 汽車(chē)拆解管理軟件
- 云南網(wǎng)站建設(shè)哪家強(qiáng)
- 汽車(chē)報(bào)廢
- 昆明網(wǎng)站開(kāi)發(fā)