时间:2021-05-20
环境搭建导入
maven依赖
<!--spring提供的数据库操作工具--><dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.0.2.RELEASE</version></dependency><!--c3p0 数据库连接池--><dependency> <groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> <version>0.9.5.5</version></dependency><!--mysql连接器--><dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.48</version></dependency>配置数据库相关信息
@Configuration@ComponentScan("com.spring.tx")public class TxConfig { /** * 配置数据源 */ @Bean public DataSource dataSource() throws PropertyVetoException { ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource(); comboPooledDataSource.setUser("root"); comboPooledDataSource.setPassword("root"); comboPooledDataSource.setDriverClass("com.mysql.jdbc.Driver"); comboPooledDataSource.setJdbcUrl("jdbc:mysql:///test"); return comboPooledDataSource; } @Bean public JdbcTemplate jdbcTemplate() throws PropertyVetoException { //Spring对配置类做了特殊处理,多次调用给容器中加组件的方法,其实是从容器中找组件,并不会重新添加 return new JdbcTemplate(dataSource()); }}添加数据访问层、业务层
@Repositorypublic class UserDao { @Autowired private JdbcTemplate jdbcTemplate; public void saveUser(String name, Integer age) { String sql = "insert into user(name, age) values(?, ?)"; jdbcTemplate.update(sql, name, age); }}@Servicepublic class UserService { @Autowired private UserDao userDao; public void saveUser(){ String name = "jack11"; Integer age = 19; userDao.saveUser(name, age); }}添加测试类
public class TxTest { @Test public void test(){ ApplicationContext context = new AnnotationConfigApplicationContext(TxConfig.class); UserService userService = (UserService) context.getBean("userService"); userService.saveUser(); }}事务问题
此时基本环境已经搭建好了,点击运行,数据可以成功插入但是还没有配置事务,没有事务回滚会造成某些情况下数据出错。在Spring注解中,可以在需要添加事务的方法或类上加@Transactional,并且开启事务管理功能,即@EnableTransactionManagement,代码如下:
修改UserService 的 saveUser 方法
@Transactionalpublic void saveUser(){ String name = "jack11"; Integer age = 19; userDao.saveUser(name, age); //模拟异常 int i = 1 / 0;}在配置类加上@EnableTransactionManagement
@Configuration@ComponentScan("com.spring.tx")@EnableTransactionManagementpublic class TxConfig { //省略数据源、jdbcTemplate的配置}再次运行测试方法,会发现报错了,但不是我们模拟的异常报错,控制台提示找不到bean
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.transaction.PlatformTransactionManager' available
我们还需要注册一个事务管理器来管理事务,PlatformTransactionManager有很多实现类,在Spring 中 JdbcTemplate、Mybatis应该使用 DataSourceTransactionManager
在配置类中再注册一个组件,运行,事务生效
/** * 注册事务管理器 */@Beanpublic PlatformTransactionManager platformTransactionManager() throws PropertyVetoException { return new DataSourceTransactionManager(dataSource());}以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
前言spring事务管理包含两种情况,编程式事务、声明式事务。而声明式事务又包括基于注解@Transactional和tx+aop的方式。那么本文先分析编程式注
本文实例讲述了Spring实战之使用注解实现声明式事务操作。分享给大家供大家参考,具体如下:一配置文件
前言:在service层的方法上使用@Transactional即可实现处理数据库发生错误时触发事务回滚机制。注意:Spring基于注解的声明式事物@Trans
一、编程式事务二、声明式事务1、基于XML的事务1.1Spring配置文件1.2业务类和下面注解方式使用的类一样,不过是去掉了注解,我将所有的Service层放
编程式事务在Spring中事务管理的方式有两种,编程式事务和声明式事务。先详细介绍一下两种事务的实现方式.配置类@Configuration@EnableTra