当前位置:   article > 正文

mybatis使用spring-druid数据源连接池配置log4j打印sql语句以及开启监控平台

druid 启动打印连接的数据库

杂七杂的杂

作为程序员,开发工程中,一套利于测试或者监控的工具很重要,mybatis默认没有提供log4j的打印sql语句的配置。

这对于开发rest服务,提供接口的开发者而言,是在很不好做,再加上mybatis很灵活,使用脚本动态生成sql语句,因此,有时候真不知道运行的sql是不是我们所期望的,过滤的条件是否起作用。

所幸,德鲁伊监控平台是个不错的选择,在性能方面druid连接池也比spring原生的要好,因此也是很多企业开发的首选数据源配置。

在引言阶段,我们先看看目前我配置的结果是否是你想要的,如果不是你所期望的,就别浪费时间往下面看,毕竟大家都时间有限,没必要花费时间看一些对自己没用的东西。

  • 控制台打印的日志,慎重的告诉你,这种大量打印信息不能用于生产坏境,生产环境中这些信息写到tomcat的日志文件中了{tomcat的目录}/logs/catalina.out,如果访问量很大的时候,一天产生几个GB的日志不是问题--慎用。

  1. [03/06/16 11:56:03:003 CST] http-nio-8080-exec-2 DEBUG sql.Connection: {conn-10001} pool-connect
  2. [03/06/16 11:56:03:003 CST] http-nio-8080-exec-2 DEBUG sql.Statement: {conn-10001, pstmt-20025} created.
  3. select * from t_login_register_st WHERE 1 = 1 and ltime >= ? order by ltime desc limit ?, ?
  4. [03/06/16 11:56:03:003 CST] http-nio-8080-exec-2 DEBUG sql.Statement: {conn-10001, pstmt-20025} Parameters : [1463414400, 0, 15]
  5. [03/06/16 11:56:03:003 CST] http-nio-8080-exec-2 DEBUG sql.Statement: {conn-10001, pstmt-20025} Types : [BIGINT, INTEGER, INTEGER]
  6. [03/06/16 11:56:03:003 CST] http-nio-8080-exec-2 DEBUG sql.Statement: {conn-10001, pstmt-20025} executed. 6.503031 millis.
  7. select * from t_login_register_st WHERE 1 = 1 and ltime >= ? order by ltime desc limit ?, ?
  8. [03/06/16 11:56:03:003 CST] http-nio-8080-exec-2 DEBUG sql.ResultSet: {conn-10001, pstmt-20025, rs-50025} open
  9. [03/06/16 11:56:03:003 CST] http-nio-8080-exec-2 DEBUG sql.ResultSet: {conn-10001, pstmt-20025, rs-50025} Header: [ltime, login_register, register, register_sent_code, register_edit, register_edit_publish, register_edit_succ, login, foget_passwd, foget_passwd_sent_code, login_succ, login_fail, login_succ_normal, login_succ_qq, login_succ_wx, login_succ_wb, login_succ_foget_passwd, login_fail_normal, login_fail_qq, login_fail_wx, login_fail_wb, login_fail_foget_passwd]
  10. [03/06/16 11:56:03:003 CST] http-nio-8080-exec-2 DEBUG sql.ResultSet: {conn-10001, pstmt-20025, rs-50025} Result: [1464624000, 604, 216, 117, 113, 109, 106, 931, 59, 9, 790, 150, 279, 148, 254, 93, 32, 117, 9, 26, 2, 2]
  11. [03/06/16 11:56:03:003 CST] http-nio-8080-exec-2 DEBUG sql.ResultSet: {conn-10001, pstmt-20025, rs-50025} Result: [1464537600, 639, 241, 132, 125, 121, 114, 998, 40, 11, 844, 130, 312, 168, 268, 87, 24, 107, 5, 18, 2, 2]
  12. [03/06/16 11:56:03:003 CST] http-nio-8080-exec-2 DEBUG sql.ResultSet: {conn-10001, pstmt-20025, rs-50025} Result: [1464451200, 674, 322, 175, 170, 160, 155, 1087, 46, 11, 923, 143, 310, 164, 339, 96, 26, 114, 6, 25, 3, 1]
  13. [03/06/16 11:56:03:003 CST] http-nio-8080-exec-2 DEBUG sql.ResultSet: {conn-10001, pstmt-20025, rs-50025} Result: [1464364800, 794, 371, 187, 182, 168, 162, 1330, 73, 17, 1153, 178, 307, 257, 455, 120, 34, 137, 11, 25, 6, 3]
  14. [03/06/16 11:56:03:003 CST] http-nio-8080-exec-2 DEBUG sql.ResultSet: {conn-10001, pstmt-20025, rs-50025} Result: [1464278400, 670, 295, 169, 162, 154, 118, 1197, 88, 12, 977, 229, 338, 185, 320, 120, 33, 135, 33, 54, 25, 1]
  15. [03/06/16 11:56:03:003 CST] http-nio-8080-exec-2 DEBUG sql.ResultSet: {conn-10001, pstmt-20025, rs-50025} Result: [1464192000, 709, 308, 172, 163, 159, 120, 1214, 56, 8, 1065, 292, 383, 196, 349, 122, 30, 148, 54, 78, 30, 1]
  16. [03/06/16 11:56:03:003 CST] http-nio-8080-exec-2 DEBUG sql.ResultSet: {conn-10001, pstmt-20025, rs-50025} Result: [1464105600, 666, 285, 153, 148, 141, 139, 1120, 75, 14, 970, 159, 328, 188, 294, 141, 38, 132, 11, 14, 3, 0]
  17. [03/06/16 11:56:03:003 CST] http-nio-8080-exec-2 DEBUG sql.ResultSet: {conn-10001, pstmt-20025, rs-50025} Result: [1464019200, 586, 254, 146, 141, 136, 132, 1018, 60, 12, 884, 132, 307, 149, 295, 124, 31, 108, 3, 18, 3, 2]
  18. [03/06/16 11:56:03:003 CST] http-nio-8080-exec-2 DEBUG sql.ResultSet: {conn-10001, pstmt-20025, rs-50025} Result: [1463932800, 548, 209, 110, 106, 106, 103, 910, 68, 13, 779, 135, 306, 123, 251, 87, 33, 120, 4, 14, 1, 1]
  19. [03/06/16 11:56:03:003 CST] http-nio-8080-exec-2 DEBUG sql.ResultSet: {conn-10001, pstmt-20025, rs-50025} Result: [1463846400, 520, 197, 104, 100, 99, 94, 963, 46, 12, 827, 132, 289, 149, 261, 110, 26, 110, 4, 13, 5, 1]
  20. [03/06/16 11:56:03:003 CST] http-nio-8080-exec-2 DEBUG sql.ResultSet: {conn-10001, pstmt-20025, rs-50025} Result: [1463760000, 627, 237, 142, 134, 129, 122, 1190, 80, 23, 999, 173, 348, 182, 304, 137, 45, 137, 11, 22, 3, 2]
  21. [03/06/16 11:56:03:003 CST] http-nio-8080-exec-2 DEBUG sql.ResultSet: {conn-10001, pstmt-20025, rs-50025} Result: [1463673600, 678, 280, 150, 144, 133, 128, 1235, 75, 8, 1012, 184, 354, 187, 342, 126, 28, 153, 14, 16, 6, 1]
  22. [03/06/16 11:56:03:003 CST] http-nio-8080-exec-2 DEBUG sql.ResultSet: {conn-10001, pstmt-20025, rs-50025} Result: [1463587200, 564, 230, 138, 135, 131, 126, 1063, 53, 11, 901, 122, 337, 161, 274, 116, 27, 102, 3, 15, 3, 4]
  23. [03/06/16 11:56:03:003 CST] http-nio-8080-exec-2 DEBUG sql.ResultSet: {conn-10001, pstmt-20025, rs-50025} Result: [1463500800, 552, 212, 119, 112, 108, 106, 986, 46, 6, 833, 134, 332, 146, 254, 92, 23, 122, 6, 5, 1, 2]
  24. [03/06/16 11:56:03:003 CST] http-nio-8080-exec-2 DEBUG sql.ResultSet: {conn-10001, pstmt-20025, rs-50025} Result: [1463414400, 665, 234, 130, 124, 125, 121, 1165, 65, 13, 979, 159, 409, 143, 303, 116, 33, 145, 4, 6, 3, 2]
  25. [03/06/16 11:56:03:003 CST] http-nio-8080-exec-2 DEBUG sql.ResultSet: {conn-10001, pstmt-20025, rs-50025} closed
  26. [03/06/16 11:56:03:003 CST] http-nio-8080-exec-2 DEBUG sql.Statement: {conn-10001, pstmt-20025} closed
  27. [03/06/16 11:56:03:003 CST] http-nio-8080-exec-2 DEBUG sql.Connection: {conn-10001} pool-recycle
  • 德鲁伊监控平台的视图:

