文档章节

Spring配置数据源的常用方式

桃源闲人
 桃源闲人
发布于 2015/02/26 23:56
字数 1225
阅读 287
收藏 19

Spring配置数据源的常用方式

  1. 在应用程序中配置数据源
    (1).在classpath中创建连接参数的配置文件,如db-config.properties,内容如下:
    driverClass=com.mysql.jdbc.Driver  
    url=jdbc:mysql://localhost:3306/zzp  
    username=root  
    password=admin

    (2).在Spring的配置文件中引入参数配置文件,代码如下:

    <!-- 配置spring资源文件 -->  
        <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">    
            <property name="locations">    
                <list>    
                    <value>/WEB-INF/config/db-config.properties</value>    
                </list>    
            </property>    
        </bean>

    (3).配置数据源(这里有三种方式,jdbc、dbcp、c3p0)

        A.JDBC的配置方式,该方式区别与其他两种方式在于这种方式使用的是JDBC连接数据库,并没有使用连接池,所以效率和性能方面不及其他两种,该种方式的配置方法:
            
    <!-- 数据源 -->  
        <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">  
            <property name="driverClassName"  
                value="${driverClass}">  
            </property>  
            <property name="url" value="${url}">  
            </property>  
            <property name="username" value="${username}"></property>  
            <property name="password" value="${password}"></property>  
        </bean>

        B.使用dbcp的配置(参考文章):

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">  
            <property name="driverClassName" value="referredDriver" />  
            <property name="url" value="referredDBURL" />  
            <property name="username" value="DBLoginUser" />  
            <property name="password" value="DBLoginUserPassword" />  
            <property name="initialSize" value="5" />  
            <property name="maxIdle" value="30" />  
            <property name="minIdle" value="5" />  
            <property name="maxActive" value="15" />  
            <property name="removeAbandoned" value="true" />  
            <!-- 自动回收超时时间(以秒数为单位) -->  
            <property name="removeAbandonedTimeout" value="300" />  
            <!--超时等待时间以毫秒为单位 -->  
            <property name="maxWait" value="3000" />  
            <property name="defaultAutoCommit" value="false" />  
            <property name="validationQuery">  
                <value>SELECT 1</value>  
            </property>  
            <property name="testOnBorrow">  
                <value>true</value>  
            </property>  
            <property name="testOnReturn">  
                <value>false</value>  
            </property>  
        </bean>

    C.使用C3P0方式配置(参考文章)

    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">    
              <!-- 用户名-->    
              <property name="user" value="${username}"/>    
              <!-- 用户密码-->    
              <property name="password" value="${password}"/>    
              <property name="driverClass" value="${driver_class}"/>    
              <property name="jdbcUrl" value="${url}"/>    
        
               <!--连接池中保留的最大连接数。默认值: 15 -->     
              <property name="maxPoolSize" value="20"/>    
              <!-- 连接池中保留的最小连接数,默认为:3-->    
              <property name="minPoolSize" value="2"/>    
              <!-- 初始化连接池中的连接数,取值应在minPoolSize与maxPoolSize之间,默认为3-->    
              <property name="initialPoolSize" value="2"/>    
        
              <!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。默认值: 0 -->     
              <property name="maxIdleTime">60</property>    
                  
              <!-- 当连接池连接耗尽时,客户端调用getConnection()后等待获取新连接的时间,超时后将抛出SQLException,如设为0则无限期等待。单位毫秒。默认: 0 -->     
              <property name="checkoutTimeout" value="3000"/>    
                  
              <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。默认值: 3 -->     
              <property name="acquireIncrement" value="2"/>    
        
             <!--定义在从数据库获取新连接失败后重复尝试的次数。默认值: 30 ;小于等于0表示无限次-->     
              <property name="acquireRetryAttempts" value="0"/>    
        
              <!--重新尝试的时间间隔,默认为:1000毫秒-->     
              <property name="acquireRetryDelay" value="1000" />    
        
              <!--关闭连接时,是否提交未提交的事务,默认为false,即关闭连接,回滚未提交的事务 -->     
              <property name="autoCommitOnClose">false</property>    
        
              <!--c3p0将建一张名为Test的空表,并使用其自带的查询语句进行测试。如果定义了这个参数那么属性preferredTestQuery将被忽略。你不能在这张Test表上进行任何操作,它将只供c3p0测试使用。默认值: null -->     
              <property name="automaticTestTable">Test</property>    
        
              <!--如果为false,则获取连接失败将会引起所有等待连接池来获取连接的线程抛出异常,但是数据源仍有效保留,并在下次调用getConnection()的时候继续尝试获取连接。如果设为true,那么在尝试获取连接失败后该数据源将申明已断开并永久关闭。默认: false-->     
              <property name="breakAfterAcquireFailure">false</property>    
        
              <!--每60秒检查所有连接池中的空闲连接。默认值: 0,不检查 -->     
              <property name="idleConnectionTestPeriod">60</property>    
              <!--c3p0全局的PreparedStatements缓存的大小。如果maxStatements与maxStatementsPerConnection均为0,则缓存不生效,只要有一个不为0,则语句的缓存就能生效。如果默认值: 0-->     
              <property name="maxStatements">100</property>    
              <!--maxStatementsPerConnection定义了连接池内单个连接所拥有的最大缓存statements数。默认值: 0 -->     
              <property name="maxStatementsPerConnection"></property>    
         </bean>

     

  2. 在Web服务器中配置数据源
    1.以Tomcat为例配置数据源需要将conf/context.xml中添加如下代码:

    <Resource name="jndi/myDataSource"     
                auth="Container"     
                type="javax.sql.DataSource"     
                driverClassName="com.mysql.jdbc.Driver"     
                url="jdbc:mysql://localhost:3306/zwkj"     
                username="root"     
                password="root123!"     
                maxActive="20"     
                maxIdle="10"     
                maxWait="10000"/>

    2.在客户端应用程序中通过JNDI的方式获取数据源,以Spring为例,配置如下:

    <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">  
            <property name="jndiName">  
                <value>java:comp/env/jndi/myDataSource</value>  
            </property>  
        </bean>

        出以上方式外还可以使用Spring的jee标签配置

    <jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jndi/myDataSource" />

        注意:上面两种方式如果配置成后不能正常获取数据源,可在web.xml文件中添加如下代码:

    <resource-ref>  
         <description>JNDI DataSource</description>  
         <res-ref-name>jndi/myDataSource</res-ref-name>  
         <res-type>javax.sql.DataSource</res-type>  
         <res-auth>Container</res-auth>  
    </resource-ref>

        本人在tomcat8下并未在web.xml文件中添加上述代码,可以测试成功,早起在Tomcat6下测试好像不加会报错。



                          》》》》》》》》》》》》》》》》转载请注明出处《《《《《《《《《《《《《《《《

