首先需要了解的是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提供的三种事物则就不能满足了,这时候需要借助于第三方事物管理来实现!感兴趣的可以看博主分布式架构中事物篇文章