首页 > 代码库 > spring与数据库之间的配置

spring与数据库之间的配置

spring 配置数据源的三种方式

1、使用org.springframework.jdbc.datasource.DriverManagerDataSource
配置文件:

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
              <property name="driverClassName"><value>${jdbc.driverClassName}</value></property>
              <property name="url"><value>${jdbc.url}</value></property>
              <property name="username"><value>${jdbc.username}</value></property>
              <property name="password"><value>${jdbc.password}</value></property>
       </bean>

说明:配置比较的简单,spring自己带的数据源。但是:

image

2、使用org.apache.commons.dbcp.BasicDataSource
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
              <property name="driverClassName">
                     <value>oracle.jdbc.driver.OracleDriver</value>
              </property>
              <property name="url">
                     <value>jdbc:oracle:thin:@localhost:1521:orcl</value>
              </property>
              <property name="username">
                     <value>test</value>
              </property>
              <property name="password">
                     <value>test</value>
              </property>
              <property name="maxActive">
                     <value>255</value>
              </property>
              <property name="maxIdle">
                     <value>2</value>
              </property>
              <property name="maxWait">
                     <value>120000</value>
              </property>
       </bean>

说明:这是一种推荐说明的数据源配置方式,它真正使用了连接池技术。但是需要引入额外的jar,不过对于需要使用数据库连接池的多并发应用系统,还是比较划得来的。

但是:DBCP在实践中存在BUG,在某些种情会产生很多空连接不能释放,Hibernate3.0已经放弃了对其的支持。

2.1 这种的配置方式还有一个比较的有名:c3p0 具体的配置方式是:

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

说明:需要额外的包,C3P0比较耗费资源,效率方面可能要低一点。

2.3

Proxool的负面评价较少,现在比较推荐它,而且它还提供即时监控连接池状态的功能,便于发现连接泄漏的情况。
配置如下:
1、在spring配置文件中,一般在applicationContext.xml中
     <bean id="proxoolDataSource" class="org.logicalcobwebs.proxool.ProxoolDataSource">
            <property name="driver" value="http://www.mamicode.com/${jdbc.connection.driverClassName}"/>
            <property name="driverUrl" value="http://www.mamicode.com/${jdbc.connection.url}"/>
            <property name="user" value="http://www.mamicode.com/${jdbc.connection.username}"/>
            <property name="password" value="http://www.mamicode.com/${jdbc.connection.password}"/>
            <!-- 测试的SQL执行语句 -->
           <property name="houseKeepingTestSql" value="http://www.mamicode.com/${proxool.houseKeepingTestSql}"/>
            <!-- 最少保持的空闲连接数 (默认2个) -->
             <property name="prototypeCount" value="http://www.mamicode.com/${proxool.prototypeCount}"/>
            <!-- proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁 默认30秒) -->
            <property name="houseKeepingSleepTime" value="http://www.mamicode.com/${proxool.hourseKeepingSleepTime}"/>
            <!-- 最大活动时间(超过此时间线程将被kill,默认为5分钟) -->
             <property name="maximumActiveTime" value="http://www.mamicode.com/${proxool.maximumActiveTime}"/>
            <!-- 连接最长时间(默认为4个小时) -->
            <property name="maximumConnectionLifetime" value="http://www.mamicode.com/${proxool.maximumConnectionLifetime}"/>
            <!-- 最小连接数 (默认2个) -->
            <property name="minimumConnectionCount" value="http://www.mamicode.com/${proxool.minimumConnectionCount}"/>
            <!-- 最大连接数 (默认5个) -->
            <property name="maximumConnectionCount" value="http://www.mamicode.com/${proxool.maximumConnectionCount}"/>
            <!-- -->
            <property name="statistics" value="http://www.mamicode.com/${proxool.statistics}"/>
            <!-- 别名 -->
             <property name="alias" value="http://www.mamicode.com/${proxool.alias}"/>
            <!-- -->
            <property name="simultaneousBuildThrottle" value="http://www.mamicode.com/${proxool.simultaneous-build-throttle}"/>
     </bean>
     然后注入到sessionFactory中
     <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
           <property name="dataSource" ref="proxoolDataSource"/>
     </bean>
Porxool 配置文件
--==--==--==--==--==<proxool.xml>==--==--==--==--==--==--==
<?xml version="1.0" encoding="UTF-8"?>
<proxool>
      <alias>WMS</alias>
      <driver-url>jdbc:postgresql://192.168.210.184:5432/wms</driver-url>
      <driver-class>org.postgresql.Driver</driver-class>
      <driver-properties>
             <property name="user" value="http://www.mamicode.com/wms_user" />
             <property name="password" value="http://www.mamicode.com/wms" />
      </driver-properties>
      <minimum-connection-count>2</minimum-connection-count>
      <maximum-connection-count>40</maximum-connection-count>
      <simultaneous-build-throttle>20</simultaneous-build-throttle>
      <prototype-count>2</prototype-count>
      <house-keeping-test-sql>select CURRENT_DATE</house-keeping-test-sql>
</proxool>
--==--==--==--==--==<proxool.xml>==--==--==--==--==--==--==
配置说明:
alias                                          -〉数据库连接别名(程序中需要使用的名称)
driver-url                                   -〉数据库驱动
driver-class                                -〉驱动程序类
driver-properties                        -〉联机数据库的用户和密码
minimum-connection-count          -〉最小连接数量,建议设置0以上,保证第一次连接时间
maximum-connection-count         -〉最大连接数量,如果超过最大连接数量则会抛出异常。连接数设置过多,服务器CPU和内存性能消耗很
大。
simultaneous-build-throttle          -〉同时最大连接数
prototype-count                          -〉一次产生连接的数量。
                                                 例:如果现在prototype-count设置为4个,但是现在已经有2个可以获得的连接,那么
将会试图再创建2个连接。
                                                  但不能超过最大连接数。
maximum-active-time                 -〉连接最大时间活动 默认5分钟
maximum-connection-lifetime      -〉连接最大生命时间 默认4小时

3、使用org.springframework.jndi.JndiObjectFactoryBean

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

说明:JndiObjectFactoryBean 能够通过JNDI获取DataSource。

 

4. 另外就是spring集成hibernate 的配置:

image

<!--<start id="bean_sessionFactory" />-->
<bean id="sessionFactory"
  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  <property name="dataSource" ref="dataSource" />
  <property name="mappingResources">
   <list>
    <value>Spitter.hbm.xml</value>
   </list>
  </property>
  <property name="hibernateProperties">
   <props>
    <prop key="dialect">org.hibernate.dialect.HSQLDialect</prop>
   </props>
  </property>
</bean>
<!--<end id="bean_sessionFactory" />-->

<!--<start id="bean_hibernateTemplate" />-->
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
  <property name="sessionFactory" ref="sessionFactory" />
</bean>
<!--<end id="bean_hibernateTemplate" />—>

<context:component-scan base-package="com.habuma.spitter.persistence" />

spring与数据库之间的配置