天天看点

Spring_事务管理_注解版

1.事务环境搭建

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_事务管理_注解版
Spring_事务管理_注解版

数据达到回滚的效果。

2.注意

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

Spring_事务管理_注解版

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

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

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