spring boot 连接池

spring boot 连接池

本仙女最近在爬梯过程中发现,我没有配置连接池信息,但是Console却打印了连接池日志信息
spring boot 连接池_第1张图片

后经过翻阅资料得知,SpringBoot在2.0以后默认以连接池的方式连接数据库,因为官方默认Hikari,所以才会出现图中的内容。

Hikari和Druid连接池

Hikari 连接池

自称是快速、简单、可靠。并且是一个非常轻量化的JDBC 连接池。大约 130Kb,非常轻巧。如果你是使用SpringBoot 2.0+以上无需引入maven依赖,否则需要根据不同jdk版本加入依赖。

官网入口: https://github.com/brettwooldridge/HikariCP

Java 11+

<dependency>
   <groupId>com.zaxxergroupId>
   <artifactId>HikariCPartifactId>
   <version>5.0.1version>
dependency>

Java 8

<dependency>
   <groupId>com.zaxxergroupId>
   <artifactId>HikariCPartifactId>
   <version>4.0.3version>
dependency>

Java 7

<dependency>
   <groupId>com.zaxxergroupId>
   <artifactId>HikariCP-java7artifactId>
   <version>2.4.13version>
dependency>

Java 6

<dependency>
   <groupId>com.zaxxergroupId>
   <artifactId>HikariCP-java6artifactId>
   <version>2.3.13version>
dependency>

以下为application.properties中hikari配置示例,若不配置此信息,SpringBoot会取默认配置

# Hikari 将使用以上内容和以下内容来设置连接池
# 此处为设置连接池类型,不填则为Hikari
spring.datasource.type=com.zaxxer.hikari.HikariDataSource

#最大空闲连接数,默认值10,小于等于0会取默认值10;大于零小于1会被重置为最小连接数
spring.datasource.hikari.maximum-pool-size=12


#最小空闲连接数,默认值10,小于0或大于最大连接数,都会重置为最大连接数
spring.datasource.hikari.minimum-idle = 8

#自动提交从池中返回的连接,默认值为true
spring.datasource.hikari.auto-commit = true

#空闲连接超时时间,默认值600000(10分钟),大于等于连接 最大存活时间 且 连接最大存活 时间大于0,会被重置为0;不等于0且小于10秒,会被重置为10秒。
#只有空闲连接数大于最大连接数且空闲时间超过该值,才会被释放
spring.datasource.hikari.idle-timeout = 30000

#连接池名称,默认HikariPool-1
spring.datasource.hikari.pool-name = Hikari

#连接最大存活时间.单位ms,不等于0且小于30秒,会被重置为默认值30分钟。设置应该比mysql设置的超时时间短;
spring.datasource.hikari.max-lifetime = 55000

#连接超时时间,单位毫秒,小于250毫秒,会被重置为默认值30秒
spring.datasource.hikari.connection-timeout = 30000

#连接测试查询
spring.datasource.hikari.connection-test-query = SELECT 0

Durid 连接池

阿里巴巴产品,号称是Java语言中最好的数据库连接池。Druid能够提供强大的监控和扩展功能。

官方入口: https://github.com/alibaba/druid

Maven 依赖,建议查看maven仓库取最新版本

原生druid

<dependency>
     <groupId>com.alibabagroupId>
     <artifactId>druidartifactId>
     <version>1.2.11version>
dependency>

Spring Boot druid

<dependency>
   <groupId>com.alibabagroupId>
   <artifactId>druid-spring-boot-starterartifactId>
   <version>1.2.11version>
dependency>
SpringBoot 配置

因为我练手项目采用的是SpringBoot,所以此处展示SpringBoot Druid的配置

JDBC 配置
##数据库连接地址
spring.datasource.druid.url= # 或spring.datasource.url= 
##数据库用户名
spring.datasource.druid.username= # 或spring.datasource.username=
##数据库连接密码
spring.datasource.druid.password= # 或spring.datasource.password=
##数据库连接驱动
spring.datasource.druid.driver-class-name= #或 spring.datasource.driver-class-name=

连接池配置
# 此处为设置连接池类型
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#连接池初始化大小
spring.datasource.druid.initial-size= 10
#最大线程数
spring.datasource.druid.max-active= 15
#最少保留线程数
spring.datasource.druid.min-idle= 5
#配置获取连接等待超时的时间
spring.datasource.druid.max-wait= 30000
#是否缓存preparedStatement,也就是PSCache  官方建议MySQL下建议关闭
spring.datasource.druid.pool-prepared-statements= false
#每个连接最大缓存preparedStatement的条数
spring.datasource.druid.max-pool-prepared-statement-per-connection-size= 10
#和上面的等价
spring.datasource.druid.max-open-prepared-statements= 10
#连接测试查询
spring.datasource.druid.validation-query=select 0
#连接测试查询超时时间 单位毫秒
spring.datasource.druid.validation-query-timeout= 30000

