Spring Boot系列(九) 使用Druid连接池
来源:互联网 发布:linux 2030端口 编辑:程序博客网 时间:2024/04/26 23:40
Druid是阿里巴巴的开源项目,根据其官网介绍,Druid是Java语言中最好的数据库连接池,它能够提供强大的监控和扩展功能。下面介绍在Spring Boot中使用其强大功能步骤(采用JavaConfig)(Spring Boot默认使用 org.apache.tomcat.jdbc.pool.DataSource作为数据库库连接池):
- 在IDE中添加Druid依赖
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.25</version></dependency>
’
2. 添加数据库连接池配置信息
参考DataSourceProperties类中的属性来配置数据库连接池信息:
# 数据库访问配置 :通常来说,只需要修改initialSize、minIdle、maxActive。# 如果用Oracle,则把poolPreparedStatements配置为true,mysql可以配置为false。分库分表较多的数据库,建议配置为false。## 主数据源,默认的,1.4中没有spring.datasource.type属性#spring.datasource.type=com.alibaba.druid.pool.DruidDataSourcespring.datasource.driver-class-name=com.mysql.jdbc.Driverspring.datasource.url=jdbc:mysql://192.168.1.88:3306/spring_cloud?useUnicode\=true&characterEncoding\=utf-8spring.datasource.username=rootspring.datasource.password=root# 下面为连接池的补充设置,应用到上面所有数据源中# 初始化大小,最小,最大spring.datasource.initialSize=5spring.datasource.minIdle=5spring.datasource.maxActive=20# 配置获取连接等待超时的时间spring.datasource.maxWait=60000# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 spring.datasource.timeBetweenEvictionRunsMillis=60000# 配置一个连接在池中最小生存的时间,单位是毫秒 spring.datasource.minEvictableIdleTimeMillis=300000#spring.datasource.validationQuery=SELECT 1 FROM DUALspring.datasource.validationQuery=SELECT 'x'spring.datasource.testWhileIdle=truespring.datasource.testOnBorrow=falsespring.datasource.testOnReturn=false# 打开PSCache,并且指定每个连接上PSCache的大小 spring.datasource.poolPreparedStatements=truespring.datasource.maxPoolPreparedStatementPerConnectionSize=20# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙(防止SQL注入) spring.datasource.filters=stat,wall,log4j# 通过connectProperties属性来打开mergeSql功能;慢SQL记录spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000# 合并多个DruidDataSource的监控数据#spring.datasource.useGlobalDataSourceStat=true
’
3. 创建DruidConfiguration配置类
由于在Spring Boot 1.4版本中,移除了spring.datasource.type属性,如果需要因为第三方数据源,需要手动添加DataSource,这样自动配置的DataSource就不会加载了。同时开启SQL监控和防御SQL注入攻击功能:
@Configuration@EnableConfigurationProperties(DataSourceProperties.class)public class DruidConfiguration{ @Bean @ConfigurationProperties("spring.datasource.*") public DruidDataSource dataSource(DataSourceProperties properties) { DruidDataSource dataSource = new DruidDataSource(); dataSource.setDriverClassName(properties.determineDriverClassName()); dataSource.setUrl(properties.determineUrl()); dataSource.setUsername(properties.determineUsername()); dataSource.setPassword(properties.determinePassword()); DatabaseDriver databaseDriver = DatabaseDriver .fromJdbcUrl(properties.determineUrl()); String validationQuery = databaseDriver.getValidationQuery(); if (validationQuery != null) { dataSource.setTestOnBorrow(true); dataSource.setValidationQuery(validationQuery); } try { //开启Druid的监控统计功能,mergeStat代替stat表示sql合并,wall表示防御SQL注入攻击 dataSource.setFilters("mergeStat,wall,log4j"); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return dataSource; }}
’
4. 展示监控界面
Druid内置提供了一个StatViewServlet用于展示Druid的统计信息。这个StatViewServlet的用途包括:
- 提供监控信息展示的html页面
- 提供监控信息的JSON API
注意:使用StatViewServlet,建议使用druid 0.2.6以上版本。
在DruidConfiguration类中添加StatViewServlet的注册:
/** * 注册一个Druid内置的StatViewServlet,用于展示Druid的统计信息。 * @return */ @Bean public ServletRegistrationBean DruidStatViewServlet(){ //org.springframework.boot.context.embedded.ServletRegistrationBean提供类的进行注册. ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(),"/druid/*"); //添加初始化参数:initParams //白名单 (没有配置或者为空,则允许所有访问) servletRegistrationBean.addInitParameter("allow","192.168.1.88,127.0.0.1"); //IP黑名单 (存在共同时,deny优先于allow) : 如果满足deny的话提示:Sorry, you are not permitted to view this page. servletRegistrationBean.addInitParameter("deny","192.168.1.80"); //登录查看信息的账号密码. servletRegistrationBean.addInitParameter("loginUsername","root"); servletRegistrationBean.addInitParameter("loginPassword","123456"); //是否能够重置数据(禁用HTML页面上的“Reset All”功能) servletRegistrationBean.addInitParameter("resetEnable","false"); return servletRegistrationBean;}
’
5. Web关联监控配置
WebStatFilter用于采集web-jdbc关联监控的数据。在DruidConfiguration中配置
/** * 注册一个:filterRegistrationBean,添加请求过滤规则 * @return */@Beanpublic FilterRegistrationBean druidStatFilter(){ FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter()); //添加过滤规则. filterRegistrationBean.addUrlPatterns("/*"); //添加不需要忽略的格式信息. filterRegistrationBean.addInitParameter( "exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid2/*"); return filterRegistrationBean;}
‘
6. Spring关联监控配置
Druid提供了Spring和Jdbc的关联监控。com.alibaba.druid.support.spring.stat.DruidStatInterceptor是一个标准的Spring MethodInterceptor。可以灵活进行AOP配置。在DruidConfiguration中配置:
/** * 监听Spring * 1.定义拦截器 * 2.定义切入点 * 3.定义通知类 * @return */@Beanpublic DruidStatInterceptor druidStatInterceptor(){ return new DruidStatInterceptor();}@Beanpublic JdkRegexpMethodPointcut druidStatPointcut(){ JdkRegexpMethodPointcut druidStatPointcut = new JdkRegexpMethodPointcut(); String patterns = "com.ft.*.*.service.*"; String patterns2 = "com.ft.*.*.mapper.*"; druidStatPointcut.setPatterns(patterns,patterns2); return druidStatPointcut;}@Beanpublic Advisor druidStatAdvisor() { return new DefaultPointcutAdvisor(druidStatPointcut(), druidStatInterceptor());}
’
7. Druid使用常见问题
详见:https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98
- Spring Boot系列(九) 使用Druid连接池
- Spring Boot下Druid连接池的使用配置分析
- Spring Boot下Druid连接池的使用配置分析
- spring boot 学习(四)Druid连接池的使用配置
- Spring Boot下Druid连接池的使用配置分析
- spring boot 学习(四)Druid连接池的使用配置
- spring boot 配置druid连接池
- Spring Boot配置druid连接池
- spring boot集成druid连接池
- Spring Boot (八):配置Druid 连接池
- spring boot(6) 使用数据库连接池druid
- Spring Boot [使用 Druid 数据库连接池]
- Spring Boot [使用 Druid 数据库连接池]
- 7. Spring Boot 使用Druid
- 使用spring boot搭建druid
- spring-boot 连接池 druid 的配置及监控
- Spring Boot整合Druid连接池开启数据库监控功能
- Spring-boot使用druid数据库连接池构建数据源
- Java面向对象_成员变量、局部变量、全局变量
- document.onreadystatechange事件的用法分析 判断页面加载后再执行脚本
- ABAP 内表
- java语言运算符
- 浙江大学PAT 编程初级
- Spring Boot系列(九) 使用Druid连接池
- C语言面试笔试常考 常识点
- 15. Yii 2.0 页面缓存
- poj 1486 Sorting Slides
- 文本比较算法--Needleman/Wunsch算法
- UVA 11019 AC自动机
- 【USACO题库】4.4.3 Frame Up重叠的图像
- 解决 django js 403 crsftoken
- magicskin无法在VS13上运行