1.事务环境搭建
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5yM1EDM1QTNlN2N0ETZmRGOyYzX4QTO1cTM1IzLcVDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
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());
}