import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.stereotype.Service;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.DefaultTransactionDefinition;
import org.springframework.web.client.RestTemplate;
@Service
public class Test {
@Autowired
private JdbcTemplate jdbcTemplate;
@Autowired
private DataSourceTransactionManager transactionManager;
/**
* 开启事务
*
* @return
*/
public TransactionStatus begin() {
return beginTransaction(transactionManager);
}
/**
* 开启事务
*/
public TransactionStatus beginTransaction(DataSourceTransactionManager transactionManager) {
DefaultTransactionDefinition def = new DefaultTransactionDefinition();// 事务定义类
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
TransactionStatus status = transactionManager.getTransaction(def);// 返回事务对象
return status;
}
/**
* 提交事务
*
* @param status
*/
public void commit(TransactionStatus status) {
commitTransaction(transactionManager, status);
}
/**
* 提交事务
*
* @param transactionManager
* @param status
*/
public void commitTransaction(DataSourceTransactionManager transactionManager, TransactionStatus status) {
transactionManager.commit(status);
}
/**
* application
*
* @return
*/
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
/**
* 回滚事务
*
* @param status
*/
public void rollback(TransactionStatus status) {
rollbackTransaction(transactionManager, status);
}
/**
* 事务回滚
*
* @param transactionManager
* @param status
*/
public void rollbackTransaction(DataSourceTransactionManager transactionManager, TransactionStatus status) {
transactionManager.rollback(status);
}
public void test() {
TransactionStatus transStatus = null;
try {
transStatus = begin();
// TODO do something
jdbcTemplate.update("select 1 from dual");
commit(transStatus);
} catch (Exception e) {
if (transStatus != null) {
rollback(transStatus);
}
}
}
}