在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) {
// 保存用户操作
}
});
}
这些方法可以根据具体的需求选择使用,其中基于注解的声明式事务管理是最为常用和推荐的方法。