【Spring JDBC】数据源配置(二)

一、Spring内置数据源

1. 创建Maven Project,修改pom.xml

<properties>
    <!-- JDK版本 -->
    <java.version>1.8</java.version>
    <!-- spring版本 -->
    <spring.version>4.1.6.RELEASE</spring.version>
    <!-- mysql driver 版本 -->
    <mysql.version>5.1.48</mysql.version>
</properties>
<dependencies>
    <!-- 核心容器 之 spring-core -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <!-- 核心容器 之 spring-beans -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <!-- 核心容器 之 spring-context -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <!-- 核心容器 之 spring-context-support -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context-support</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <!-- 核心容器 之 spring-expression -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-expression</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <!-- spring-jdbc -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <!-- mysql driver -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>${mysql.version}</version>
    </dependency>

</dependencies>

2. jdbc.properties

# DriverManagerDataSource + mysql
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://192.168.178.5:12345/ssm?characterEncoding=utf-8
jdbc.username=root
jdbc.password=123456

3. applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans.xsd 
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context.xsd">
    
    <!-- 加载属性文件 -->
    <!-- 第一种方式 -->
    <!-- <bean id="config" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location">
            <value>classpath:jdbc.properties</value>
        </property>
    </bean> -->
    
    <!-- 第二种方式 -->
    <context:property-placeholder location="classpath:jdbc.properties"/>

    <!-- spring自带的数据源 -->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${jdbc.driverClassName}" />
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
    </bean>
    
    
</beans>

4. 测试

//加载配置文件,spring 容器初始化
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
DriverManagerDataSource dataSource = ctx.getBean("dataSource", DriverManagerDataSource.class);
System.out.println(dataSource);
System.out.println(dataSource.getUrl());

注意:

DriverManagerDataSource 和 SimpleDriverDataSource 在每次请求时返回一个新建的连接,根本没有连接池的概念。在正式项目中很少使用,常用的是使用第三方数据源。

二、第三方数据源

1. dbcp2数据源

全限定名:org.apache.commons.dbcp2.BasicDataSource
需要添加:commons-dbcp2-2.6.0.jar、commons-pool2-2.6.2.jar
注意; dbcp2需要jdk1.7,否则会报错:Unsupported major.minor version 51.0

(1) pom.xml

<properties>
    <!-- JDK版本 -->
    <java.version>1.8</java.version>
    <!-- spring版本 -->
    <spring.version>4.1.6.RELEASE</spring.version>
    <!-- mysql driver 版本 -->
    <mysql.version>5.1.48</mysql.version>
    <!-- dbcp2 版本 -->
    <dbcp.version>2.6.0</dbcp.version>
