• Spring中配置DataSource数据源的几种选择


    1. 从JNDI获得DataSource.
    2. 从第三方的连接池获得DataSource.
    3. 使用DriverManagerDataSource获得DataSource.

    一、从JNDI获得DataSource

    SpringJNDI数据源配置信息:

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

    jcptDataSourceJNDI是tomcat或者其他应用服务器配置的JNDI.

     

    关于JNDI的配置(tomcat):

    修改tomcat目录conf/context.xml文件或server.xml文件:

    <Resource name="jcptDataSourceJNDI" auth="Container"
    type="javax.sql.DataSource"
    maxActive="100"
    maxIdle="30"
    maxWait="10"
    username="tysp"
    password="12345678"
    driverClassName="oracle.jdbc.driver.OracleDriver"
    url="jdbc:oracle:thin:@192.168.1.35:1521:orcl"
      />
    

     

    在server.xml中加入<Resource>元素:<Resource>元素用来定义JNDI Resource。

    属性:描述

    name:指定Resource的JNDI名字

    auth:指定管理Resource的Manager,它有两个可选值:Container、Application

    type:指定Resource所属的Java类名

    <Resource>元素中加入<ResourceParams>元素:<ResourceParams>元素用来指定各种参数值(也可以像上面那样配置)

    属性:描述

    factory       指定生成的DataResource的factory类名

    maxActive     指定数据库连接池中处于活动状态的最大连接数目,0表示不受限制

    maxIdle       指定数据库连接池中处于空闲状态的最大连接数目,0表示不受限制

    maxWait       指定连接池中连接处于空闲状态的最长时间,超过会抛出异常,-1表示无限

    username      指定连接数据库的用户名

    password      指定连接数据库的口令

    driverClassName    指定连接数据库的JDBC驱动程序

    url             指定连接数据库的URL

    3、通过JNDI获取DataSource:

    Context context = new InitialContext();
    
    DataSource ds = (DataSource)context.lookup("java:comp/env/jcptDataSourceJNDI");
    

      

    4.在web.xml中加入(spring配置中可以不用)

     
    <resource-ref>
     
    <description>DB Connection</description>
     
    <res-ref-name>jdbc/TestDB</res-ref-name>
     
    <res-type>javax.sql.DataSource</res-type>
     
    <res-auth>Container</res-auth>
     
    </resource-ref>

    在web.xml中加入<resource-ref>元素:<resource-ref>元素表示在Web应用中引用JNDI资源  

    属性:描述

    description     对所引用的资源的说明

    res-ref-name    指定所引用资源的JNDI名字,与<Resource>元素中的name属性对应

    res-type        指定所引用资源的类名字,与<Resource>元素中的type属性对应

    res-auth        指定所引用资源的Manager,与<Resource>元素中的auth属性对应

    更多信息:可以参考http://blog.csdn.net/cyxlzzs/article/details/7352837

    二、从第三方的连接池获得DataSource

    Spring在第三方依赖包中包含了两个数据源的实现类包,其一是Apache的DBCP,其二是 C3P0

    1) DBCP类包位于 /lib/jakarta-commons/commons-dbcp.jar,DBCP是一个依赖 Jakarta commons-pool对象池机制的数据库连接池,

    所以在类路径下还必须包括/lib/jakarta- commons/commons-pool.jar。

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">  
          <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"></property>  
          <property name="url" value="jdbc:oracle:thin:@192.168.1.35:1521:orcl"></property>  
          <property name="username" value="or_meal"></property>  
          <property name="password" value="or_meal"></property>  
          <property name="maxActive" value="100"></property>  
          <property name="maxIdle" value="30"></property>  
          <property name="maxWait" value="10"></property>  
          <property name="defaultAutoCommit" value="false"></property>  
      </bean>  
         
      <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean" >  
          <property name="dataSource">  
              <ref bean="dataSource"  />  
          </property>  
          <property name="hibernateProperties">  
              <props>  
                  <prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect  
                  </prop>  
                  <prop key="show_sql">true</prop>  
                  <prop key="format_sql">true</prop>  
              </props>  
          </property>  
          <property name="mappingResources">  
          <list></list>  
          </property>  
      </bean>
    

    BasicDataSource提供了close()方法关闭数据源,所以必须设定destroy-method=”close”属性,

    以便Spring容器关闭时,数据源能够正常关闭。除以上必须的数据源属性外,还有一些常用的属性:

    defaultAutoCommit:设置从数据源中返回的连接是否采用自动提交机制,默认值为 true;

    defaultReadOnly:设置数据源是否仅能执行只读操作, 默认值为 false;

    maxActive:最大连接数据库连接数,设置为0时,表示没有限制;

    maxIdle:最大等待连接中的数量,设置为0时,表示没有限制;

    maxWait:最大等待秒数,单位为毫秒, 超过时间会报出错误信息;

    validationQuery:用于验证连接是否成功的查询SQL语句,SQL语句必须至少要返回一行数据;

    removeAbandoned:是否自我中断,默认是 false ;

    removeAbandonedTimeout:几秒后数据连接会自动断开,在removeAbandoned为true,提供该值;

    logAbandoned:是否记录中断事件, 默认为 false;

    2)C3P0是一个开放源代码的JDBC数据源实现项目,C3P0类包位于Spring中lib/c3p0/c3p0-0.9.1.2.jar

     

    <bean  
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" >  
        <property name="locations">  
            <value>classpath:jdbc.properties</value>  
        </property>  
    </bean>  
         
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method=”close”>  
        <property name="driverClass"value="${jdbc.driverClassName}" />  
        <property name="jdbcUrl"value="${jdbc.url}" />  
        <property name="user"value="${jdbc.username}" />  
        <property name="password"value="${jdbc.password}" />  
    </bean >
    

     

    三、使用DriverManagerDataSource获得DataSource

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">  
        <property name="driverClassName">  
            <value>oracle.jdbc.driver.OracleDriver</value>  
        </property>  
        <property name="url">  
            <value>jdbc:oracle:thin:@192.168.1.35:orcl</value>  
        </property>  
        <property name="username">  
            <value>or_meal</value>  
        </property>  
        <property name="password">  
            <value>or_meal</value>  
        </property>  
    </bean>  
         
    <bean id="dataBean" class="onlyfun.caterpillar.DataBean">   
        <property name="dataSource">   
            <ref bean="dataSource" />   
        </property>   
    </bean>
    

    DriverManagerDataSource建立连接是只要有连接就新建一个connection,根本没有连接池的作用  

      

  • 相关阅读:
    2017-12 CDQZ集训(已完结)
    BZOJ1492 货币兑换 CDQ分治优化DP
    BZOJ2001 [Hnoi2010]City 城市建设 CDQ分治
    树套树小结
    跑路了
    NOI2020 游记
    半平面交模板
    Luogu 3245 大数
    Luogu 3246 序列
    test20190408(十二省联考)
  • 原文地址:https://www.cnblogs.com/tanlei-sxs/p/9928827.html
Copyright © 2020-2023  润新知