在Spring中,開啟事務的方法有以下幾種:
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*" propagation="REQUIRED" />
</tx:attributes>
</tx:advice>
<aop:config>
<aop:advisor advice-ref="txAdvice" pointcut="execution(* com.example.service.*.*(..))" />
</aop:config>
@Transactional
public void saveUser(User user) {
// 保存用戶操作
}
@Autowired
private PlatformTransactionManager transactionManager;
public void saveUser(User user) {
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
TransactionStatus status = transactionManager.getTransaction(def);
try {
// 保存用戶操作
transactionManager.commit(status);
} catch (RuntimeException e) {
transactionManager.rollback(status);
throw e;
}
}
@Autowired
private TransactionTemplate transactionTemplate;
@Transactional
public void saveUser(User user) {
transactionTemplate.execute(new TransactionCallbackWithoutResult() {
protected void doInTransactionWithoutResult(TransactionStatus status) {
// 保存用戶操作
}
});
}
這些方法可以根據具體的需求選擇使用,其中基于注解的聲明式事務管理是最為常用和推薦的方法。