zoukankan      html  css  js  c++  java
  • Spring配置DataSource数据源

    在Spring框架中有例如以下3种获得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或者其它应用server配置的JNDI.

    2、关于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,根本没有连接池的作用

  • 相关阅读:
    IXmlSerializable With WCFData Transfer in Service Contracts
    Difference Between XmlSerialization and BinarySerialization
    Using XmlSerializer (using Attributes like XmlElement , XmlAttribute etc ) Data Transfer in Service Contracts
    Introducing XML Serialization
    Version Tolerant Serialization
    Which binding is bestWCF Bindings
    Data Transfer in Service Contracts
    DataContract KnownTypeData Transfer in Service Contracts
    Using the Message ClassData Transfer in Service Contracts
    DataContract POCO SupportData Transfer in Service Contracts
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4211846.html
Copyright © 2011-2022 走看看