1.事务环境搭建

Spring_事务管理_注解版_spring

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();
}

本来的数据
Spring_事务管理_注解版_spring_02
Spring_事务管理_注解版_事务管理_03
Spring_事务管理_注解版_事务管理_04
数据达到回滚的效果。

2.注意

1.在service方法上添加@Transactional注解

Spring_事务管理_注解版_java_05

2.在配置类上加入@EnableTransactionManagement注解

开启事务管理器功能

Spring_事务管理_注解版_数据_06

3.在配置类中加入PlatformTransactionManager 注册事务管理器。

    @Bean//注册事务管理器
public PlatformTransactionManager transactionManager()throws Exception{
return new DataSourceTransactionManager(dataSource());
}