关于Spring控制事务的有关问题,多谢帮忙!
关于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,有喜悦也有痛苦。。
做了一个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>