首先需要了解的是spring boot 对事物的分类

1: JDBC 事物

引入依赖包

spring-boot-starter-jdbc

jdbc事物是传统方式,直接连接数据库进行操作。

需要增加配置

spring.datasource.url=jdbc:mysql://localhost/test

spring.datasource.username=dbuser

spring.datasource.password=dbpass

spring.datasource.driver-class-name=com.mysql.jdbc.Driver

spring会根据这些配置完成数据源初始化等工作

自动生成JdbcTemplate 操作类,使用时可以做直接注入

或者是使用jndi:

spring.datasource.jndi-name = java:jboss / datasources / customers

访问数据库使用:

NamedParameterJdbcTemplate

2: JPA事物

Java Persistence API是一种标准技术,可让您将对象“映射”到关系数据库。

使用jpa事物则需要引入依赖:spring-boot-starter-data-jpa。它提供以下关键依赖项:

Hibernate:最受欢迎的JPA实现之一。

Spring Data JPA:使实现基于JPA的存储库变得容易。

Spring ORMs:Spring Framework的核心ORM支持。

关键词:实体类

传统上,JPA“实体”类在persistence.xml文件中指定。使用Spring Boot,此文件不是必需的,而是使用“实体扫描”。默认情况下,将搜索主配置类(注释为@EnableAutoConfiguration或者@SpringBootApplication)下的所有包 。

任何类别标注了@Entity,@Embeddable或者@MappedSuperclass被认为是。典型的实体类类似于以下示例:

@Entity

public class City implements Serializable {

@Id

@GeneratedValue

private Long id;

@Column(nullable = false)

private String name;

@Column(nullable = false)

private String state;

protected City() {

// no-args constructor required by JPA spec

// this one is protected since it shouldn't be used directly

}

public City(String name, String state) {

this.name = name;

this.state = state;

}

public String getName() {

return this.name;

}

public String getState() {

return this.state;

}

}

JPA Repositories

Spring Data JPA Repositories是定义访问数据的接口。例如, CityRepository接口可能会声明一种findAllByState(String state)方法来查找给定状态中的所有城市。对于更复杂的查询,您可以使用Spring Data的Query注释来注释您的方法 。Spring Data存储库通常从Repository或 CrudRepository 接口扩展 。如果使用自动配置,则会从包含主配置类(带有@EnableAutoConfiguration或标注的@SpringBootApplication)的包中搜索存储库 。

以下示例显示了典型的Spring Data存储库接口定义:

package com.example.myapp.domain;

import org.springframework.data.domain.*;

import org.springframework.data.repository.*;

public interface CityRepository extends Repository<City, Long> {

Page<City> findAll(Pageable pageable);

City findByNameAndStateAllIgnoringCase(String name, String state);

}

Spring Data JPA Repositories支持三种不同的引导模式:default,deferred和lazy。要启用延迟或延迟引导,请分别设置 spring.data.jpa.repositories.bootstrap-mode为deferred或lazy。

jta事物

JTA是分布式事务,指在应用程序中存在多个数据源,保持多个数据源一致性的操作事物! 目前spring boot本身没有实现jta事物管理器的,目前都是使用的第三方事物管理器!

Spring Boot通过使用Atomikos或Bitronix 嵌入式事务管理器支持跨多个XA资源的分布式JTA事务。部署到合适的Java EE Application Server时,也支持JTA事务(这个指的是容器事物,如果不明白的话,可以看下其他博客)。

检测到JTA环境时,Spring JtaTransactionManager用于管理事务。自动配置的JMS,DataSource和JPA bean已升级为支持XA事务。您可以使用标准的Spring惯用语,例如@Transactional,参与分布式事务。如果您在JTA环境中并仍希望使用本地事务,则可以将该spring.jta.enabled属性设置false为禁用JTA自动配置。

spring jta 同时还支持部分jms服务器的事物!

具体实现不在这里说明了,感兴趣的可以看下其他博客!

总结

目前对于小型应用来说spring boot 提供的这三种事物本身已经满足需要了,如果需要构建分布式微服务应用,存在多个应用之间的服务调用及事物的统一管理,则spring boot提供的三种事物则就不能满足了,这时候需要借助于第三方事物管理来实现!感兴趣的可以看博主分布式架构中事物篇文章

