mybatis使用spring-druid数据源连接池配置log4j打印sql语句以及开启监控平台
来源:SegmentFault
2023-01-17 20:10:08
0浏览
收藏
大家好,今天本人给大家带来文章《mybatis使用spring-druid数据源连接池配置log4j打印sql语句以及开启监控平台》,文中内容主要涉及到MySQL、Java、mybatis、druid-spring-事务-连接池、log4j,如果你对数据库方面的知识点感兴趣,那就请各位朋友继续看下去吧~希望能真正帮到你们,谢谢!
杂七杂的杂
作为程序员,开发工程中,一套利于测试或者监控的工具很重要,mybatis默认没有提供log4j的打印sql语句的配置。
这对于开发rest服务,提供接口的开发者而言,是在很不好做,再加上mybatis很灵活,使用脚本动态生成sql语句,因此,有时候真不知道运行的sql是不是我们所期望的,过滤的条件是否起作用。
所幸,德鲁伊监控平台是个不错的选择,在性能方面druid连接池也比spring原生的要好,因此也是很多企业开发的首选数据源配置。
在引言阶段,我们先看看目前我配置的结果是否是你想要的,如果不是你所期望的,就别浪费时间往下面看,毕竟大家都时间有限,没必要花费时间看一些对自己没用的东西。
控制台打印的日志,慎重的告诉你,这种大量打印信息不能用于生产坏境,生产环境中这些信息写到tomcat的日志文件中了
druid连接池配置属性列表详解 <h2>web.xml配置</h2> <p><code><?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:META-INF/spring/*.xml</param-value></context-param><!-- 初始化参数,引入log4j配置--><context-param><param-name>log4jConfigLocation</param-name><param-value>WEB-INF/classes/log4j.xml</param-value></context-param><context-param><param-name>log4jRefreshInterval</param-name><param-value>60000</param-value></context-param><!-- 开启德鲁伊stat过滤,WebStatFilter用于采集web-jdbc关联监控的数据,注意放在其它的过滤器以及dispatcher前面,很重哦 --><filter><filter-name>DruidWebStatFilter</filter-name><filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class><init-param><param-name>exclusions</param-name><param-value>/static/*,*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*</param-value></init-param><!-- 下面的所有的init-param可以不用配置,使用默认值即可,如果你有处女座情结,删除即可 --><!-- 缺省sessionStatMaxCount是1000个。你可以按需要进行配置 --><init-param><param-name>sessionStatMaxCount</param-name><param-value>1000</param-value></init-param><!-- druid 0.2.7版本开始支持profile,配置profileEnable能够监控单个url调用的sql列表 --><init-param><param-name>profileEnable</param-name><param-value>true</param-value></init-param><!-- <init-param> <param-name>principalSessionName</param-name> <param-value>users.username</param-value> </init-param> --><!-- 你可以关闭session统计功能 --><!-- <init-param> <param-name>sessionStatEnable</param-name> <param-value>true</param-value> </init-param> --></filter><filter-mapping><filter-name>DruidWebStatFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!--this listener must be defined before the spring listener--><listener><listener-class>com.alibaba.dubbo.remoting.http.servlet.BootstrapListener</listener-class></listener><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!-- log4j监听器 --><listener><listener-class>org.springframework.web.util.Log4jConfigListener</listener-class></listener><servlet><servlet-name>dispatcher</servlet-name><servlet-class>com.alibaba.dubbo.remoting.http.servlet.DispatcherServlet</servlet-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>dispatcher</servlet-name><url-pattern>/*</url-pattern></servlet-mapping><!-- 德鲁伊监控平台监控器 --><servlet><servlet-name>DruidStatView</servlet-name><servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class><init-param><!-- 允许清空统计数据 --><param-name>resetEnable</param-name><param-value>true</param-value></init-param><init-param><!-- 用户名 --><param-name>loginUsername</param-name><param-value>druid</param-value></init-param><init-param><!-- 密码 --><param-name>loginPassword</param-name><param-value>druid</param-value></init-param></servlet><servlet-mapping><servlet-name>DruidStatView</servlet-name><url-pattern>/druid/*</url-pattern></servlet-mapping></web-app></code></p>
上面加了注解的配置,是本文配置的重点,其它配置不在这里讲解。
配置 <th align="left">缺省值</th> <th align="left">说明</th> <tbody><tr><td align="left">name</td> <td align="left"> </td> <td align="left">配置这个属性的意义在于,如果存在多个数据源,监控的时候可以通过名字来区分开来。如果没有配置,将会生成一个名字,格式是:”DataSource-” + System.identityHashCode(this)</td> </tr><tr><td align="left">jdbcUrl</td> <td align="left"> </td> <td align="left">连接数据库的url,不同数据库不一样。例如:mysql : jdbc:mysql://10.20.153.104:3306/druid2;oracle : jdbc:oracle:thin:@10.20.149.85:1521:ocnauto</td> </tr><tr><td align="left">username</td> <td align="left"> </td> <td align="left">连接数据库的用户名</td> </tr><tr><td align="left">password</td> <td align="left"> </td> <td align="left">连接数据库的密码。如果你不希望密码直接写在配置文件中,可以使用ConfigFilter。详细看这里:<a target='_blank' href='https://www.17golang.com/gourl/?redirect=MDAwMDAwMDAwML57hpSHp6VpkrqbYLx2eayza4KafaOkbLS3zqSBrJvPsa5_0Ia6sWuR4Juaq6t9nq5roGCUgXuytMyero5ko5XFfIfNhNCyr5q5aZjEeZydvpCCmHxri7HJutKjgGWb1cVmnNqCuLlpgrt6dayHenuvjo1jeo2kaK-4q2yFZHDavqGd0orQ0KycrYapq6t9nq6yhpuKjYpssqe4pIOGidCxnnaXkdCxsoe6l2WxeYWus2uFqn1rjmm-3cCig4N0og' rel='nofollow'>https://github.com/alibaba/dr...</a> </td> </tr><tr><td align="left">driverClassName</td> <td align="left">根据url自动识别</td> <td align="left">这一项可配可不配,如果不配置druid会根据url自动识别dbType,然后选择相应的driverClassName</td> </tr><tr><td align="left">initialSize</td> <td align="left">0</td> <td align="left">初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时</td> </tr><tr><td align="left">maxActive</td> <td align="left">8</td> <td align="left">最大连接池数量</td> </tr><tr><td align="left">maxIdle</td> <td align="left">8</td> <td align="left">已经不再使用,配置了也没效果</td> </tr><tr><td align="left">minIdle</td> <td align="left"> </td> <td align="left">最小连接池数量</td> </tr><tr><td align="left">maxWait</td> <td align="left"> </td> <td align="left">获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。</td> </tr><tr><td align="left">poolPreparedStatements</td> <td align="left">false</td> <td align="left">是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql5.5以下的版本中没有PSCache功能,建议关闭掉。5.5及以上版本有PSCache,建议开启。</td> </tr><tr><td align="left">maxOpenPreparedStatements</td> <td align="left">-1</td> <td align="left">要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。在Druid中,不会存在Oracle下PSCache占用内存过多的问题,可以把这个数值配置大一些,比如说100</td> </tr><tr><td align="left">validationQuery</td> <td align="left"> </td> <td align="left">用来检测连接是否有效的sql,要求是一个查询语句。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会其作用。</td> </tr><tr><td align="left">testOnBorrow</td> <td align="left">true</td> <td align="left">申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。</td> </tr><tr><td align="left">testOnReturn</td> <td align="left">false</td> <td align="left">归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能</td> </tr><tr><td align="left">testWhileIdle</td> <td align="left">false</td> <td align="left">建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。timeBetweenEvictionRunsMillis有两个含义:1) Destroy线程会检测连接的间隔时间 2) testWhileIdle的判断依据,详细看testWhileIdle属性的说明</td> </tr><tr><td align="left">numTestsPerEvictionRun</td> <td align="left"> </td> <td align="left">不再使用,一个DruidDataSource只支持一个EvictionRun</td> </tr><tr><td align="left">minEvictableIdleTimeMillis</td> <td align="left"> </td> </tr><tr><td align="left">connectionInitSqls</td> <td align="left"> </td> <td align="left">物理连接初始化的时候执行的sql</td> </tr><tr><td align="left">exceptionSorter</td> <td align="left">根据dbType自动识别</td> <td align="left">当数据库抛出一些不可恢复的异常时,抛弃连接</td> </tr><tr><td align="left">filters</td> <td align="left"> </td> <td align="left">属性类型是字符串,通过别名的方式配置扩展插件,常用的插件有:监控统计用的filter:stat; 日志用的filter:log4j;防御sql注入的filter:wall;合并sql的filter:mergeStat</td> </tr><tr><td align="left">proxyFilters</td> <td align="left"> </td> <td align="left">类型是List<com.alibaba.druid.filter.filter>,如果同时配置了filters和proxyFilters,是组合关系,并非替换关系</com.alibaba.druid.filter.filter></td> </tr></tbody><h2>补充说明</h2> <p>前面说过,mybatis配置的时候,可以配置sqlSessionFactory的时候通过configLocation属性可以指定mybatis的一些额外配置。</p> <p>这里分享一段数据库字段值为null时,不返回字段名,而我们希望的是不管值为什么,字段名都应该返回。配置如下:</p> <p><code><?xml version="1.0" encoding="UTF-8"?><configuration><settings><setting name="callSettersOnNulls" value="true"></setting><setting name="logImpl" value="LOG4J"></setting></settings></configuration></code></p>
今天带大家了解了MySQL、Java、mybatis、druid-spring-事务-连接池、log4j的相关知识,希望对你有所帮助;关于数据库的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~
版本声明
本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除

- 上一篇
- MySQL避免索引列使用 OR 条件

- 下一篇
- mac和linux下mysql字符集设置问题
评论列表
-
- 超帅的战斗机
- 很有用,一直没懂这个问题,但其实工作中常常有遇到...不过今天到这,帮助很大,总算是懂了,感谢作者分享博文!
- 2023-05-21 11:51:06
-
- 心灵美的季节
- 太详细了,已加入收藏夹了,感谢大佬的这篇技术文章,我会继续支持!
- 2023-03-25 08:45:51
-
- 欣慰的鱼
- 写的不错,一直没懂这个问题,但其实工作中常常有遇到...不过今天到这,看完之后很有帮助,总算是懂了,感谢师傅分享技术贴!
- 2023-03-25 03:13:06
-
- 冷傲的心情
- 这篇技术文章出现的刚刚好,细节满满,很棒,码起来,关注老哥了!希望老哥能多写数据库相关的文章。
- 2023-03-21 10:35:16
-
- 文艺的西装
- 这篇文章内容太及时了,up主加油!
- 2023-03-18 02:31:20
-
- 优美的小猫咪
- 这篇文章真是及时雨啊,太全面了,写的不错,已加入收藏夹了,关注作者大大了!希望作者大大能多写数据库相关的文章。
- 2023-02-26 06:31:31
查看更多
最新文章
-
- 数据库 · MySQL | 8小时前 |
- 如何检测电脑是否安装MySQL的5种方法
- 278浏览 收藏
-
- 数据库 · MySQL | 9小时前 |
- MySQL分区表查询优化技巧
- 126浏览 收藏
-
- 数据库 · MySQL | 11小时前 |
- MySQL建库语句与字符集设置教程
- 414浏览 收藏
-
- 数据库 · MySQL | 1天前 |
- MySQL中AS别名用法详解
- 320浏览 收藏
-
- 数据库 · MySQL | 1天前 |
- MySQL创建带主键的表实例
- 247浏览 收藏
-
- 数据库 · MySQL | 2天前 |
- 主外键关系怎么建立?
- 149浏览 收藏
-
- 数据库 · MySQL | 2天前 |
- MySQL中IF函数使用详解
- 392浏览 收藏
-
- 数据库 · MySQL | 3天前 |
- MySQL中IF函数使用详解
- 268浏览 收藏
-
- 数据库 · MySQL | 3天前 |
- MySQL入门:核心概念与操作全解析
- 162浏览 收藏
-
- 数据库 · MySQL | 3天前 |
- MySQL事务是什么?如何保证数据一致性?
- 349浏览 收藏
-
- 数据库 · MySQL | 4天前 |
- MySQL数据分片实现方法及常见方案解析
- 363浏览 收藏
-
- 数据库 · MySQL | 4天前 |
- MySQL基础:增删改查全教程
- 345浏览 收藏
查看更多
课程推荐
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 514次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 499次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 484次学习
查看更多
AI推荐
-
- AI Mermaid流程图
- SEO AI Mermaid 流程图工具:基于 Mermaid 语法,AI 辅助,自然语言生成流程图,提升可视化创作效率,适用于开发者、产品经理、教育工作者。
- 640次使用
-
- 搜获客【笔记生成器】
- 搜获客笔记生成器,国内首个聚焦小红书医美垂类的AI文案工具。1500万爆款文案库,行业专属算法,助您高效创作合规、引流的医美笔记,提升运营效率,引爆小红书流量!
- 650次使用
-
- iTerms
- iTerms是一款专业的一站式法律AI工作台,提供AI合同审查、AI合同起草及AI法律问答服务。通过智能问答、深度思考与联网检索,助您高效检索法律法规与司法判例,告别传统模板,实现合同一键起草与在线编辑,大幅提升法律事务处理效率。
- 671次使用
-
- TokenPony
- TokenPony是讯盟科技旗下的AI大模型聚合API平台。通过统一接口接入DeepSeek、Kimi、Qwen等主流模型,支持1024K超长上下文,实现零配置、免部署、极速响应与高性价比的AI应用开发,助力专业用户轻松构建智能服务。
- 736次使用
-
- 迅捷AIPPT
- 迅捷AIPPT是一款高效AI智能PPT生成软件,一键智能生成精美演示文稿。内置海量专业模板、多样风格,支持自定义大纲,助您轻松制作高质量PPT,大幅节省时间。
- 628次使用
查看更多
相关文章
-
- golang MySQL实现对数据库表存储获取操作示例
- 2022-12-22 499浏览
-
- 搞一个自娱自乐的博客(二) 架构搭建
- 2023-02-16 244浏览
-
- B-Tree、B+Tree以及B-link Tree
- 2023-01-19 235浏览
-
- mysql面试题
- 2023-01-17 157浏览
-
- MySQL数据表简单查询
- 2023-01-10 101浏览