图片描述

图一 SQL监控

图片描述

图二 URI监控

重要的话,重复一遍,如果目前所写对现在的你没用,就算以后可能会用到,你也没必要细看下面所述,到此你已经花费了很多时间了,时间是金钱,伤不起。

如果你坚持要看到这里,请收藏吧!

spring加载properties键值对

其实与spring的配置基本没多大关系,但是因为其加载了数据库的基本信息,所以两个合在一起看一下。

spring-applicationContext.xml的部分配置:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:context="http://www.springframework.org/schema/context"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
  6. xmlns:tx="http://www.springframework.org/schema/tx"
  7. xmlns:mvc="http://www.springframework.org/schema/mvc"
  8. xmlns:task="http://www.springframework.org/schema/task"
  9. xsi:schemaLocation="http://www.springframework.org/schema/beans
  10. http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
  11. http://www.springframework.org/schema/context
  12. http://www.springframework.org/schema/context/spring-context.xsd
  13. http://www.springframework.org/schema/mvc
  14. http://www.springframework.org/schema/mvc/spring-mvc.xsd
  15. http://www.springframework.org/schema/task
  16. http://www.springframework.org/schema/task/spring-task.xsd
  17. http://code.alibabatech.com/schema/dubbo
  18. http://code.alibabatech.com/schema/dubbo/dubbo.xsd
  19. http://www.springframework.org/schema/tx
  20. http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
  21. ">
  22. <task:annotation-driven/>
  23. <context:annotation-config/>
  24. <context:component-scan base-package="cn.test.*"/>
  25. <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
  26. <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/>
  27. <property name="ignoreResourceNotFound" value="true"/>
  28. <property name="locations">
  29. <list>
  30. <!-- 越靠后越有效,取到最后一个有效的未知 -->
  31. <value>classpath:conf/properties/*.properties</value>
  32. </list>
  33. </property>
  34. </bean>
  35. </beans>

properties文件的部分配置:

  1. mysql.host=127.0.0.1 #你的数据库主机
  2. mysql.port=3306
  3. mysql.database=test # 你的数据库
  4. mysql.user=test # 数据库登录用户
  5. mysql.pwd=123456 # 数据库登录密码

mybatis.xml配置

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:tx="http://www.springframework.org/schema/tx"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans
  6. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
  7. http://www.springframework.org/schema/tx
  8. http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
  9. <!-- 开启事务注解驱动,管理事务-->
  10. <tx:annotation-driven transaction-manager="txManager"/>
  11. <!-- 在dao层可以使用@Trantional注解管理事务,spring会将注解了事务的类中的所有操作视为事务来管理 -->
  12. <bean id="txManager"
  13. class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  14. <property name="dataSource" ref="datasource"/>
  15. </bean>
  16. <!-- ******前面的这些都是今天的重点,下面是重点的开始,我们配置的数据源是德鲁伊druid数据源,这个才是重点****** -->
  17. <!-- ========================================================-->
  18. <!-- 使用druid作为数据源连接池-->
  19. <bean id="datasource" class="com.alibaba.druid.pool.DruidDataSource"
  20. init-method="init" destroy-method="close" >
  21. <!-- 数据库的配置,host:主机名,port:端口,database:数据库 -->
  22. <property name="url" value="jdbc:mysql://${mysql.host}:${mysql.port}/${mysql.database}?characterEncoding=utf8" />
  23. <!-- 连接数据的用户名-->
  24. <property name="username" value="${mysql.user}" />
  25. <!-- 连接数据库的密码-->
  26. <property name="password" value="${mysql.pwd}" />
  27. <!-- 配置初始化大小、最小、最大 -->
  28. <property name="initialSize" value="1" />
  29. <property name="minIdle" value="1" />
  30. <property name="maxActive" value="20" />
  31. <!-- 配置获取连接等待超时的时间 -->
  32. <property name="maxWait" value="30000" />
  33. <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
  34. <property name="timeBetweenEvictionRunsMillis" value="60000" />
  35. <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
  36. <property name="minEvictableIdleTimeMillis" value="300000" />
  37. <property name="testWhileIdle" value="true" />
  38. <!-- 这里建议配置为TRUE,防止取到的连接不可用 -->
  39. <property name="testOnBorrow" value="true" />
  40. <property name="testOnReturn" value="false" />
  41. <!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
  42. <property name="poolPreparedStatements" value="false" />
  43. <!-- 验证连接有效与否的SQL,不同的数据配置不同 -->
  44. <property name="validationQuery" value="select 1 " />
  45. <!-- ******重要的配置:监控统计拦截的filters,日志记录 *start* ******-->
  46. <!-- 并在filters属性中配置了log4j,ref中的bean是下面拦截器的配置 -->
  47. <!-- proxyFilters和filters是组合关系,前者是根据bean配置,后者根据别名配置的-->
  48. <!-- stat是statfilter的别名,log4j是logFilter的别名-->
  49. <!-- 监控统计拦截的filters,日志记录,这里开启了stat,wall(sql翻过墙过滤监控),log4j(log4j的监控)配置 -->
  50. <property name="proxyFilters">
  51. <list>
  52. <ref bean="statfilter" />
  53. <ref bean="logFilter" />
  54. </list>
  55. </property>
  56. <property name="filters" value="wall" />
  57. <!-- *end* -->
  58. </bean>
  59. <!-- 慢SQL记录 *start* -->
  60. <bean id="statfilter" class="com.alibaba.druid.filter.stat.StatFilter">
  61. <!-- 开启合并sql -->
  62. <property name="mergeSql" value="true" />
  63. <!-- 开启慢查询语句,1秒 -->
  64. <property name="slowSqlMillis" value="1000" />
  65. <property name="logSlowSql" value="true" />
  66. </bean>
  67. <bean id="logFilter" class="com.alibaba.druid.filter.logging.Log4jFilter">
  68. <!-- <property name="resultSetLogEnabled" value="false" /> -->
  69. <!-- <property name="statementExecutableSqlLogEnable" value="true" /> -->
  70. </bean>
  71. <!-- 慢SQL记录 *end* -->
  72. <!-- ========================================================-->
  73. <!-- 事务增强,这里用的是spring提供的特性-->
  74. <tx:advice id="advice" transaction-manager="transactionManager">
  75. <tx:attributes>
  76. <tx:method name="select*" read-only="true"/>
  77. <tx:method name="find*" read-only="true"/>
  78. <tx:method name="get*" read-only="true"/>
  79. <tx:method name="has*" read-only="true"/>
  80. <tx:method name="count*" read-only="true"/>
  81. <tx:method name="search*" read-only="true"/>
  82. </tx:attributes>
  83. </tx:advice>
  84. <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  85. <property name="dataSource">
  86. <ref local="datasource"/>
  87. </property>
  88. </bean>
  89. <!-- Session Factory -->
  90. <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  91. <property name="dataSource" ref="datasource"/>
  92. <!-- 下面configLocation这一句是myabtis的其它配置,比如字段值为null的时候,该字段就不返回了,在实际应用中,如果没有其它配置,可以删掉了-->
  93. <property name="configLocation" value="classpath:META-INF/spring/configuration.xml"/>
  94. <!--<property name="mapperLocations" value="classpath:mapper/*mapper.xml"/>-->
  95. </bean>
  96. <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  97. <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
  98. <property name="basePackage" value="cn.test.web.mapper"/>
  99. </bean>
  100. </beans>

上面的配置中,使用<!-- ====== -->包裹的部分时今天配置的重点,其它的配置时开发中的基本配置,也就是说基本的必须配置,不配置不能使用到spring提供的一些特性,当然数据源是必须的配置,但是可以选择spring的数据源连接,不一定是德鲁伊的数据源连接池。

对于配种中看到的<!-- ****** --> 注释的部分更是本文讲的重点,也就是要让程序在控制台打印mybatis的sql语句,这些配置很重要。

  1. <property name="proxyFilters">
  2. <list>
  3. <ref bean="statfilter" />
  4. <ref bean="logFilter" />
  5. </list>
  6. </property>

这里是以代理模式过滤stat和log的,所以用的两个bean分别是stat监控,log日志记录监控。

<property name="filters" value="stat,wall,log4j" />

这句的配置才是在控制台打印sql的重点,建议平时开发中,打开该配置,上线的时候关闭掉,原因就是上面提到的,写日志很占空间。

关于druid数据源配置属性的列表,请查看后面:druid连接池配置属性列表详解

web.xml配置

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns="http://java.sun.com/xml/ns/javaee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
  5. http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
  6. version="3.0">
  7. <context-param>
  8. <param-name>contextConfigLocation</param-name>
  9. <param-value>classpath:META-INF/spring/*.xml</param-value>
  10. </context-param>
  11. <!-- 初始化参数,引入log4j配置-->
  12. <context-param>
  13. <param-name>log4jConfigLocation</param-name>
  14. <param-value>WEB-INF/classes/log4j.xml</param-value>
  15. </context-param>
  16. <context-param>
  17. <param-name>log4jRefreshInterval</param-name>
  18. <param-value>60000</param-value>
  19. </context-param>
  20. <!-- 开启德鲁伊stat过滤,WebStatFilter用于采集web-jdbc关联监控的数据,注意放在其它的过滤器以及dispatcher前面,很重哦 -->
  21. <filter>
  22. <filter-name>DruidWebStatFilter</filter-name>
  23. <filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>
  24. <init-param>
  25. <param-name>exclusions</param-name>
  26. <param-value>/static/*,*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*</param-value>
  27. </init-param>
  28. <!-- 下面的所有的init-param可以不用配置,使用默认值即可,如果你有处女座情结,删除即可 -->
  29. <!-- 缺省sessionStatMaxCount是1000个。你可以按需要进行配置 -->
  30. <init-param>
  31. <param-name>sessionStatMaxCount</param-name>
  32. <param-value>1000</param-value>
  33. </init-param>
  34. <!-- druid 0.2.7版本开始支持profile,配置profileEnable能够监控单个url调用的sql列表 -->
  35. <init-param>
  36. <param-name>profileEnable</param-name>
  37. <param-value>true</param-value>
  38. </init-param>
  39. <!--
  40. <init-param>
  41. <param-name>principalSessionName</param-name>
  42. <param-value>users.username</param-value>
  43. </init-param> -->
  44. <!-- 你可以关闭session统计功能 -->
  45. <!--
  46. <init-param>
  47. <param-name>sessionStatEnable</param-name>
  48. <param-value>true</param-value>
  49. </init-param> -->
  50. </filter>
  51. <filter-mapping>
  52. <filter-name>DruidWebStatFilter</filter-name>
  53. <url-pattern>/*</url-pattern>
  54. </filter-mapping>
  55. <!--this listener must be defined before the spring listener-->
  56. <listener>
  57. <listener-class>com.alibaba.dubbo.remoting.http.servlet.BootstrapListener</listener-class>
  58. </listener>
  59. <listener>
  60. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  61. </listener>
  62. <!-- log4j监听器 -->
  63. <listener>
  64. <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
  65. </listener>
  66. <servlet>
  67. <servlet-name>dispatcher</servlet-name>
  68. <servlet-class>com.alibaba.dubbo.remoting.http.servlet.DispatcherServlet</servlet-class>
  69. <load-on-startup>1</load-on-startup>
  70. </servlet>
  71. <servlet-mapping>
  72. <servlet-name>dispatcher</servlet-name>
  73. <url-pattern>/*</url-pattern>
  74. </servlet-mapping>
  75. <!-- 德鲁伊监控平台监控器 -->
  76. <servlet>
  77. <servlet-name>DruidStatView</servlet-name>
  78. <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
  79. <init-param>
  80. <!-- 允许清空统计数据 -->
  81. <param-name>resetEnable</param-name>
  82. <param-value>true</param-value>
  83. </init-param>
  84. <init-param>
  85. <!-- 用户名 -->
  86. <param-name>loginUsername</param-name>
  87. <param-value>druid</param-value>
  88. </init-param>
  89. <init-param>
  90. <!-- 密码 -->
  91. <param-name>loginPassword</param-name>
  92. <param-value>druid</param-value>
  93. </init-param>
  94. </servlet>
  95. <servlet-mapping>
  96. <servlet-name>DruidStatView</servlet-name>
  97. <url-pattern>/druid/*</url-pattern>
  98. </servlet-mapping>
  99. </web-app>

上面加了注解的配置,是本文配置的重点,其它配置不在这里讲解。

<!-- 开启德鲁伊stat过滤,WebStatFilter用于采集web-jdbc关联监控的数据-->

  1. <filter>
  2. <filter-name>DruidWebStatFilter</filter-name>
  3. <filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>
  4. <init-param>
  5. <param-name>exclusions</param-name>
  6. <param-value>/static/*,*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*</param-value>
  7. </init-param>
  8. </filter>
  9. <filter-mapping>
  10. <filter-name>DruidWebStatFilter</filter-name>
  11. <url-pattern>/*</url-pattern>
  12. </filter-mapping>

druid对除了静态资源外底所有路由进行监控,该监控采集web-jdbc关联监控的数据。而前面对数据源监控的配置,大部分是sql监控。

<init-param>

  1. <!-- 允许清空统计数据 -->
  2. <param-name>resetEnable</param-name>
  3. <param-value>true</param-value>
  4. </init-param>
  5. <init-param>
  6. <!-- 用户名 -->
  7. <param-name>loginUsername</param-name>
  8. <param-value>druid</param-value>
  9. </init-param>
  10. <init-param>
  11. <!-- 密码 -->
  12. <param-name>loginPassword</param-name>
  13. <param-value>druid</param-value>
  14. </init-param>

如果你不希望别人直接查看你的监控,请把查看权限配置加上。如果监控平台被一些不安分的家伙知道,网站面临攻击的可能性就很大,安全性不靠保障,所以建议配置账户信息。

过滤器中的配置,是用来定义我们的监控选项,在以上的监控配置中,上面这段xml代码配置了一个最简单的监控,并采用了大量的默认配置,如果你想使用更丰富的监控配置,可以在druid的github wiki上获取更多的选项,地址:druid Filter 配置

<!-- 德鲁伊监控平台监控器 -->

  1. <servlet>
  2. <servlet-name>DruidStatView</servlet-name>
  3. <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
  4. </servlet>
  5. <servlet-mapping>
  6. <servlet-name>DruidStatView</servlet-name>
  7. <url-pattern>/druid/*</url-pattern>
  8. </servlet-mapping>

这个是德鲁伊监控平台提供的servlet web服务,启动服务器后,只需要在浏览器中输入:http://127.0.0.1:8080/druid/即可访问引言里面的几个图。

注意,路由根据自己的情况写,如果你直接在idea中配置的,且idea中没有配置context path的话,可以不用项目名。如果配置了,就用配置的名字,比如配置为test,则应该访问http://127.0.0.1:8080/test/druid/

在eclipse中,需要跟项目名的。假如项目时test0,则应该是http://127.0.0.1:8080/test0/druid/。当然了,如果不是这样的话,聪明的你肯定会尝试几次其它形式的路由访问了。

当然还的注意端口号,我这里面默认用了8080,如果你是8090,就换吧。

重轴戏:log4j.xml配置

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
  3. <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
  4. <!-- 注意这里的大小写,配置文件对大小写敏感,主要是后面对该name的引用 -->
  5. <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
  6. <layout class="org.apache.log4j.PatternLayout">
  7. <param name="ConversionPattern"
  8. value="[%d{dd/MM/yy hh:mm:ss:sss z}] %t %5p %c{2}: %m%n"/>
  9. </layout>
  10. </appender>
  11. <appender name="rollingFile" class="org.apache.log4j.DailyRollingFileAppender">
  12. <param name="File" value="logs/server.log"/>
  13. <param name="DatePattern" value="'.'yyyy-MM-dd'.log'"/>
  14. <layout class="org.apache.log4j.PatternLayout">
  15. <param name="ConversionPattern"
  16. value="[%d{MMdd HH:mm:ss SSS\} %-5p] [%t] %c{3\} - %m%n"/>
  17. </layout>
  18. </appender>
  19. <!-- 配置mybatis打印sql语句 -->
  20. <!-- 这是网上看别人说的,我尝试了,加与不加都没关系,有兴趣自己去尝试
  21. <category name="org.springframework" additivity="false">
  22. <priority value="DEBUG"/>
  23. <appender-ref ref="CONSOLE"/>
  24. </category>
  25. <category name="org.springframework.orm.ibatis3" additivity="false">
  26. <priority value="DEBUG"/>
  27. <appender-ref ref="CONSOLE"/>
  28. </category>
  29. <category name="org.apache.ibatis" additivity="false">
  30. <priority value="DEBUG"/>
  31. <appender-ref ref="CONSOLE"/>
  32. </category>
  33. <category name="java.sql" additivity="false">
  34. <priority value="DEBUG"/>
  35. <appender-ref ref="CONSOLE"/>
  36. </category>-->
  37. <!-- ++++++++++++++++++++++++ -->
  38. <!-- druid数据源配置打印日志 start-->
  39. <logger name="druid.sql">
  40. <level value="DEBUG"/>
  41. </logger>
  42. <logger name="druid.sql.DataSource">
  43. <level value="DEBUG"/>
  44. </logger>
  45. <logger name="druid.sql.Connection">
  46. <level value="DEBUG"/>
  47. </logger>
  48. <logger name="druid.sql.Statement">
  49. <level value="DEBUG"/>
  50. </logger>
  51. <logger name="druid.sql.ResultSet">
  52. <level value="DEBUG"/>
  53. </logger>
  54. <!-- druid数据源配置打印日志 end -->
  55. <!-- ++++++++++++++++++++++++ -->
  56. <!-- spring提供的数据源打印日志 -->
  57. <!--
  58. <logger name="com.springframework" additivity="true">
  59. <level value="DEBUG"/>
  60. </logger>
  61. <logger name="com.ibatis" additivity="true">
  62. <level value="DEBUG"/>
  63. </logger>
  64. <logger name="com.ibatis.common.jdbc.SimpleDataSource" additivity="true">
  65. <level value="DEBUG"/>
  66. </logger>
  67. <logger name="com.ibatis.common.jdbc.ScriptRunner" additivity="true">
  68. <level value="DEBUG"/>
  69. </logger>
  70. <logger name="com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate" additivity="true">
  71. <level value="DEBUG"/>
  72. </logger>
  73. <logger name="Java.sql.Connection" additivity="true">
  74. <level value="DEBUG"/>
  75. </logger>
  76. <logger name="java.sql.Statement" additivity="true">
  77. <level value="DEBUG"/>
  78. </logger>
  79. <logger name="java.sql.PreparedStatement" additivity="true">
  80. <level value="DEBUG"/>
  81. </logger>
  82. <logger name="java.sql.ResultSet" additivity="true">
  83. <level value="DEBUG"/>
  84. </logger>
  85. -->
  86. <root>
  87. <level value="INFO"/>
  88. <!-- 注意ref中的大小写,就是前面配置的appender的name -->
  89. <appender-ref ref="CONSOLE"/>
  90. <!--<appender-ref ref="rollingFile" />-->
  91. </root>
  92. </log4j:configuration>

上面的配置看上去很杂,但是有用的配置用了<!-- ++++++++++++++++++++++++-->包裹起来了,其它的配置都是看网上的配置,有些对配置根本没有,有些事spring数据源监控sql的配置,对于德鲁伊,就包裹部分的足够了,说这句话,并不是让你放弃一些基本配置,基本配置永远不能缺少。

druid连接池配置属性列表详解

配置缺省值说明
name 配置这个属性的意义在于,如果存在多个数据源,监控的时候可以通过名字来区分开来。如果没有配置,将会生成一个名字,格式是:”DataSource-” + System.identityHashCode(this)
jdbcUrl 连接数据库的url,不同数据库不一样。例如:mysql : jdbc:mysql://10.20.153.104:3306/druid2;oracle : jdbc:oracle:thin:@10.20.149.85:1521:ocnauto
username 连接数据库的用户名
password 连接数据库的密码。如果你不希望密码直接写在配置文件中,可以使用ConfigFilter。详细看这里:https://github.com/alibaba/dr...
driverClassName根据url自动识别这一项可配可不配,如果不配置druid会根据url自动识别dbType,然后选择相应的driverClassName
initialSize0初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时
maxActive8最大连接池数量
maxIdle8已经不再使用,配置了也没效果
minIdle 最小连接池数量
maxWait 获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。
poolPreparedStatementsfalse是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql5.5以下的版本中没有PSCache功能,建议关闭掉。5.5及以上版本有PSCache,建议开启。
maxOpenPreparedStatements-1要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。在Druid中,不会存在Oracle下PSCache占用内存过多的问题,可以把这个数值配置大一些,比如说100
validationQuery 用来检测连接是否有效的sql,要求是一个查询语句。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会其作用。
testOnBorrowtrue申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
testOnReturnfalse归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
testWhileIdlefalse建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。timeBetweenEvictionRunsMillis有两个含义:1) Destroy线程会检测连接的间隔时间 2) testWhileIdle的判断依据,详细看testWhileIdle属性的说明
numTestsPerEvictionRun 不再使用,一个DruidDataSource只支持一个EvictionRun
minEvictableIdleTimeMillis
connectionInitSqls 物理连接初始化的时候执行的sql
exceptionSorter根据dbType自动识别当数据库抛出一些不可恢复的异常时,抛弃连接
filters 属性类型是字符串,通过别名的方式配置扩展插件,常用的插件有:监控统计用的filter:stat; 日志用的filter:log4j;防御sql注入的filter:wall;合并sql的filter:mergeStat
proxyFilters 类型是List<com.alibaba.druid.filter.Filter>,如果同时配置了filters和proxyFilters,是组合关系,并非替换关系

补充说明

前面说过,mybatis配置的时候,可以配置sqlSessionFactory的时候通过configLocation属性可以指定mybatis的一些额外配置。

这里分享一段数据库字段值为null时,不返回字段名,而我们希望的是不管值为什么,字段名都应该返回。配置如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD SQL MAP Config 3.1//EN"
  3. "http://mybatis.org/dtd/mybatis-3-config.dtd">
  4. <configuration>
  5. <settings>
  6. <setting name="callSettersOnNulls" value="true"/>
  7. <setting name="logImpl" value="LOG4J" />
  8. </settings>
  9. </configuration>

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/355076
推荐阅读
相关标签
  

闽ICP备14008679号