spring boot 三种类型事物实现说明相关推荐

  1. spring框架三种类型项目实现--基础maven类型、纯注解开发型、aop结合注解开发型

    spring框架实现 1.基础maven类型 1.开发准备--pom.xml添加spring依赖 2.创建properties文件 还是三层架构开发 3.domain层创建实体类javabean 4. ...

  2. spring boot 三种入参

    先来讲述下最简单的使用get请求用户信息的实现方式,代码如下,写好后直接在Application类点击右键有个RunAs,点击后会自动运行,运行成功后可以使用http发包工具进行测试,这里推荐使用ch ...

  3. Spring 异常处理三种方式

    Spring 异常处理三种方式 异常处理方式一. @ExceptionHandler 异常处理方式二. 实现HandlerExceptionResolver接口 异常处理方式三. @Controlle ...

  4. Spring的三种注入方式(为什么推荐构造器注入?)

    Spring的三种注入方式 一.属性注入 @Resource和@Autowired的区别 为什么尽量使用 @Resource? 二.setter 注入 三.构造器注入 具体可以看看Spring官网 为 ...

  5. linux支持三种类型的硬件,linux

    纪晓岚曾经说:"世间的道理与事情,都在古人的书中说尽,现在如再著述,仍然超不过古人的范围,又何必再多著述."于是他一生之中,从不著书,只是编书--整理前人的典籍,将中国文化作系统的 ...

  6. Asp.net支持三种类型的cache[转]

    from:http://www.cnblogs.com/thomasnet/archive/2006/11/26/573104.html Asp.net支持三种类型的cache 想写一个技术快速概述, ...

  7. java中三种转string的方法_java中int,char,string三种类型的相互转换

    如何将字串 String 转换成整数 int? int i = Integer.valueOf(my_str).intValue(); int i=Integer.parseInt(str); 如何将 ...

  8. html5中标签分为,HTML标签的三种类型

    HTML标签的类型分为三种:行内元素,行内块元素,块级元素 而标签的属性是可以转换的 display:inline: 转换为行内元素 display:linline-block 转换为行内块元素 di ...

  9. java中有scoreframe类型嘛_java构造函数的三种类型总结

    我们说构造函数能处理参数的问题,但其实也要分三种情况进行讨论.目前有三种类型:无参.有参和默认.根据不同的参数情况,需要我们分别进行构造函数的讨论.这里重点是无参构造函数的初始化也要分两种方法进行分析 ...

最新文章

  1. Java总复习(二)
  2. 实验六 Linux进程编程,Linux系统编程实验六:进程间通信
  3. 电视光端机常见故障问题介绍
  4. Java集合(一):Java集合概述
  5. 程序老鸟:软件测试的工资高还是开发者工资高?
  6. 灵云语音识别(ASR)实现实时识别
  7. python 3 并发编程之多进程 multiprocessing模块
  8. 使用 FFmpeg 工具合并本地多个.ts文件为单个.MP4
  9. 苹果白屏一直显示苹果_苹果手机出现白屏要如何修复
  10. Hexo主题-Icarus主题
  11. php 预编译,预编译的prepare statements 管理, 实现和思路
  12. 2016第1篇--Python查看微信被删好友
  13. ARM与DSP的区别
  14. 线代复习小结 矩阵等价、相似、合同的区别以及向量组等价 2019/09/13
  15. VMware新建OracleLinux6.5虚拟机
  16. YDOOK: ANSYS Maxwell 19 教程14:Maxwell 2D 静电场怎样设置激励源 静电场有哪些激励源
  17. 探秘双“11”征服马云刘强东的电商架构 !
  18. 【纯新手】小白的第一次面试经过(字节跳动-懂车帝)
  19. 记一次kudu重启之后tablet都处于UNAVAILABLE
  20. 浅谈classList

热门文章

  1. 南通java培训地点,吐血整理
  2. 解决gradle下找不到符号错误
  3. W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x419b4c50)
  4. 【Redis】Redis数据库
  5. 睡眠质量不好怎么改善,几个助眠好物帮助你睡安稳觉
  6. 方法教程:如何下载网易云音乐上的视频到本地电脑
  7. chrome浏览器怎么设置编码
  8. 【DeepMind】新算法MuZero在Atari基准上取得了新SOTA效果,成果问鼎Nature
  9. win11更新启动后黑屏有鼠标(本人亲测有效)
  10. ppt太大无法上传怎么压缩变小?