© 著作权归作者所有

共有 人打赏支持
桃源闲人
粉丝 8
博文 10
码字总数 5115
作品 0
深圳
高级程序员
SSH框架之Spring4专题4:Spring与DAO

本专题内容主要包含两部分:Spring所使用的操作数据库的技术之一,JDBC模版的使用;另一部分则为Spring对于事务的管理。 Spring与Dao部分,是Spring的两大核心技术loC与AOP的经典应用体现: ...

糖醋白糖
06/26
0
0
Spring DataSource

何为DataSource DataSource 接口是 JDBC 2.0 API 中的新增内容,它提供了连接到数据源的另一种方法。 作为 工具的替代项, 对象是获取连接的首选方法。 实现 DataSource 接口的对象通常在基于...

冰雷卡尔
2012/06/04
0
1
Spring注解事务@Transactional

在声明式事务中我们比较常用的有两种:一种是基于tx和aop命名空间的xml文件。第二种是基于@Transactional的注解。两种都比较常用。前一种只要定义好规范就可以按照规范对方法进行命名。第二种...

u014231523
2017/02/27
0
0
SpringBoot整合Mybatis+Druid

1.SpringBoot 作为一款约定大于配置的微服务框架,得到了业界的大量推广和应用。对SpringBoot的学习使用可以有效的帮助开发简化开发流程,配置过程,部署过程。 2.数据库的交互是开发过程中很...

扁桃体准备发言了
08/16
0
0
spring-boot-starter-mongodb-pool

在日常工作中,我们通过Spring Data Mongodb来操作Mongodb数据库,在Spring Boot中只需要引入spring-boot-starter-data-mongodb即可。 很多时候我们往往需要操作多个数据库(微服务架构下一个...

尹吉欢
04/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Swift-系统默认UICollectionViewController的基本用法

不用xib创建时,需要重写 override init(collectionViewLayout layout: UICollectionViewLayout){} 在调用时需传 UICollectionViewLayout值,不然就会报错 let layout = UICollectionViewFlow......

west_zll
20分钟前
2
0
Spring Boot 最核心的 3 个注解详解

最近面试一些 Java 开发者,他们其中有些在公司实际用过 Spring Boot, 有些是自己兴趣爱好在业余自己学习过。然而,当我问他们 Spring Boot 最核心的 3 个注解是什么,令我失望的是鲜有人能答...

Java技术栈
21分钟前
5
0
Sqoop 增量导入导出及Job操作示例

增量导入 递增列的增量导入append # 第一次导入[root@node222 ~]# /usr/local/sqoop-1.4.7/bin/sqoop import --connect jdbc:mysql://192.168.0.200:3306/sakila?useSSL=false --table ac......

PeakFang-BOK
27分钟前
3
0
Thread中断的理解

★中断的理解:1)中断可以理解为线程的一个标识位属性;2)表示一个运行中的线程是否被其他线程进行了中断操作 中断好比其他线程向该线程打了个招呼,其他线程通过调用该线程的interrupt()...

karma123
35分钟前
2
0
App store 侵权投诉

App Store Content Dispute 侵权投诉 https://www.apple.com/legal/internet-services/itunes/appstorenotices/#?lang=zh...

壹峰
59分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部