Spring注解驱动开发四纯注解实现声明式事务(无xml)

简介: Spring注解驱动开发四纯注解实现声明式事务(无xml)

其实这里的核心是@EnableTransactionManagement注解启用事务管理。在XXXConfig中注入datasource与DataSourceTransactionManager即可。

配置类如下:

@EnableTransactionManagement
@ComponentScan("com.web.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());
  }
}

@EnableTransactionManagement注解功能:开启基于注解的事务管理功能。

等同于以前xml配置:

<tx:annotation-driven/>

另外需要注意注册事务管理器bean于Spring容器中。


UserDao如下:

@Repository
public class UserDao {
  @Autowired
  private JdbcTemplate jdbcTemplate;
  public void insert(){
    String sql = "INSERT INTO `tbl_user`(username,age) VALUES(?,?)";
    String username = UUID.randomUUID().toString().substring(0, 5);
    jdbcTemplate.update(sql, username,19);
  }
}

UserService如下:

@S@Service
public class UserService2 {
  @Autowired
  private UserDao userDao;
  @Transactional
  public void insertUser(){
    userDao.insert();
    //otherDao.other();xxx
    System.out.println("插入完成...");
    int i = 10/0;//这里人为抛出异常,测试事务
  }
}

测试类如下:

public class IOCTest_Tx {
  @Test
  public void test01(){
    AnnotationConfigApplicationContext applicationContext = 
        new AnnotationConfigApplicationContext(TxConfig.class);
    UserService2 userService = applicationContext.getBean(UserService2.class);
    userService.insertUser();
    applicationContext.close();
  }
}

综上,可以看到将数据源,事务管理器等以前xml配置的方式替换为注解形式,可以实现完全无xml的声明式事务。

目录
相关文章
|
4天前
|
SQL Java 关系型数据库
Spring 事务
Spring 事务
7 1
|
4天前
|
前端开发 安全 Java
使用Spring框架加速Java开发
使用Spring框架加速Java开发
9 0
|
5天前
|
传感器 人工智能 前端开发
JAVA语言VUE2+Spring boot+MySQL开发的智慧校园系统源码(电子班牌可人脸识别)Saas 模式
智慧校园电子班牌,坐落于班级的门口,适合于各类型学校的场景应用,班级学校日常内容更新可由班级自行管理,也可由学校统一管理。让我们一起看看,电子班牌有哪些功能呢?
47 4
JAVA语言VUE2+Spring boot+MySQL开发的智慧校园系统源码(电子班牌可人脸识别)Saas 模式
|
6天前
|
Java 数据库连接 数据库
Spring事务简介,事务角色,事务属性
Spring事务简介,事务角色,事务属性
16 2
|
10天前
|
Java 数据库连接 数据库
16:事务-Java Spring
16:事务-Java Spring
26 5
|
12天前
|
消息中间件 Java 关系型数据库
Spring事务与分布式事务
这篇文档介绍了事务的概念和数据库事务的ACID特性:原子性、一致性、隔离性和持久性。在并发环境下,事务可能出现更新丢失、脏读和不可重复读等问题,这些问题通过设置事务隔离级别(如读未提交、读已提交、可重复读和序列化)来解决。Spring事务传播行为有七种模式,影响嵌套事务的执行方式。`@Transactional`注解用于管理事务,其属性包括传播行为、隔离级别、超时和只读等。最后提到了分布式事务,分为跨库和跨服务两种情况,跨服务的分布式事务通常通过最终一致性策略,如消息队列实现。
|
13天前
|
监控 Java 测试技术
Spring Boot与事务钩子函数:概念与实战
【4月更文挑战第29天】在复杂的业务逻辑中,事务管理是确保数据一致性和完整性的关键。Spring Boot提供了强大的事务管理机制,其中事务钩子函数(Transaction Hooks)允许开发者在事务的不同阶段插入自定义逻辑。本篇博客将详细探讨事务钩子函数的概念及其在Spring Boot中的应用。
35 1
|
14天前
|
IDE Java 开发工具
Spring Boot DevTools:加速开发的热部署工具
【4月更文挑战第28天】在Spring Boot的开发过程中,快速反馈和效率至关重要。Spring Boot DevTools是一个为开发者设计的模块,支持热部署(hot swapping),能够实现应用的快速重启和自动重载,极大地提高了开发效率。本篇博客将介绍Spring Boot DevTools的核心概念,并通过具体的实战示例展示如何在开发过程中利用这一工具。
24 0
|
16天前
|
XML Java 数据库连接
精妙绝伦:玩转Spring事务编程的艺术
【4月更文挑战第20天】
30 0
|
Java Spring
使用 Spring 2.5 注释驱动的 IoC 功能
http://www.ibm.com/developerworks/cn/java/j-lo-spring25-ioc/ ...
587 0