我已经在Vaadin、Spring项目中配置了常规的声明式事务管理。我在root-context.xml中添加了
我想从UI端的一个方法中调用两个Service方法,期望这两个Service方法参与到单个事务中,因为默认传播级别是
附上了Spring日志。为了减少行数,删除了一些行。
<tx:annotation-driven transaction-manager="transactionManager" />
,并在pom中添加了所有其他必需的maven依赖项。我的Service方法使用默认传播级别注释了@Transactional
。我想从UI端的一个方法中调用两个Service方法,期望这两个Service方法参与到单个事务中,因为默认传播级别是
PROPAGATION_REQUIRED
。但是这两个方法是独立地提交到数据库的。这意味着如果第二个方法失败,第一个方法已经提交到数据库了。我没有使用try{}catch{{
块,所以任何RuntimeException都会被抛出。附上了Spring日志。为了减少行数,删除了一些行。
[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