SpringBoot 事务处理的环境搭建步骤:
1、导入相关依赖:数据源、数据库驱动、Spring-jdbc模块
2、配置数据源、JdbcTemplate(Spring提供的简化数据库操作的工具)操作数据
3、给方法上标注 @Transactional 表示当前方法是一个事务方法
4、开启基于注解的事务管理功能 @EnableTransactionManagement
5、配置事务管理器来控制事务
public PlatformTransactionManager transactionManager()
配置类:
@EnableTransactionManagement
@ComponentScan("com.duojia.tx")
@Configuration
public class TxConfig {
// 配置数据源
@Bean
public DataSource dataSource() throws Exception {
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setUser("root");
dataSource.setPassword("123456");
dataSource.setDriverClass("com.mysql.jdbc.Driver");
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/test");
return dataSource;
}
// 操作数据
@Bean
public JdbcTemplate jdbcTemplate() throws Exception{
// Spring 对 @Configuration 类会特殊处理;给容器中加组件的方法,多次调用都只是从容器中找组件
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource());
return jdbcTemplate;
}
// 配置事务管理器
@Bean
public PlatformTransactionManager transactionManager() throws Exception {
return new DataSourceTransactionManager(dataSource());
}
}
事务类:
@Service
public class UserService {
@Autowired
private UserDao userDao;
// 这是一个事务办法
@Transactional
public void insertUser() {
userDao.insert();
System.out.println("插入完成");
}
}
@Repository
public class UserDao {
@Autowired
private JdbcTemplate jdbcTemplate;
public void insert() {
String sql = "insert into user(name, age) value(?, ?);";
String username = UUID.randomUUID().toString().substring(0, 5);
jdbcTemplate.update(sql, username, 12);
}
}
测试类:
public class IOCTest_tx {
@Test
public void test01() {
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(TxConfig.class);
UserService userService = applicationContext.getBean(UserService.class);
userService.insertUser();
applicationContext.close();
}
}
完成以上步骤就算是一个基本的事务配置了。