spring注解开发-事务管理

使用注解完成spring的事务管理功能

1、配置数据源、JdbcTemplate操作数据

    //配置数据源
    @Bean
    public DataSource dataSource() throws PropertyVetoException {
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        dataSource.setUser(user);
        dataSource.setPassword(password);
        dataSource.setDriverClass(driver);
        dataSource.setJdbcUrl(url);
        return dataSource;
    }

    //配置JdbcTemplate
    @Bean
    public JdbcTemplate jdbcTemplate(/*从ioc容器中获取dataSource对象*/DataSource dataSource){
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
        return jdbcTemplate;
    }

2、编写servlce将需要进行事务控制的方法上加上@Transactional注解

@Service
public class UserService {
    @Autowired
    UserDao userDao;

    @Transactional//表示当前方法是一个事务方法
    public void insert(){
        String username = UUID.randomUUID().toString().substring(1, 5);
        userDao.insert(username,18);
        System.out.println("插入完成");
        //出现异常,测试事务是否开启成功
        int i = 1/0;
    }
}

3、给配置类加上@EnableTransactionManagement注解,开启基于注解的事务管理功能

@EnableTransactionManagement//开启基于注解的事务管理功能
@PropertySource("classpath:dbconfig/db.properties")
@ComponentScan(value = {"com.it.tx"})
@Configuration
public class TxConfig {

4、配置事务管理器来控制事务

    //注册事务管理器
    @Bean
    public DataSourceTransactionManager dataSourceTransactionManager(DataSource dataSource){
        DataSourceTransactionManager transactionManager = new DataSourceTransactionManager(dataSource);
        return transactionManager;
    }

5、测试

1.添加方法执行之前数据库数据

2.注释掉i=1/0,未出现错误时,添加成功

 

3.打开异常,再次运行

有数学异常,查看数据库

数据回滚,事务控制成功

源码: 

配置类:

@EnableTransactionManagement//开启基于注解的事务管理功能
@PropertySource("classpath:dbconfig/db.properties")
@ComponentScan(value = {"com.it.tx"})
@Configuration
public class TxConfig {
    @Value("${jdbc.user}")
    private String user;
    @Value("${jdbc.password}")
    private String password;
    @Value("${jdbc.driver}")
    private String driver;
    @Value("${jdbc.url}")
    private String url;
    //配置数据源
    @Bean
    public DataSource dataSource() throws PropertyVetoException {
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        dataSource.setUser(user);
        dataSource.setPassword(password);
        dataSource.setDriverClass(driver);
        dataSource.setJdbcUrl(url);
        return dataSource;
    }

    //配置JdbcTemplate
    @Bean
    public JdbcTemplate jdbcTemplate(/*从ioc容器中获取dataSource对象*/DataSource dataSource){
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
        return jdbcTemplate;
    }

    //注册事务管理器
    @Bean
    public DataSourceTransactionManager dataSourceTransactionManager(DataSource dataSource){
        DataSourceTransactionManager transactionManager = new DataSourceTransactionManager(dataSource);
        return transactionManager;
    }
}

Service类:

@Service
public class UserService {
    @Autowired
    UserDao userDao;

    @Transactional//表示当前方法是一个事务方法
    public void insert(){
        String username = UUID.randomUUID().toString().substring(1, 5);
        userDao.insert(username,18);
        System.out.println("插入完成");
        //出现异常,测试事务是否开启成功
        int i = 1/0;
    }
}

Dao:

@Repository
public class UserDao {
    @Autowired
    JdbcTemplate jdbcTemplate;

    public void insert(String username, int age){
        String sql = "insert into tbl_user(username,age) values(?,?)";
        jdbcTemplate.update(sql,username,age);
    }

}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值