数据库连接池

默认连接池

@Autowired
DataSource dataSource;
	
		System.out.println("数据源>>>>>>" + dataSource.getClass());
        Connection connection;
		try {
			connection = dataSource.getConnection();
			System.out.println("连接>>>>>>>>>" + connection);
			System.out.println("连接地址>>>>>" + connection.getMetaData().getURL());
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}


以前版本,如 Spring Boot 1.5 默认使用 org.apache.tomcat.jdbc.pool.DataSource 作为数据源;

HikariDataSource 号称 Java WEB 当前速度最快的数据源,相比于传统的 C3P0 、DBCP、Tomcat jdbc 等连接池更加优秀;


spring.datasource.type=com.zaxxer.hikari.HikariDataSource1
## 最小空闲连接数量
spring.datasource.hikari.minimum-idle=5
## 连接池最大连接数,默认是10  池中最大连接数,包括闲置和使用中的连接
spring.datasource.hikari.maximum-pool-size=15
spring.datasource.hikari.auto-commit=true
## 空闲连接存活最大时间,默认60000010分钟)
spring.datasource.hikari.idle-timeout=30000
## 连接池名称
spring.datasource.hikari.pool-name=22DatebookHikariCP
## 此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认180000030分钟
spring.datasource.hikari.max-lifetime=1800000
spring.datasource.hikari.connection-timeout=30000
spring.datasource.hikari.connection-test-query=SELECT 1

Druid

官方地址

https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter

https://mvnrepository.com/artifact/com.alibaba/druid-spring-boot-starter/1.1.17

加入依赖

		<!-- https://mvnrepository.com/artifact/com.alibaba/druid-spring-boot-starter -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.17</version>
</dependency>

配置

spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
# 初始化大小,最小,最大
spring.datasource.initial-size=5
spring.datasource.max-active=20
spring.datasource.min-idle=5
# 配置获取连接等待超时的时间
spring.datasource.max-wait=60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
spring.datasource.min-evictable-idle-time-millis=60000
spring.datasource.validation-query=SELECT 1
spring.datasource.validation-query-timeout=2000

web监控

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import org.springframework.boot.context.properties.ConfigurationProperties;
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.HashMap;
import java.util.Map;


@Configuration
public class DruidConfig {

    /**
     * 将自定义的 Druid 数据源添加到容器中,不再让 Spring Boot 自动创建
     * 这样做的目的是:绑定全局配置文件中的 druid 数据源属性到 com.alibaba.druid.pool.DruidDataSource
     * 从而让它们生效
     *
     * @return
     * @ConfigurationProperties(prefix = "spring.datasource"):作用就是将 全局配置文件中 前缀为 spring.datasource
     * 的属性值注入到 com.alibaba.druid.pool.DruidDataSource 的同名参数中
     */
    @ConfigurationProperties(prefix = "spring.datasource")
    @Bean
    public DataSource druidDataSource() {
        return new DruidDataSource();
    }

    /**
     * 配置 Druid 监控 之  管理后台的 Servlet
     * 内置 Servler 容器时没有web.xml 文件,所以使用 Spring Boot 的注册 Servlet 方式
     */
    @Bean
    public ServletRegistrationBean statViewServlet() {
        ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(),
                "/druid/*");

        /**
         * loginUsername:Druid 后台管理界面的登录账号
         * loginPassword:Druid 后台管理界面的登录密码
         * allow:Druid 后台允许谁可以访问
         *      initParams.put("allow", "localhost"):表示只有本机可以访问
         *      initParams.put("allow", ""):为空或者为null时,表示允许所有访问
         * deny:Druid 后台拒绝谁访问
         *      initParams.put("deny", "192.168.1.20");表示禁止此ip访问
         */
        Map<String, String> initParams = new HashMap<>();
        initParams.put("loginUsername", "admin");
        initParams.put("loginPassword", "123456");
        initParams.put("allow", "");

        /** 设置初始化参数*/
        bean.setInitParameters(initParams);
        return bean;
    }
}