当前位置: 代码迷 >> Java Web开发 >> 关于Spring控制事务的有关问题,多谢帮忙!
  详细解决方案

关于Spring控制事务的有关问题,多谢帮忙!

热度:137   发布时间:2016-04-17 01:15:39.0
关于Spring控制事务的问题,谢谢帮忙!!
做了一个ssh的小项目,事务控制是通过spring在配置文件里统一控制的。但是发现运行一段时间后就出现“java.sql.SQLException: ORA-00018: 超出最大会话数”问题。
我怀疑是dao中的方法没有被事务控制,以至于session没有释放,导致问题。
  以下是我spring中关于数据库的配置,希望大家能提些意见。
  我先对配置进行一下说明。有一个BaseService所有的service包括(ServicesImpl等都继承这个类),BaseService的作用是get和set“DAO”,即取得DAO的bean。
  我对各个service的事务控制是起作用的,主要用来控制多个相关存操作的事务。 所以我会对dao也会起到事务控制。 
  我的代码中经常出现这样的代码service.getEmployeeDAO().save(name)。这样的操作是不是通过这个spring配置控制了事务。
  总之,我的程序运行一阶段就出现session不够的情况。大家对我的配置痛批一顿吧,谢谢了。初次使用spring,有喜悦也有痛苦。。
XML code
<?xml version="1.0" encoding="UTF-8"?><!-- 数据库相关 --><beans xmlns="http://www.springframework.org/schema/beans"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"    default-autowire="byName">    <!-- 数据库的hibernate配置 -->    <bean id="dataSource"        class="com.mchange.v2.c3p0.ComboPooledDataSource"        destroy-method="close">        <property name="driverClass"            value="oracle.jdbc.driver.OracleDriver">        </property>        <property name="jdbcUrl"            value="jdbc:oracle:thin:@12.61.14.61:1521:KPI">        </property>        <property name="user" value="user"></property>        <property name="password" value="pass"></property>        <property name="maxPoolSize" value="40" />        <!-- 指定连接数据库连接池的最小连接数 -->        <property name="minPoolSize" value="1" />        <!-- 指定连接数据库连接池的初始化连接数 -->        <property name="initialPoolSize" value="1" />        <!-- 指定连接数据库连接池的连接的最大空闲时间 -->        <property name="maxIdleTime" value="20" />    </bean>    <bean id="sessionFactory"        class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">        <property name="dataSource">            <ref bean="dataSource"></ref>        </property>        <property name="hibernateProperties">            <props>                <prop key="hibernate.dialect">                    org.hibernate.dialect.Oracle9Dialect                </prop>                <prop key="hibernate.show_sql">false</prop>                <prop key="format_sql">true</prop>            </props>        </property>        <property name="mappingResources">            <list>                <value>                    com/rdc/hibernate/bean/Processkpcontract.hbm.xml                </value>                                 ...........            </list>        </property>    </bean>    <!-- 声明services -->    <bean id="service" class="com.rdc.struts.service.ServicesImpl"></bean>    <bean id="serviceC" class="com.rdc.struts.service.ServicesImpl_C"></bean>    <bean id="serviceL" class="com.rdc.struts.service.ServicesImpl_L"></bean>    <bean id="serviceZ" class="com.rdc.struts.service.ServicesImpl_Z"></bean>    <bean id="serviceF" class="com.rdc.struts.service.ServicesImpl_F"></bean>    <bean id="transactionManager"        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">        <property name="dataSource" ref="dataSource" />    </bean>    <!-- 事务拦截器 -->    <bean id="transactionInterceptor"        class="org.springframework.transaction.interceptor.TransactionInterceptor">        <property name="transactionManager" ref="transactionManager" />        <property name="transactionAttributes">            <props>                <prop key="insert*">PROPAGATION_REQUIRED</prop>                <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>                <prop key="*">PROPAGATION_REQUIRED</prop>            </props>        </property>    </bean>    <bean        class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">        <property name="beanNames">            <list>                <value>service</value>                <value>serviceC</value>                <value>serviceL</value>                <value>serviceZ</value>                <value>serviceF</value>            </list>        </property>        <property name="interceptorNames">            <value>transactionInterceptor</value>        </property>        <property name="proxyTargetClass">            <value>true</value>        </property>    </bean>    <bean name="daoTemplate" abstract="true">        <property name="sessionFactory" ref="sessionFactory" />    </bean>        .........................    </beans>
  相关解决方案