欧美三级国产三级日韩三级_亚洲熟妇丰满大屁股熟妇_欧美亚洲成人一区二区三区_国产精品久久久久久模特

Springboot整合druid,日數(shù)據(jù)量超出500萬(wàn)頻繁操作數(shù)據(jù)時(shí)數(shù)據(jù)庫(kù)經(jīng)常斷開(kāi)連接的問(wèn)題 - 新聞資訊 - 云南小程序開(kāi)發(fā)|云南軟件開(kāi)發(fā)|云南網(wǎng)站建設(shè)-昆明葵宇信息科技有限公司

159-8711-8523

云南網(wǎng)建設(shè)/小程序開(kāi)發(fā)/軟件開(kāi)發(fā)

知識(shí)

不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價(jià)值,我們?cè)谧非笃湟曈X(jué)表現(xiàn)的同時(shí),更側(cè)重于功能的便捷,營(yíng)銷的便利,運(yùn)營(yíng)的高效,讓網(wǎng)站成為營(yíng)銷工具,讓軟件能切實(shí)提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序?yàn)楹笃谏?jí)提供便捷的支持!

您當(dāng)前位置>首頁(yè) » 新聞資訊 » 技術(shù)分享 >

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ù)源類型,定義在
	 * 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)的類存在時(shí),Springboot 會(huì)通過(guò)自動(dòng)配置為其生成DataSource Bean,DataSource
	 * Bean默認(rèn)只會(huì)生成一個(gè),四種數(shù)據(jù)源類型的生效先后順序如下: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)案例查看更多