Java Spring的两种事务是什么

1. Spring中的事务控制方式

spring的事务控制可以分为编程式事务控制和声明式事务控制。

编程式

开发者直接把事务的代码和业务代码耦合到一起,在实际开发中不用。

声明式

开发者采用配置的方式来实现的事务控制,业务代码与事务代码实现解耦合,使用的AOP思想。

立即学习“Java免费学习笔记(深入)”;

2.编程式事务控制相关对象

2.1PlatformTransactionManager

PlatformTransactionManager接口,是spring的事务管理器接口,里面提供了我们常用的操作事务的方法。

Java Spring的两种事务是什么

Java Spring的两种事务是什么

2.2TransactionDefinition

TransactionDefinition接口提供事务的定义信息(事务隔离级别、事务传播行为等等)

Java Spring的两种事务是什么

(1)事务隔离级别

设置隔离级别,可以解决事务并发产生的问题,如脏读、不可重复读和虚读(幻读)。

注意:使用数据库默认级别,如果数据库是mysql,则默认是可重复读,oracle是读已提交。

ISOLATION_DEFAULT 使用数据库默认级别

ISOLATION_READ_UNCOMMITTED 读未提交

ISOLATION_READ_COMMITTED 读已提交(可解决脏读问题)

ISOLATION_REPEATABLE_READ 可重复读 (可解决脏读、不可重复读)

ISOLATION_SERIALIZABLE 串行化

可解决:

Java Spring的两种事务是什么

(2)事务传播行为

事务传播行为指的就是当一个业务方法【被】另一个业务方法调用时,应该如何进行事务控制。

Java Spring的两种事务是什么

重点:

Java Spring的两种事务是什么

read-only(是否只读):建议查询时设置为只读

timeout(超时时间):默认值是-1,没有超时限制。如果有,以秒为单位进行设置

2.3 TransactionStatus

TransactionStatus 接口提供的是事务具体的运行状态。

Java Spring的两种事务是什么

可以简单的理解三者的关系:事务管理器通过读取事务定义参数进行事务管理,然后会产生一系列的事务状态。

Spring中的事务控制主要就是通过这三个API实现的

PlatformTransactionManager 负责事务的管理,它是个接口,其子类负责具体工作

TransactionDefinition 定义了事务的一些相关参数

TransactionStatus 代表事务运行的一个实时状态

理解三者的关系:事务管理器通过读取事务定义参数进行事务管理,然后会产生一系列的事务状态

3.基于XML的声明式事务控制【重点】

在Spring配置文件中声明式的处理事务来代替代码式的处理事务。底层采用AOP思想来实现。

声明式事务控制明确事项:

核心业务代码(目标对象) (切入点是谁?)

事务增强代码(Spring已提供事务管理器))(通知是谁?)

切面配置(切面如何配置?)(切面 = 切入点 + 通知)

3.1快速入门

使用spring声明式事务控制转账业务。

步骤:

1.引入tx命名空间

2.事务管理器通知配置

3.事务管理器AOP配置

4.测试事务控制转账业务代码 

(1)引入tx命名空间

登录后复制

(2)事务管理器通知配置
      <!--            --> // 通知增强           //定义事务的一些属性 * 表示当前任意名称的方法都走默认配置                                     //CRUD常用配置                                                                        

登录后复制

(3)事务管理器AOP配置 

当使用spring声明式管理事务,要使用aop:advisor来进行aop的配置!

//aop配置:配置切面                 -->

登录后复制

事务参数的配置详解:

name:切点方法名称

isolation:事务的隔离级别

propogation:事务的传播行为

timeout:超时时间

read-only:是否只读

4.基于注解的声明式事务控制(重点)

步骤:

修改service层,增加事务注解

修改spring核心配置文件,开启事务注解支持

4.1 修改service层,增加事务注解

@Servicepublic class AccountServiceImpl implements AccountService {  @Autowired  private AccountDao accountDao;    @Transactional(propagation = Propagation.REQUIRED, isolation =Isolation.REPEATABLE_READ, timeout = -1, readOnly = false)  @Override  public void transfer(String outUser, String inUser, Double money) {    accountDao.out(outUser, money);    int i = 1 / 0;    accountDao.in(inUser, money); }}

登录后复制

4.2修改spring核心配置文件,开启事务注解支持

                

登录后复制

4.3纯注解方式

核心配置类:

