http://www.iteye.com/problems/2951
Spring+JDBC事务配置
悬赏:10 发布时间:2008-08-19 提问人:charity_lan (初级程序员)
猎头职位:- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
- <beans>
- <bean id="dataSource"
- class="org.apache.commons.dbcp.BasicDataSource"
- destroy-method="close">
- <property name="driverClassName"
- value="com.mysql.jdbc.Driver" />
- <property name="url"
- value="jdbc:mysql://localhost:3306/mucun?useUnicode=true&characterEncoding=utf-8&useOldAliasMetadataBehavior=true"></property>
- <property name="username" value="root"></property>
- <property name="password" value=""></property>
- <property name="validationQuery" value="select 1" />
- <property name="maxIdle" value="5" />
- <property name="maxWait" value="100" />
- <property name="maxActive" value="20" />
- </bean>
- <bean id="transactionManager"
- class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
- <property name="dataSource">
- <ref local="dataSource" />
- </property>
- </bean>
- <bean id="abstractTxDefine" lazy-init="true"
- class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
- <property name="transactionManager">
- <ref bean="transactionManager" />
- </property>
- <property name="transactionAttributes">
- <props>
- <prop key="*">PROPAGATION_REQUIRED,-Exception</prop>
- </props>
- </property>
- </bean>
- <bean id="sqlMapClient"
- class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
- <property name="configLocation">
- <value>WEB-INF/classes/sqlMapConfig.xml</value>
- </property>
- <property name="dataSource">
- <ref bean="dataSource"></ref>
- </property>
- </bean>
- <bean id="sqlMapDao"
- class="com.charity.common.dao.impl.SqlMapDaoUtilsImp">
- <property name="sqlMapClient" ref="sqlMapClient"/>
- </bean>
- <bean id="jdbcDao" class="com.charity.common.dao.impl.JdbcDaoUtilsImp">
- <property name="dataSource">
- <ref local="dataSource" />
- </property>
- </bean>
- <bean id="serviceManager" lazy-init="true"
- class="com.charity.common.service.impl.ServiceManager">
- <property name="sqlMapDao">
- <ref bean="sqlMapDao" />
- </property>
- <property name="jdbcDao">
- <ref bean="jdbcDao" />
- </property>
- </bean>
- <bean id="multiTableFormdataService" parent="abstractTxDefine">
- <property name="target">
- <bean parent="serviceManager"
- class="com.charity.common.service.impl.MultiTableFormdataService">
- </bean>
- </property>
- </bean>
- </beans>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName"
value="com.mysql.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://localhost:3306/mucun?useUnicode=true&characterEncoding=utf-8&useOldAliasMetadataBehavior=true"></property>
<property name="username" value="root"></property>
<property name="password" value=""></property>
<property name="validationQuery" value="select 1" />
<property name="maxIdle" value="5" />
<property name="maxWait" value="100" />
<property name="maxActive" value="20" />
</bean>
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource">
<ref local="dataSource" />
</property>
</bean>
<bean id="abstractTxDefine" lazy-init="true"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIRED,-Exception</prop>
</props>
</property>
</bean>
<bean id="sqlMapClient"
class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation">
<value>WEB-INF/classes/sqlMapConfig.xml</value>
</property>
<property name="dataSource">
<ref bean="dataSource"></ref>
</property>
</bean>
<bean id="sqlMapDao"
class="com.charity.common.dao.impl.SqlMapDaoUtilsImp">
<property name="sqlMapClient" ref="sqlMapClient"/>
</bean>
<bean id="jdbcDao" class="com.charity.common.dao.impl.JdbcDaoUtilsImp">
<property name="dataSource">
<ref local="dataSource" />
</property>
</bean>
<bean id="serviceManager" lazy-init="true"
class="com.charity.common.service.impl.ServiceManager">
<property name="sqlMapDao">
<ref bean="sqlMapDao" />
</property>
<property name="jdbcDao">
<ref bean="jdbcDao" />
</property>
</bean>
<bean id="multiTableFormdataService" parent="abstractTxDefine">
<property name="target">
<bean parent="serviceManager"
class="com.charity.common.service.impl.MultiTableFormdataService">
</bean>
</property>
</bean>
</beans>
class MultiTableFormdataService extends ServiceManager{
实现业务代码
}
class ServiceManager {
jdbcDao;
sqlMapDao;
}
问题:
结果是在MultiTableFormdataService 类中多表保存,并没有因为某条语句错误而产生事务回滚。
不知道问什么,请指教
采纳的答案
2008-08-19 lggege (架构师)
- <bean id="abstractTxDefine" lazy-init="true"
- class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<bean id="abstractTxDefine" lazy-init="true"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
- <bean id="multiTableFormdataService" parent="abstractTxDefine">
<bean id="multiTableFormdataService" parent="abstractTxDefine">
所以, 已经给multiTableFormdataService加了事务.
建议LZ查看自己mysql的engine是否不是InnoDB的.
- show table status from table_name;