在以前的JAVA项目中一直使用c3po连接池,因工作原因很久也没有关注最新的一些开源了,最近无意发现了alibaba/druid很强大,只是在使用SQLITE时遇到一些问题。所以,上篇整合时使用了mysql数据库,下面来尝试下druid的一些功能。
1、简单的使用
接着上一篇的项目如下操作:
第一步,打开Druid的监控统计功能,这在上一篇中已配置过了,即spring中类似如下的配置:
<property name="filters" value="stat" />
第二步,配置web.xml,加入如下配置项:
<!-- druid 配置 -->
<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>
这里配置的信息表示,druid的登录页面地址形如:
http://localhost:8080/website_java3/druid/index.html,账号和密码都是
druid。
第三步,执行 Mavel install
第四步,发布和启动tomcat
第五步,访问http://localhost:8080/website_java3/druid/index.html,并使用druid登录,打开如下的页面:
此时再访问一下之前的demohttp://localhost:8080/website_java3/index.do,打开druid的“SQL监控”就可以监控到刚才访问的SQL语句了:
2、其他功能
2.1 访问控制
<servlet>
<servlet-name>DruidStatView</servlet-name>
<servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
<init-param>
<param-name>allow</param-name>
<param-value>128.242.127.1/24,128.242.128.1</param-value>
</init-param>
<init-param>
<param-name>deny</param-name>
<param-value>128.242.127.4</param-value>
</init-param>
</servlet>
- allow 代表允许访问的IP地址,如果没有配置或为空,则表示允许所有访问;
- deny 代表拒绝访问的IP地址;
- deny 的优先级高于 allow,即当一个IP同时存在于 allow 和 deny 中时,则不允许访问;
- 不支持IPV6。
2.2 关闭重置(Reset All)
在首页右上角有一个重置按钮,执行这个操作之后,会导致所有计数器清零,重新计数。你可以通过配置参数关闭它。
<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>false</param-value>
</init-param>
</servlet>
2.3 慢SQL记录
<bean id="stat-filter" class="com.alibaba.druid.filter.stat.StatFilter">
<property name="slowSqlMillis" value="10000" />
<property name="logSlowSql" value="true" />
</bean>
上面的配置放在spring配置文件里。
StatFilter属性slowSqlMillis用来配置SQL慢的标准,执行时间超过slowSqlMillis的就是慢。slowSqlMillis的缺省值为3000,也就是3秒。
2.4 监控配置
<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>*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>DruidWebStatFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
放在web.xml中,用于指定将监控何种资源,其中的exclusions选项值表示需要排除的资源规则,比如*.js,/jslib/*等等。
另外,druid还有很多强大的功能,继续学习!
3、使用 SQLite 数据库
在上一篇中,最初是想整合 sqlite ,但在使用中遇到“ResultSet closed 异常”问题,网上搜索测试后如下解决:
3.1 方法一:修改“source.properties”文件
druid.poolPreparedStatements=false
druid.maxPoolPreparedStatementPerConnectionSize=0
3.2 方法二:修改“spring-context.xml”文件
删除如下两个配置:
<!-- 打开PSCache,并且指定每个连接上PSCache的大小 oracle=true mysql=false -->
<property name="poolPreparedStatements" value="${druid.poolPreparedStatements}" /><!-- 表明是否开启statement cache,默认为false,也就是不开启 -->
<property name="maxPoolPreparedStatementPerConnectionSize" value="${druid.maxPoolPreparedStatementPerConnectionSize}" /><!-- statement cache的大小,默认为-1,也就是不限制 -->