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构造函数的三种类型总结
我们说构造函数能处理参数的问题,但其实也要分三种情况进行讨论.目前有三种类型:无参.有参和默认.根据不同的参数情况,需要我们分别进行构造函数的讨论.这里重点是无参构造函数的初始化也要分两种方法进行分析 ...
最新文章
- wcf系列学习5天速成——第四天 wcf之分布式架构(转载)
- 3纳米、2纳米、1纳米芯片该如何造?
- 澄清大数据存储——系统集成商篇
- Gartner:到2020年人工智能将创造出230万个工作岗位
- 帆软报表(finereport)点击事件对话框打开
- Numpy 笔记: 多维数组的切片(slicing)和索引(indexing)【转】
- 一加Nord 2配置细节曝光:天玑1200芯片+5000万像素旗舰主摄
- 左右db_block_size了解和实验
- python中的is和==
- Hbuilder中如何快速输入注释标签_三菱PLC编程软件如何使用注释、声明、注解?...
- Unity美术字体教程--BMFont美术字体的制作流程以及在unity中美术字体的生成
- gradle下载很慢
- ImportError: DLL load failed while importing ie_api
- Java--IDEA报错Project ‘org.springframework.boot:spring-boot-starter-parent:2.2.0.RELEAS
- 基于word2vec使用wiki中文语料库实现词向量训练模型--2019最新
- 微信小程序前四周内容总结
- 使用python完成知乎模拟登陆
- Java接口实现打印机
- 使用fiddle进行苹果手机app抓包教程
- 3D图形学一:模仿草的运动 – GPU(Pixel Shader Vertex Shader)实现