Spring 项目整合druid/sql防火墙,Spring监控,密码配置

原创
2016/08/08 18:36
阅读数 2.9K

最近因为项目需要接触了alibaba的druid。不得不说druid是一个很人性化的连接池。

系统采用的是ssm结构。

首先最简单的druid连接池的配置:

在spring配置文件(ApplicationContext.xml)中配置如下bean

<!-- data source -->
<bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">   
    <property name="dataSource" ref="dataSource"></property>
</bean>

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">  
         <!-- 数据库基本信息配置 -->
         <property name="url" value="${url}" />  
         <property name="username" value="${username}" />  
         <property name="password" value="${password}" />  
         <property name="driverClassName" value="${driverClassName}" />  
         <!-- 开启web监控及防火墙监控 -->
         <property name="filters" value="stat,wall" />  
   		 <!-- 最大并发连接数 -->
         <property name="maxActive" value="20" />
         <!-- 初始化连接数量 -->
         <property name="initialSize" value="1" />
         <!-- 配置获取连接等待超时的时间 -->
         <property name="maxWait" value="60000" />
         <!-- 最小空闲连接数 -->
         <property name="minIdle" value="10" />  
   		 <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
         <property name="timeBetweenEvictionRunsMillis" value="60000" />
         <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
         <property name="minEvictableIdleTimeMillis" value="300000" />  
         <property name="validationQuery" value="SELECT 'x'" />  
         <property name="testWhileIdle" value="true" />  
         <property name="testOnBorrow" value="false" />  
         <property name="testOnReturn" value="false" />  
         <property name="maxOpenPreparedStatements" value="20" />
         <!-- 打开removeAbandoned功能 -->
         <property name="removeAbandoned" value="true" />
         <!-- 1800秒,也就是30分钟 -->
         <property name="removeAbandonedTimeout" value="1800" />
         <!-- 关闭abanded连接时输出错误日志 -->   
         <property name="logAbandoned" value="true" />
	</bean>  

功能升级。

以上只是做了一个简单的连接功能,如果需要对性能进行监控则需要访问项目根路径如

localhost:8082/webapp/druid/index.html

在这儿可以看到各druid监控的系统各方面的运行情况,同时可以用此来定位慢查询,优化系统。监控页面图片如下

由于隐私性的问题,很多情况我们需要指定用户查看druid情况,可以配置专属的用户名密码。

如下:在web.xml中配置

<!-- 连接池 启用Web监控统计功能 start -->
	<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>
		<!-- druid 用户名密码 开始 -->
		<init-param>
			<param-name>sessionStatMaxCount</param-name>
			<param-value>2000</param-value>
		</init-param>
		<init-param>
			<param-name>sessionStatEnable</param-name>
			<param-value>true</param-value>
		</init-param>
		<init-param>
			<param-name>principalSessionName</param-name>
			<param-value>session_user_key</param-value>
		</init-param>
		<init-param>
			<param-name>profileEnable</param-name>
			<param-value>true</param-value>
		</init-param>
		<!-- druid 用户名密码 结束 -->
	</filter>
	<filter-mapping>
		<filter-name>DruidWebStatFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	<servlet>
		<servlet-name>DruidStatView</servlet-name>
		<servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
		<!-- druid 用户名密码 开始 -->
		<init-param>
			<!-- 用户名 -->
			<param-name>loginUsername</param-name>
			<param-value>admin</param-value>
		</init-param>
		<init-param>
			<!-- 密码 -->
			<param-name>loginPassword</param-name>
			<param-value>password</param-value>
		</init-param>
		<!-- druid 用户名密码 结束 -->
	</servlet>
	<servlet-mapping>
		<servlet-name>DruidStatView</servlet-name>
		<url-pattern>/druid/*</url-pattern>
	</servlet-mapping>
	<!-- 连接池 启用Web监控统计功能 end -->

启用sql放火墙

需要在spring配置文件的datasource bean中加入如下参数:

<property name="filters" value="wall" />

启用uri监控

需要在spring配置文件的datasource bean中加入如下参数:

<property name="filters" value="stat" />

入果需要同时开启sql防火墙和url监控

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

开启spring监控

<bean id="druid-stat-interceptor" class="com.alibaba.druid.support.spring.stat.DruidStatInterceptor"></bean>
<bean id="druid-stat-pointcut" class="org.springframework.aop.support.JdkRegexpMethodPointcut" scope="prototype">
	<property name="patterns">
		<list>
			<value>com.baiqi.service.*</value>
			<value>com.baiqi.dao.*</value>
		</list>
	</property>
</bean>
<aop:config>
	<aop:advisor advice-ref="druid-stat-interceptor" pointcut-ref="druid-stat-pointcut" />
</aop:config>

 

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
14 收藏
1
分享
返回顶部
顶部