spring.datasource.druid.test-on-borrow= false
spring.datasource.druid.test-on-return= false
spring.datasource.druid.test-while-idle= true
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
spring.datasource.druid.time-between-eviction-runs-millis=60000
#配置一个连接在池中最小生存的时间,单位是毫秒
spring.datasource.druid.min-evictable-idle-time-millis=30000
#配置一个连接在池中最大生存的时间,单位是毫秒
spring.datasource.druid.max-evictable-idle-time-millis= 100000
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
spring.datasource.druid.filters= stat,wall
....//more

目前为以下 Filter 提供了配置支持,请参考文档或者根据IDE提示(spring.datasource.druid.filter.*)进行配置。

  • List item
  • StatFilter
  • WallFilter
  • ConfigFilter
  • EncodingConvertFilter
  • Slf4jLogFilter
  • Log4jFilter
  • Log4j2Filter
  • CommonsLogFilter
监控配置
# WebStatFilter配置,说明请参考Druid Wiki,配置_配置WebStatFilter
#是否启用StatFilter默认值false
spring.datasource.druid.web-stat-filter.enabled =  true

#StatFilter过滤路由匹配
spring.datasource.druid.web-stat-filter.url-pattern= /*

#StatFilter排除过滤路由匹配
spring.datasource.druid.web-stat-filter.exclusions= /error/*

#是否开启session统计功能
spring.datasource.druid.web-stat-filter.session-stat-enable= true

# 最大session数
spring.datasource.druid.web-stat-filter.session-stat-max-count=10000

# 根据需要,这个参数的值是 user 信息保存在 session 中的 sessionName
spring.datasource.druid.web-stat-filter.principal-session-name= user

# 根据需要,这个参数的值是 user 信息保存在 cookie 中的 cookieName
spring.datasource.druid.web-stat-filter.principal-cookie-name= user

# 开启 profile 后就能够监控单个 URL 地址调用列表
spring.datasource.druid.web-stat-filter.profile-enable= true

# StatViewServlet配置,说明请参考Druid Wiki,配置_StatViewServlet配置
spring.datasource.druid.stat-view-servlet.enabled= true

#是否启用StatViewServlet(监控页面)默认值为false(考虑到安全问题默认并未启动,如需启用建议设置密码或白名单以保障安全)
spring.datasource.druid.stat-view-servlet.url-pattern= false

# 是否开启 Reset All 功能
spring.datasource.druid.stat-view-servlet.reset-enable= true

#设置监控台登录用户名
spring.datasource.druid.stat-view-servlet.login-username= admin

#设置监控台登录密码
spring.datasource.druid.stat-view-servlet.login-password= 123
# 监控台访问白名单(如果allow没有配置或者为空,则允许所有访问)
spring.datasource.druid.stat-view-servlet.allow=

# 监控台访问黑名单(deny 优先于 allow,如果在 deny 列表中,就算在 allow 列表中,也会被拒绝)
spring.datasource.druid.stat-view-servlet.deny= 127.0.0.1

# Spring监控配置,说明请参考Druid Github Wiki,配置_Druid和Spring关联监控配置
# Spring监控AOP切入点,如x.y.z.service.*,配置多个英文逗号分隔
spring.datasource.druid.aop-patterns=com.mia.account.service.*

怎样使用Druid的内置监控页面

Durid 最大的特点是提供监控,如果你的项目需要监控连接池信息,durid是你最好的选择。
配置web.xml
StatViewServlet是一个标准的javax.servlet.http.HttpServlet,需要配置在你web应用中的WEB-INF/web.xml中。

<servlet>
      <servlet-name>DruidStatViewservlet-name>
      <servlet-class>com.alibaba.druid.support.http.StatViewServletservlet-class>
  servlet>
  <servlet-mapping>
      <servlet-name>DruidStatViewservlet-name>
      <url-pattern>/druid/*url-pattern>
  servlet-mapping>

根据配置中的url-pattern来访问内置监控页面,如果是上面的配置,内置监控页面的首页是/druid/index.html

例如:
http://127.0.0.1:8083/druid/index.html
http://127.0.0.1:8083/mini-web/druid/index.html

获取监控数据

调用此接口,可以获取监控台返回的json数据

@RestController
public class DruidStatController {
    @GetMapping("/druid/stat")
    public Object druidStat(){
        // DruidStatManagerFacade#getDataSourceStatDataList 该方法可以获取所有数据源的监控数据,除此之外 DruidStatManagerFacade 还提供了一些其他方法,你可以按需选择使用。
        return DruidStatManagerFacade.getInstance().getDataSourceStatDataList();
    }
}

你可能感兴趣的:(spring,boot,java)