@Configuration  // 声明该类为核心配置类@ComponentScan("com.lagou")  // 包扫描@Import(DataSourceConfig.class) //导入其他配置类@EnableTransactionManagement //事务的注解驱动public class SpringConfig {    @Bean    public JdbcTemplate getJdbcTemplate(@Autowired DataSource dataSource){        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);        return jdbcTemplate;    }    @Bean    public PlatformTransactionManager getPlatformTransactionManager(@Autowired DataSource dataSource){        DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager(dataSource);        return dataSourceTransactionManager;    }}

登录后复制

数据源配置类:

@PropertySource("classpath:jdbc.properties") //引入properties文件public class DataSourceConfig {    @Value("${jdbc.driverClassName}")    private String driver;    @Value("${jdbc.url}")    private String url;    @Value("${jdbc.username}")    private String username;    @Value("${jdbc.password}")    private String password;    @Bean //会把当前方法的返回值对象放进IOC容器中    public DataSource getDataSource(){        DruidDataSource druidDataSource = new DruidDataSource();        druidDataSource.setDriverClassName(driver);        druidDataSource.setUrl(url);        druidDataSource.setUsername(username);        druidDataSource.setPassword(password);        return druidDataSource;    }}

登录后复制

以上就是Java Spring的两种事务是什么的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2626385.html

(0)
上一篇 2025年3月7日 00:52:14
下一篇 2025年3月7日 00:52:24

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • Java中的Javassist怎么使用

    开篇 说起 aop 小伙伴们肯定很熟悉,无论是 jdk 动态代理或者是 cglib 等,其底层都是通过操作 java 字节码来实现代理。asm、aspectj和javassist等是常用的操作字节码的技术。 ASM 其设计和实现是尽可能小而…

    2025年3月7日
    200
  • Java怎么在CompletableFuture中实现日志记录

    1.首先利用aop为所有请求入口添加requestid。 @Aspect@Componentpublic class LoggingAspect {    /**     * AOP注解的Controller类方法必须为 public 或 …

    编程技术 2025年3月7日
    200
  • 怎么在SpringBoot中使用Spring AOP实现接口鉴权

    面向切面编程 面向切面编程,可以将与业务无关但是需要被各个业务模块共同调用的逻辑抽取出来,以切面的方式切入到代码中,从而降低系统中代码的耦合度,减少重复的代码。 Spring AOP是通过预编译方式和运行期间动态代理实现程序面向切面编程 A…

    编程技术 2025年3月7日
    200
  • Java如何实现优雅的参数校验

    一、引子 要对方法的参数进行校验,最简单暴力的写法是这个样子:     public static void utilA(String a,BigDecimal b){        if (StringUtils.isEmpty(a)){…

    2025年3月7日
    200
  • Java之SpringBoot怎么实现基本增删改查

    根据上图所示,idea中我们有7个比较重要的模块需要建立 (1)controller包:如果学习过或者对SpringMVC有所了解的小伙伴,肯定知道,controller是控制层,相当于我们的接收浏览器信息并响应发送相关信息的地方,具体的还…

    2025年3月7日 编程技术
    200
  • Java SpringMVC数据响应实例分析

    1)页面跳转   直接返回字符串:此种方式会将返回的字符串与视图解析器的前后缀拼接后跳转。  返回带有前缀的字符串: 转发:   forward:/WEB-INF/views/index.jsp 重定向:   redirect:/index…

    2025年3月7日
    200
  • Java反射怎么定义和使用

    定义 在java程序运行期间动态获取和操作类、方法、属性等元素的能力被称为java反射。它使得我们可以在程序运行时获取一个类的信息,并对其进行操作,这极大地扩展了java语言的灵活性和可扩展性。 在Java中,每个类都有一个对应的Class…

    编程技术 2025年3月7日
    200
  • Java Agent怎么用

    Java Agent 技术简介 java agent 直译为 java 代理,也常常被称为 java 探针技术。 Java Agent 这种技术是在 JDK1.5 引入的,可以在运行时动态修改 Java 字节码。Java 中的类编译后形成字…

    2025年3月7日 编程技术
    200
  • Java Spring怎么实现定时任务

    java实现定时任务 jdk自带的库中,有两种方式可以实现定时任务,一种是timer,另一种是scheduledthreadpoolexecutor。 Timer+TimerTask 创建一个Timer就创建了一个线程,可以用来调度Time…

    2025年3月7日
    200
  • Java 中的异构系统集成和数据集成技术

    随着大数据和云计算技术的发展,企业和组织面临着多种异构系统的集成和数据交换的挑战。在这个背景下,java 的异构系统集成和数据集成技术得到了广泛的应用和发展。本文将从异构系统集成和数据集成的概念、java 中异构系统集成和数据集成的原理和应…

    编程技术 2025年3月7日
    200

发表回复

登录后才能评论