Spring_事务管理_注解版
原创
©著作权归作者所有:来自51CTO博客作者959_1x的原创作品,请联系作者获取转载授权,否则将追究法律责任
1.事务环境搭建
UserDao.java
@Repository
public class UserDao {
@Autowired
JdbcTemplate jdbcTemplate;
public void insert(){
String sql = "insert into tbl_user values(null, ?, ?)";
String username = UUID.randomUUID().toString().substring(0, 5);
jdbcTemplate.update(sql, username, 20);
}
}
UserService.java
@Service
public class UserService {
@Autowired
UserDao userDao;
@Transactional//是一个事务
public void insert(){
userDao.insert();
System.out.println("插入完成");
int i = 10/0;
}
}
在Service后面加上了一个异常
TxConfig.java配置类
@EnableTransactionManagement
@ComponentScan("com.Zjy.tx")
@Configuration
public class TxConfig {
//数据源
@Bean
public DataSource dataSource()throws Exception{
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setUser("root");
dataSource.setPassword("root");
dataSource.setDriverClass("com.mysql.jdbc.Driver");
dataSource.setJdbcUrl("jdbc:mysql:///test2");
return dataSource;
}
@Bean
public JdbcTemplate jdbcTemplate()throws Exception{
//在容器中找组件,特殊处理,不会重写创建
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource());
return jdbcTemplate;
}
@Bean//注册事务管理器
public PlatformTransactionManager transactionManager()throws Exception{
return new DataSourceTransactionManager(dataSource());
}
}
test
@Test
public void test1(){
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(TxConfig.class);
UserService bean = context.getBean(UserService.class);
bean.insert();
context.close();
}
本来的数据
数据达到回滚的效果。
2.注意
1.在service方法上添加@Transactional注解
2.在配置类上加入@EnableTransactionManagement注解
开启事务管理器功能
3.在配置类中加入PlatformTransactionManager 注册事务管理器。
@Bean//注册事务管理器
public PlatformTransactionManager transactionManager()throws Exception{
return new DataSourceTransactionManager(dataSource());
}