spring boot 三种类型事物实现说明
首先需要了解的是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 三种类型事物实现说明相关推荐
- spring框架三种类型项目实现--基础maven类型、纯注解开发型、aop结合注解开发型
spring框架实现 1.基础maven类型 1.开发准备--pom.xml添加spring依赖 2.创建properties文件 还是三层架构开发 3.domain层创建实体类javabean 4. ...
- spring boot 三种入参
先来讲述下最简单的使用get请求用户信息的实现方式,代码如下,写好后直接在Application类点击右键有个RunAs,点击后会自动运行,运行成功后可以使用http发包工具进行测试,这里推荐使用ch ...
- Spring 异常处理三种方式
Spring 异常处理三种方式 异常处理方式一. @ExceptionHandler 异常处理方式二. 实现HandlerExceptionResolver接口 异常处理方式三. @Controlle ...
- Spring的三种注入方式(为什么推荐构造器注入?)
Spring的三种注入方式 一.属性注入 @Resource和@Autowired的区别 为什么尽量使用 @Resource? 二.setter 注入 三.构造器注入 具体可以看看Spring官网 为 ...
- linux支持三种类型的硬件,linux
纪晓岚曾经说:"世间的道理与事情,都在古人的书中说尽,现在如再著述,仍然超不过古人的范围,又何必再多著述."于是他一生之中,从不著书,只是编书--整理前人的典籍,将中国文化作系统的 ...
- Asp.net支持三种类型的cache[转]
from:http://www.cnblogs.com/thomasnet/archive/2006/11/26/573104.html Asp.net支持三种类型的cache 想写一个技术快速概述, ...
- java中三种转string的方法_java中int,char,string三种类型的相互转换
如何将字串 String 转换成整数 int? int i = Integer.valueOf(my_str).intValue(); int i=Integer.parseInt(str); 如何将 ...
- html5中标签分为,HTML标签的三种类型
HTML标签的类型分为三种:行内元素,行内块元素,块级元素 而标签的属性是可以转换的 display:inline: 转换为行内元素 display:linline-block 转换为行内块元素 di ...
- java中有scoreframe类型嘛_java构造函数的三种类型总结
我们说构造函数能处理参数的问题,但其实也要分三种情况进行讨论.目前有三种类型:无参.有参和默认.根据不同的参数情况,需要我们分别进行构造函数的讨论.这里重点是无参构造函数的初始化也要分两种方法进行分析 ...
最新文章
- Java总复习(二)
- 实验六 Linux进程编程,Linux系统编程实验六:进程间通信
- 电视光端机常见故障问题介绍
- Java集合(一):Java集合概述
- 程序老鸟:软件测试的工资高还是开发者工资高?
- 灵云语音识别(ASR)实现实时识别
- python 3 并发编程之多进程 multiprocessing模块
- 使用 FFmpeg 工具合并本地多个.ts文件为单个.MP4
- 苹果白屏一直显示苹果_苹果手机出现白屏要如何修复
- Hexo主题-Icarus主题
- php 预编译,预编译的prepare statements 管理, 实现和思路
- 2016第1篇--Python查看微信被删好友
- ARM与DSP的区别
- 线代复习小结 矩阵等价、相似、合同的区别以及向量组等价 2019/09/13
- VMware新建OracleLinux6.5虚拟机
- YDOOK: ANSYS Maxwell 19 教程14:Maxwell 2D 静电场怎样设置激励源 静电场有哪些激励源
- 探秘双“11”征服马云刘强东的电商架构 !
- 【纯新手】小白的第一次面试经过(字节跳动-懂车帝)
- 记一次kudu重启之后tablet都处于UNAVAILABLE
- 浅谈classList
热门文章
- 南通java培训地点,吐血整理
- 解决gradle下找不到符号错误
- W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x419b4c50)
- 【Redis】Redis数据库
- 睡眠质量不好怎么改善,几个助眠好物帮助你睡安稳觉
- 方法教程:如何下载网易云音乐上的视频到本地电脑
- chrome浏览器怎么设置编码
- 【DeepMind】新算法MuZero在Atari基准上取得了新SOTA效果,成果问鼎Nature
- win11更新启动后黑屏有鼠标(本人亲测有效)
- ppt太大无法上传怎么压缩变小?