【发布时间】:2015-04-29 18:35:13
【问题描述】:
我在 Vaadin, Spring 项目中配置了一个常用的声明式事务管理。我在我的 root-context.xml 中添加了<tx:annotation-driven transaction-manager="transactionManager" />,并在 pom.xml 中添加了所有其他必需的 maven 依赖项。
我的 Service 方法使用 @Transactional 注释,默认传播。
我想从 UI 端的一个方法调用两个服务方法,期望这两个服务方法参与单个事务,因为默认传播是 PROPAGATION_REQUIRED。但是这两种方法是独立地提交给数据库的。这意味着如果第二种方法失败,第一种方法无论如何都会提交给数据库。我没有使用 try{}catch{{ 块,所以任何 RuntimeException 都会冒泡。
附上弹簧原木。删除了一些行以减少行数
[qtp187048467-48] DEBUG o.s.j.d.DataSourceTransactionManager/getTransaction Creating new transaction with name [...UserServiceImpl.turnOnPwdResetFlag]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT; [qtp187048467-48] DEBUG o.s.j.d.DataSourceTransactionManager/doBegin Switching JDBC Connection [com.jolbox.bonecp.ConnectionHandle@42398a05] to manual commit [qtp187048467-48] DEBUG o.s.j.d.DataSourceTransactionManager/handleExistingTransaction Participating in existing transaction [qtp187048467-48] DEBUG o.s.jdbc.core.JdbcTemplate/doInStatement SQL update affected 1 rows [qtp187048467-48] DEBUG o.s.j.d.DataSourceTransactionManager/processCommit Initiating transaction commit [qtp187048467-48] DEBUG o.s.j.d.DataSourceTransactionManager/doCommit Committing JDBC transaction on Connection [com.jolbox.bonecp.ConnectionHandle@42398a05] [qtp187048467-48] DEBUG o.s.jdbc.datasource.DataSourceUtils/doReleaseConnection Returning JDBC Connection to DataSource ` ` [qtp187048467-48] DEBUG o.s.j.d.DataSourceTransactionManager/getTransaction Creating new transaction with name [...UserServiceImpl.turnOffPwdResetFlag]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT; [qtp187048467-48] DEBUG o.s.j.d.DataSourceTransactionManager/handleExistingTransaction Participating in existing transaction [qtp187048467-48] DEBUG o.s.jdbc.datasource.DataSourceUtils/doReleaseConnection Returning JDBC Connection to DataSource
【问题讨论】:
-
你能显示更多代码吗?
标签: java spring jdbc vaadin spring-transactions