• 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="${jdbc.driverClassName}"/>
            <!-- 指定连接数据库的URL-->
            <property name="jdbcUrl" value="${jdbc.url}"/>
            <!-- 指定连接数据库的用户名-->
            <property name="user" value="${jdbc.username}"/>
            <!-- 指定连接数据库的密码-->
            <property name="password" value="${jdbc.password}"/>
            <!-- 指定连接池中保留的最大连接数. Default:15-->
            <property name="maxPoolSize" value="${jdbc.maxPoolSize}"/>
            <!-- 指定连接池中保留的最小连接数-->
            <property name="minPoolSize" value="${jdbc.minPoolSize}"/>
            <!-- 指定连接池的初始化连接数  取值应在minPoolSize 与 maxPoolSize 之间.Default:3-->
            <property name="initialPoolSize" value="${jdbc.initialPoolSize}"/>
            <!-- 最大空闲时间,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}"/>
            <!-- 每60秒检查所有连接池中的空闲连接.Default:0 -->
            <property name="idleConnectionTestPeriod" value="${jdbc.idleConnectionTestPeriod}"/>
        </bean>

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

    2.3

    Proxool的负面评价较少,现在比较推荐它,而且它还提供即时监控连接池状态的功能,便于发现连接泄漏的情况。
    配置如下:
    1、在spring配置文件中,一般在applicationContext.xml中
         <bean id="proxoolDataSource" class="org.logicalcobwebs.proxool.ProxoolDataSource">
                <property name="driver" value="${jdbc.connection.driverClassName}"/>
                <property name="driverUrl" value="${jdbc.connection.url}"/>
                <property name="user" value="${jdbc.connection.username}"/>
                <property name="password" value="${jdbc.connection.password}"/>
                <!-- 测试的SQL执行语句 -->
               <property name="houseKeepingTestSql" value="${proxool.houseKeepingTestSql}"/>
                <!-- 最少保持的空闲连接数 (默认2个) -->
                 <property name="prototypeCount" value="${proxool.prototypeCount}"/>
                <!-- proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁 默认30秒) -->
                <property name="houseKeepingSleepTime" value="${proxool.hourseKeepingSleepTime}"/>
                <!-- 最大活动时间(超过此时间线程将被kill,默认为5分钟) -->
                 <property name="maximumActiveTime" value="${proxool.maximumActiveTime}"/>
                <!-- 连接最长时间(默认为4个小时) -->
                <property name="maximumConnectionLifetime" value="${proxool.maximumConnectionLifetime}"/>
                <!-- 最小连接数 (默认2个) -->
                <property name="minimumConnectionCount" value="${proxool.minimumConnectionCount}"/>
                <!-- 最大连接数 (默认5个) -->
                <property name="maximumConnectionCount" value="${proxool.maximumConnectionCount}"/>
                <!-- -->
                <property name="statistics" value="${proxool.statistics}"/>
                <!-- 别名 -->
                 <property name="alias" value="${proxool.alias}"/>
                <!-- -->
                <property name="simultaneousBuildThrottle" value="${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="wms_user" />
                 <property name="password" value="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" />

  • 相关阅读:
    【hdu2825-Wireless Password】AC自动机+DP
    kuangbin专题十二 HDU1029 Ignatius and the Princess IV (水题)
    Codeforces Round #501 (Div. 3) 1015D Walking Between Houses
    Codeforces Round #501 (Div. 3) 1015A Points in Segments (前缀和)
    POJ2503 Babelfish
    POJ2531 Network Saboteur
    POJ3278 Catch That Cow
    POJ2488 A Knight's Journey
    POJ2456 Aggressive cows
    HDU1425 A Chess Game
  • 原文地址:https://www.cnblogs.com/zhailzh/p/4052487.html
Copyright © 2020-2023  润新知