<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd">

	<description>Spring 整合连接池</description>

	<!-- *********************start druid连接池配置********************* -->
	<!-- 配置sql防火墙 -->
	<bean id="wallFilterConfig" class="com.alibaba.druid.wall.WallConfig" init-method="init">
		<!-- 指定配置装载的目录  -->
		<property name="dir" value="" />
		<!-- 允许sql注释****flyway的初始表有注释不加会过滤报错   -->
		<property name="commentAllow" value="true" />
		<!-- 允许单次执行多条SQL -->
		<property name="multiStatementAllow" value="true"/>
	</bean>
	<!-- 防SQL注入过滤器 -->
	<bean id="wall-filter" class="com.alibaba.druid.wall.WallFilter">
		<property name="dbType" value="mysql" />
		<property name="config" ref="wallFilterConfig" />
	</bean>
	<!-- 监控信息过滤器 -->
	<bean id="stat-filter" class="com.alibaba.druid.filter.stat.StatFilter">
		<!-- slowSqlMillis用来配置SQL慢的标准，执行时间超过slowSqlMillis的就是慢。 -->
		<property name="slowSqlMillis" value="10000" />
		<property name="logSlowSql" value="true" />
		<property name="mergeSql" value="true" />
	</bean>

	<!-- 数据库连接池 dataSource -->
	<bean id="mysqlDataSource" class="com.alibaba.druid.pool.DruidDataSource"
		init-method="init" destroy-method="close">
		<!-- 基本属性 url、user、password -->
		<property name="url" value="${db.url}" />
		<property name="username" value="${db.username}" />
		<!-- 密码加密 -->
		<property name="filters" value="config" />
		<property name="connectionProperties"
			value="config.decrypt=true;config.decrypt.key=${db.publicKey}" />
		<property name="password" value="${db.password}" />
		<!-- 配置初始化大小、最小、最大 -->
		<property name="initialSize" value="100" />
		<property name="minIdle" value="100" />
		<property name="maxActive" value="300" />
		<!-- 配置获取连接等待超时的时间 -->
		<property name="maxWait" value="60000" />
		<!-- 配置间隔多久才进行一次检测，检测需要关闭的空闲连接，单位是毫秒 -->
		<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" />
		<!-- 打开PSCache，并且指定每个连接上PSCache的大小 如果用Oracle，则把poolPreparedStatements配置为true，mysql可以配置为false。 -->
		<property name="poolPreparedStatements" value="false" />
		<property name="maxPoolPreparedStatementPerConnectionSize"
			value="20" />
		<!-- 配置removeAbandoned对性能会有一些影响，建议怀疑存在泄漏之后再打开。当程序存在缺陷时，申请的连接忘记关闭，这时候，就存在连接泄漏了。Druid提供了RemoveAbandanded相关配置，用来关闭长时间不使用的连接。 -->
		<!-- <property name="removeAbandoned" value="true" /> -->
		<!-- <property name="removeAbandonedTimeout" value="1800" /> -->
		<!-- <property name="logAbandoned" value="true" /> -->
		<!-- 配置监控统计拦截的filters -->
		<!-- <property name="filters" value="wall,stat" /> -->
		<property name="proxyFilters">
			<list>
				<!-- 监控信息过滤器 -->
				<ref bean="stat-filter" />
				<!-- 防注入的话从前台传排序字段排序不好用 -->
				<ref bean="wall-filter" />
			</list>
		</property>
	</bean>
	

</beans>