</properties>
<dependencies>
    <!-- 核心容器 之 spring-core -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <!-- 核心容器 之 spring-beans -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <!-- 核心容器 之 spring-context -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <!-- 核心容器 之 spring-context-support -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context-support</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <!-- 核心容器 之 spring-expression -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-expression</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <!-- spring-jdbc -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <!-- mysql driver -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>${mysql.version}</version>
    </dependency>
    
    <!-- dbcp2 dataSource, dbcp2需要jdk1.7及以上-->
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-dbcp2</artifactId>
        <version>${dbcp.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-pool2</artifactId>
       <version>${dbcp.version}</version>
    </dependency>
</dependencies>

(2) jdbc.properties

# BasicDataSource + mysql
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://192.168.178.5:12345/ssm?characterEncoding=UTF-8
jdbc.username=root
jdbc.password=123456
jdbc.maxTotal=100
jdbc.initialSize=10
jdbc.maxWaitMillis=60000
jdbc.minIdle=10
jdbc.maxIdle=15
jdbc.logAbandoned=true
jdbc.removeAbandoned=true
jdbc.removeAbandonedTimeout=10
jdbc.timeBetweenEvictionRunsMillis=10000
jdbc.numTestsPerEvictionRun=10
jdbc.minEvictableIdleTimeMillis=10000
jdbc.validationQuery=SELECT 1 FROM USER
jdbc.testWhileIdle=true
jdbc.testOnBorrow=true
jdbc.defaultAutoCommit=true
jdbc.defaultReadOnly=false

(3) applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans.xsd 
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context.xsd">

    <!-- 加载属性文件 -->
    <!-- 第一种方式 -->
    <!-- <bean id="config" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
        <property name="location"> <value>classpath:jdbc.properties</value> </property> 
        </bean> -->

    <!-- 第二种方式 -->
    <context:property-placeholder location="classpath:jdbc.properties" />

    <!-- dbcp2数据源 -->
    <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"
        destroy-method="close">
        <property name="driverClassName" value="${jdbc.driverClassName}" />
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
        <!--maxActive: 最大连接数量 -->
        <property name="maxTotal" value="${jdbc.maxTotal}" />
        <!--minIdle: 最小空闲连接 -->
        <property name="minIdle" value="${jdbc.minIdle}" />
        <!--maxIdle: 最大空闲连接 -->
        <property name="maxIdle" value="${jdbc.maxIdle}" />
        <!--initialSize: 初始化连接 -->
        <property name="initialSize" value="${jdbc.initialSize}" />
        <!-- 连接被泄露时是否打印 -->
        <property name="logAbandoned" value="${jdbc.logAbandoned}" />
        <!-- removeAbandonedOnBorrow: 是否自动回收超时连接 -->
        <property name="removeAbandonedOnBorrow" value="${jdbc.removeAbandoned}" />
        <!-- removeAbandonedTimeout: 超时时间(以秒数为单位) -->
        <property name="removeAbandonedTimeout" value="${jdbc.removeAbandonedTimeout}" />
        <!-- maxWaitMillis: 从连接池获取一个连接时,最大的等待时间, 超时等待时间以毫秒为单位 1000等于60秒 -->
        <property name="maxWaitMillis" value="${jdbc.maxWaitMillis}" />
        <!-- 在空闲连接回收器线程运行期间休眠的时间值,以毫秒为单位. -->
        <property name="timeBetweenEvictionRunsMillis" value="${jdbc.timeBetweenEvictionRunsMillis}" />
        <!-- 在每次空闲连接回收器线程(如果有)运行时检查的连接数量 -->
        <property name="numTestsPerEvictionRun" value="${jdbc.numTestsPerEvictionRun}" />
        <!-- 1000 * 60 * 30 连接在池中保持空闲而不被空闲连接回收器线程 -->
        <property name="minEvictableIdleTimeMillis" value="${jdbc.minEvictableIdleTimeMillis}" />
        <property name="validationQuery" value="${jdbc.validationQuery}" />
        <!-- 定时对线程池中的链接进行validateObject校验,对无效的链接进行关闭 -->
        <!-- <property name="testWhileIdle" value="${jdbc.testWhileIdle}"/> -->
        <!-- 指定在从连接池中拿连接时,要检查连接是否有效,若无效会将连接从连接池中移除掉 -->
        <property name="testOnBorrow" value="${jdbc.testOnBorrow}" />

        <!-- defaultAutoCommit,通过这个池创建连接的默认自动提交状态。如果不设置,则setAutoCommit 方法将不被调用 -->
        <!-- <property name="defaultAutoCommit" value="${jdbc.defaultAutoCommit}" /> -->
        <!-- defaultReadOnly, 通过这个池创建连接的默认只读状态。如果不设置,则setReadOnly 方法将不被调用。(部分驱动不支持只读模式,如:Informix) -->
        <property name="defaultReadOnly" value="${jdbc.defaultReadOnly}" />
        <!-- defaultTransactionIsolation,NONE/READ_COMMITTED/READ_UNCOMMITTED/REPEATABLE_READ/SERIALIZABLE -->
    </bean>

</beans>

2. C3p0数据源

全限定名:com.mchange.v2.c3p0.ComboPooledDataSource
需要添加:c3p0-0.9.5.4.jar、mchange-commons-java-0.2.15.jar

(1) pom.xml

<properties>
    <!-- JDK版本 -->
    <java.version>1.8</java.version>
    <!-- spring版本 -->
    <spring.version>4.1.6.RELEASE</spring.version>
    <!-- mysql driver 版本 -->
    <mysql.version>5.1.48</mysql.version>
    <!-- c3p0 版本 -->
    <c3p0.version>0.9.5.4</c3p0.version>
</properties>
<dependencies>
    <!-- 核心容器 之 spring-core -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <!-- 核心容器 之 spring-beans -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <!-- 核心容器 之 spring-context -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <!-- 核心容器 之 spring-context-support -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context-support</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <!-- 核心容器 之 spring-expression -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-expression</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <!-- spring-jdbc -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <!-- mysql driver -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>${mysql.version}</version>
    </dependency>
    
    <!-- c3p0 dataSource -->
    <dependency>
        <groupId>com.mchange</groupId>
        <artifactId>c3p0</artifactId>
        <version>${c3p0.version}</version>
    </dependency>
    <dependency>
        <groupId>com.mchange</groupId>
        <artifactId>mchange-commons-java</artifactId>
        <version>0.2.15</version>
    </dependency>

</dependencies>

(2) jdbc.properties

# ComboPooledDataSource + mysql
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.jdbcUrl=jdbc:mysql://192.168.178.5:12345/ssm?characterEncoding=UTF-8
jdbc.user=root
jdbc.password=123456
jdbc.minPoolSize=1
jdbc.maxPoolSize=100
jdbc.initialPoolSize=5
jdbc.maxIdleTime=60
jdbc.acquireIncrement=10
jdbc.maxStatements=10
jdbc.idleConnectionTestPeriod=30
jdbc.acquireRetryAttempts=30
jdbc.breakAfterAcquireFailure=true
jdbc.testConnectionOnCheckout=false
jdbc.automaticTestTable=true
jdbc.checkoutTimeout=15000
jdbc.numHelperThreads=10
jdbc.testConnectionOnCheckin=true

(3) applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans.xsd 
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context.xsd">

    <!-- 加载属性文件 -->
    <!-- 第一种方式 -->
    <!-- <bean id="config" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
        <property name="location"> <value>classpath:jdbc.properties</value> </property> 
        </bean> -->

    <!-- 第二种方式 -->
    <context:property-placeholder location="classpath:jdbc.properties" />

    <!-- c3p0数据源 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
        destroy-method="close">
        <property name="driverClass" value="${jdbc.driverClass}" />
        <property name="jdbcUrl" value="${jdbc.jdbcUrl}" />
        <property name="user" value="${jdbc.user}" />
        <property name="password" value="${jdbc.password}" />
        <!--minPoolSize:连接池中保留的最小连接数。 -->
        <property name="minPoolSize" value="${jdbc.minPoolSize}" />
        <!--maxPoolSize:连接池中保留的最大连接数。Default: 15 -->
        <property name="maxPoolSize" value="${jdbc.maxPoolSize}" />
        <!--initialPoolSize:初始化时获取的连接数,取值应在minPoolSize与maxPoolSize之间。Default: 3 -->
        <property name="initialPoolSize" value="${jdbc.initialPoolSize}" />
        <!--maxIdleTime:最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
        <property name="maxIdleTime" value="${jdbc.maxIdleTime}" />
        <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
        <property name="acquireIncrement" value="${jdbc.acquireIncrement}" />
        <!--JDBC的标准参数,用以控制数据源内加载的PreparedStatements数量。但由于预缓存的statements 属于单个connection而不是整个连接池。所以设置这个参数需要考虑到多方面的因素。 
            如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default: 0 -->
        <property name="maxStatements" value="${jdbc.maxStatements}" />
        <!-- maxStatementsPerConnection:连接池内单个连接所拥有的最大缓存Statement数。默认为0; -->

        <!--idleConnectionTestPeriod:每60秒检查所有连接池中的空闲连接。Default: 0 -->
        <property name="idleConnectionTestPeriod" value="${jdbc.idleConnectionTestPeriod}" />
        <!--acquireRetryAttempts:定义在从数据库获取新连接失败后重复尝试的次数。Default: 30 -->
        <property name="acquireRetryAttempts" value="${jdbc.acquireRetryAttempts}" />
        <!--获取连接失败将会引起所有等待连接池来获取连接的线程抛出异常。但是数据源仍有效 保留,并在下次调用getConnection()的时候继续尝试获取连接。如果设为true,那么在尝试 
            获取连接失败后该数据源将申明已断开并永久关闭。Default: false -->
        <property name="breakAfterAcquireFailure" value="${jdbc.breakAfterAcquireFailure}" />
        <!--因性能消耗大请只在需要的时候使用它。如果设为true那么在每个connection提交的 时候都将校验其有效性。建议使用idleConnectionTestPeriod或automaticTestTable 
            等方法来提升连接测试的性能。Default: false -->
        <property name="testConnectionOnCheckout" value="${jdbc.testConnectionOnCheckout}" />

        <!-- automaticTestTable:C3P0将建一张名为Test的空表,并使用其自带的查询语句进行测试。 -->
        <property name="automaticTestTable" value="${jdbc.automaticTestTable}" />
        <!-- checkoutTimeout:当连接池用完时客户端调用getConnection()后等待获取新连接的时间,超时后将抛出SQLException,如设为0则无限期等待。单位毫秒,默认为0; -->
        <property name="checkoutTimeout" value="${jdbc.checkoutTimeout}" />
        <!-- numHelperThreads:C3P0是异步操作的,缓慢的JDBC操作通过帮助进程完成。扩展这些操作可以有效的提升性能,通过多线程实现多个操作同时被执行。默认为3; -->
        <property name="numHelperThreads" value="${jdbc.numHelperThreads}" />
        <!-- testConnectionOnCheckin:如果设为true那么在取得连接的同时将校验连接的有效性。默认为false。 -->
        <property name="testConnectionOnCheckin" value="${jdbc.testConnectionOnCheckin}" />
    </bean>

</beans>

3. Druid数据源

Druid是阿里巴巴开源平台上一个数据库连接池实现,它结合了C3P0、DBCP、PROXOOL等DB池的优点,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行情况,可以说是针对监控而生的DB连接池,号称是目前最好的连接池。

全限定名:com.alibaba.druid.pool.DruidDataSource
需要添加:druid-1.1.6.jar、commons-logging-1.2.jar

(1) pom.xml

<properties>
    <!-- JDK版本 -->
    <java.version>1.8</java.version>
    <!-- spring版本 -->
    <spring.version>4.1.6.RELEASE</spring.version>
    <!-- mysql driver 版本 -->
    <mysql.version>5.1.48</mysql.version>
    <!-- druid 版本 -->
    <druid.version>1.1.6</druid.version>
</properties>
<dependencies>
    <!-- 核心容器 之 spring-core -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <!-- 核心容器 之 spring-beans -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <!-- 核心容器 之 spring-context -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <!-- 核心容器 之 spring-context-support -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context-support</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <!-- 核心容器 之 spring-expression -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-expression</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <!-- spring-jdbc -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <!-- mysql driver -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>${mysql.version}</version>
    </dependency>
    
    <!-- druid dataSource -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>${druid.version}</version>
    </dependency>
</dependencies>

(2) jdbc.properties

# DruidDataSource + mysql
jdbc.name=druid-1
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://192.168.178.5:12345/ssm?characterEncoding=UTF-8
jdbc.username=root
jdbc.password=123456
jdbc.initialSize=1
jdbc.maxActive=10
jdbc.minIdle=1
jdbc.maxWait=10000
jdbc.poolPreparedStatements=true
jdbc.maxOpenPreparedStatements=20
jdbc.validationQuery=select 1 from user
jdbc.testOnBorrow=true
jdbc.testOnReturn=false
jdbc.testWhileIdle=true
jdbc.timeBetweenEvictionRunsMillis=60000
jdbc.minEvictableIdleTimeMillis=300000
jdbc.filters=stat
jdbc.defaultAutoCommit=true

(3) applicatioContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans.xsd 
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context.xsd">

    <!-- 加载属性文件 -->
    <!-- 第一种方式 -->
    <!-- <bean id="config" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
        <property name="location"> <value>classpath:jdbc.properties</value> </property> 
        </bean> -->

    <!-- 第二种方式 -->
    <context:property-placeholder location="classpath:jdbc.properties" />

    <!-- druid数据源 -->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
        init-method="init" destroy-method="close">
        <property name="name" value="${jdbc.name}" />
        <property name="driverClassName" value="${jdbc.driverClassName}" />
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
        <!-- initialSize:初始化时建立物理连接的个数。默认0,初始化发生在显示调用init方法,或者第一次getConnection时 -->
        <property name="initialSize" value="${jdbc.initialSize}" />
        <!-- maxActive:最大连接池数量,默认8 -->
        <property name="maxActive" value="${jdbc.maxActive}" />
        <!-- minIdle:最小连接池数量 ,默认8 -->
        <property name="minIdle" value="${jdbc.minIdle}" />
        <!-- maxWait:获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。 -->
        <property name="maxWait" value="${jdbc.maxWait}" />
        <!-- poolPreparedStatements:是否缓存preparedStatement,也就是PSCache。默认false,PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。 -->
        <property name="poolPreparedStatements" value="${jdbc.poolPreparedStatements}" />
        <!-- maxOpenPreparedStatements:要启用PSCache,必须配置大于0,默认-1。当大于0时,poolPreparedStatements自动触发修改为true。在Druid中,不会存在Oracle下PSCache占用内存过多的问题,可以把这个数值配置大一些,比如说100 -->
        <property name="maxOpenPreparedStatements" value="${jdbc.maxOpenPreparedStatements}" />
        <!-- validationQuery:用来检测连接是否有效的sql,要求是一个查询语句。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会起作用。 -->
        <property name="validationQuery" value="${jdbc.validationQuery}" />
        <!-- testOnBorrow:申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。默认true -->
        <property name="testOnBorrow" value="${jdbc.testOnBorrow}" />
        <!-- testOnReturn:归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。默认false -->
        <property name="testOnReturn" value="${jdbc.testOnReturn}" />
        <!-- testWhileIdle:建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。 -->
        <property name="testWhileIdle" value="${jdbc.testWhileIdle}" />
        <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
        <property name="timeBetweenEvictionRunsMillis" value="${jdbc.timeBetweenEvictionRunsMillis}" />
        <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
        <property name="minEvictableIdleTimeMillis" value="${jdbc.minEvictableIdleTimeMillis}" />
        <!-- filters:属性类型是字符串,通过别名的方式配置扩展插件,常用的插件有: 监控统计用的filter:stat 日志用的filter:log4j防御sql注入的filter:wall -->
        <property name="filters" value="${jdbc.filters}" />
        <!-- 这里配置提交方式,默认就是TRUE,可以不用配置 -->
        <property name="defaultAutoCommit" value="${jdbc.defaultAutoCommit}" />
    </bean>


</beans>

附:Druid的监控配置(web.xml)

<servlet> 
     <servlet-name>DruidStatView</servlet-name> 
     <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
     <servlet-name>DruidStatView</servlet-name> 
     <url-pattern>/druid/*</url-pattern> 
</servlet-mapping> 
<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>/public/*,*.js,*.css,/druid*,*.jsp,*.swf</param-value> 
  </init-param> 
  <init-param> 
   <param-name>principalSessionName</param-name> 
   <param-value>sessionInfo</param-value> 
  </init-param> 
  <init-param> 
   <param-name>profileEnable</param-name> 
   <param-value>true</param-value> 
  </init-param> 
 </filter> 
 <filter-mapping> 
  <filter-name>druidWebStatFilter</filter-name> 
  <url-pattern>/*</url-pattern> 
</filter-mapping>

数据源一般都是跟JdbcTemplate或ORM框架配合使用。 

 

转载于:https://www.cnblogs.com/myitnews/p/11555621.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值