首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

带有两个数据源的Spring Boot Batch导致javax.persistence.TransactionRequiredException:执行更新/删除查询

问题描述: 带有两个数据源的Spring Boot Batch导致javax.persistence.TransactionRequiredException:执行更新/删除查询。

回答: 这个问题是由于在Spring Boot Batch中使用了两个数据源导致的。javax.persistence.TransactionRequiredException:执行更新/删除查询异常表示事务不可用,无法执行更新或删除操作。

解决这个问题的方法是确保在使用多个数据源时,每个数据源都在事务管理器的范围内。以下是一种可能的解决方案:

  1. 配置多个数据源:在Spring Boot的配置文件中,配置两个数据源的相关信息,包括数据库连接信息、用户名、密码等。
  2. 创建两个数据源的Bean:在Spring Boot的配置类中,创建两个数据源的Bean,并将其注入到应用程序中。
  3. 配置事务管理器:为每个数据源配置一个事务管理器,并将其注入到应用程序中。
  4. 配置事务注解:在需要使用事务的方法上,使用@Transactional注解来标记事务的边界。
  5. 使用正确的数据源:在需要执行更新或删除操作的方法中,确保使用正确的数据源。

以下是一个示例代码,演示了如何在Spring Boot Batch中使用多个数据源:

代码语言:txt
复制
@Configuration
@EnableBatchProcessing
public class BatchConfig {

    @Autowired
    private JobBuilderFactory jobBuilderFactory;

    @Autowired
    private StepBuilderFactory stepBuilderFactory;

    @Autowired
    @Qualifier("firstDataSource")
    private DataSource firstDataSource;

    @Autowired
    @Qualifier("secondDataSource")
    private DataSource secondDataSource;

    @Autowired
    private PlatformTransactionManager firstTransactionManager;

    @Autowired
    private PlatformTransactionManager secondTransactionManager;

    @Bean
    public Job myJob() {
        return jobBuilderFactory.get("myJob")
                .start(myStep())
                .build();
    }

    @Bean
    public Step myStep() {
        return stepBuilderFactory.get("myStep")
                .<MyEntity, MyEntity>chunk(10)
                .reader(myReader())
                .processor(myProcessor())
                .writer(myWriter())
                .build();
    }

    @Bean
    public ItemReader<MyEntity> myReader() {
        // Configure reader with firstDataSource
    }

    @Bean
    public ItemProcessor<MyEntity, MyEntity> myProcessor() {
        // Configure processor with firstDataSource
    }

    @Bean
    public ItemWriter<MyEntity> myWriter() {
        // Configure writer with secondDataSource
    }

    @Bean
    @Qualifier("firstDataSource")
    public DataSource firstDataSource() {
        // Configure firstDataSource
    }

    @Bean
    @Qualifier("secondDataSource")
    public DataSource secondDataSource() {
        // Configure secondDataSource
    }

    @Bean
    @Qualifier("firstTransactionManager")
    public PlatformTransactionManager firstTransactionManager() {
        return new DataSourceTransactionManager(firstDataSource);
    }

    @Bean
    @Qualifier("secondTransactionManager")
    public PlatformTransactionManager secondTransactionManager() {
        return new DataSourceTransactionManager(secondDataSource);
    }
}

在上述示例中,我们使用了两个数据源(firstDataSource和secondDataSource),并为每个数据源配置了相应的事务管理器(firstTransactionManager和secondTransactionManager)。在Step的配置中,我们使用了不同的数据源来读取、处理和写入数据。

请注意,上述示例中的代码只是一个示例,实际的配置可能会因应用程序的需求而有所不同。此外,还需要根据具体的业务逻辑来实现ItemReader、ItemProcessor和ItemWriter接口。

希望以上解答对您有帮助。如果您需要更多关于Spring Boot Batch、多数据源配置或其他相关主题的信息,请随时提问。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

JPA操作遇到问题(仅供自我学习)Spring boot使用Jpa@ModifyingclearAutomatically = true作用

进行删除时报错: No EntityManager with actual transaction available for current thread - cannot reliably process...'remove' call; nested exception is javax.persistence.TransactionRequiredException: No EntityManager...Spring boot使用Jpa@ModifyingclearAutomatically = true作用 @Modifying,进入这个注解,能看到,它是指可以清除底层持久化上下文,即entityManager...就会刷新Hibernate一级缓存, 否则在同一接口中,更新一个对象,接着查询这个对象,那么查出来这个对象还是之前没有更新状态。...翻译:定义在执行修改查询后是否应该清除底层持久化上下文。

1.1K21

Spring JPA 自定义删改

Spring JPA 更新创建 ​ 之前介绍方法,基本都是只读方法,查询创建没有对数据库中存储实体进行任何修改,但是对于更新删除来说,如果继续保持只读属性,那么改删功能是难以完成。...2") int setFixedFirstnameFor(String firstname, String lastname); ​ 这样做被注释方法查询将会作为更新查询而不是选择查询,由于EntityManager...1",nativeQuery = true) void deleteUserById(Long id); 派生删除 Spring Data JPA还支持派生delete查询,使您不必显式声明JPQL查询...,但就执行方式而言,这两个方法声明之间有一个重要区别。...为了确保实际调用生命周期查询,deleteByRoleId()调用执行一个查询,然后逐个删除返回实例,这样持久性提供者就可以对这些实体实际调用@PreRemove回调。 ​

1.4K20
  • Spring Boot 2.4.4、Spring Cloud 2020.0.2 发布

    想知道更新了什么吗?让小编来帮你说一说 首先是Spring Cloud 2020.0.2,是一个常规小版本升级,主要是修复一些之前提出bug以及升级依赖。...(#703) 添加对多个默认查询标记支持。(#684) Spring Cloud Gateway 添加服务实例id Cookie支持(#2070) HttpClient代理类型是可自定义。...适配器和改进FunctionInvoker,带有显示其用法更新示例。...spring默认fork值-启动:停止出现不一致情况 #25483 当使用配置为过滤器执行器和控制器时,应用程序无法启动 #25449 在Spring Boot 2.4中@EntityScan不支持属性替换...#25436 SpringApplication可以替换现有的默认属性源 #25408 引导程序初始化方法应命名为initialize #25400 包含spring boot devtools会导致代理类上包私有

    1.7K20

    基于SpringBoot打造在线教育系统(2)-- 深入学习JPA与Junit测试

    spring-boot-starter-test test </dependency...其他数据全没了,看来这种更新是全量更新,不是增量。我还以为他会只更新userName和password呢,看来是我太天真了。不怕,我再运行一下adduser测试方法,数据不就回来了嘛。。...只需要按照Spring Data JPA提供方法命名规则定义方法名称,就可以完成查询工作。...Spring Data JPA在程序执行时候会根据方法名称进行解析,并自动生成查询语句进行查询 按照Spring Data JPA 定义规则,查询方法以findBy开头,涉及条件查询时,条件属性用条件关键字连接...比如,我们现在要查询nickName里面带有“剽悍”,就用like。

    69720

    深入探索:Spring JdbcTemplate数据库访问之歌

    基本使用在本节中,我们将介绍如何在Spring应用程序中使用JdbcTemplate执行基本数据库操作,包括配置数据源、创建JdbcTemplate bean以及执行SQL查询更新操作。...执行SQL更新操作除了查询操作,JdbcTemplate还提供了一组update方法,用于执行SQL更新操作,如插入、更新删除。...更新操作详解接下来,我们将探讨使用Spring JdbcTemplate执行更新操作方法,包括插入数据、更新数据、删除数据以及如何使用JdbcTemplate批处理功能提高更新操作效率。...通过以上介绍,我们了解了使用Spring JdbcTemplate执行更新操作各种方法,包括插入数据、更新数据、删除数据以及如何使用批处理功能提高更新操作效率。...Spring Boot会自动扫描并加载带有@SpringBootApplication注解类,并根据类路径和配置文件自动配置应用程序属性和依赖项,包括数据源和JdbcTemplate等。

    30900

    SpringBoot系列教程JPA之update使用姿势

    查询更新 根据某个条件来更新对应数据,这个就比较常见了,在jpa中,没有找到根据方法名来支撑这种场景方式,但是发现了另外一个有意思东西--jql 直接在方法方面,添加注解,注解内部写sql /**...1") void addMoneyById(Integer id, Long money); 上面就是一个查询更新case,注意两个注解 @Modifying 这个必须有,告诉框架我们执行更新/删除操作...从堆栈描述上来看,更新/删除必须要开启事务,那么事务是什么东西呢?...小结 利用JPA实现表数据更新,上面主要介绍了两种方式, save + jql save 通过save更新时,需要指定id来实现单条记录修改 jql 语法与sql差不多,配合两个注解 @Modifying.../blob/master/spring-boot/102-jpa 相关博文 mysql之锁与事务详解 Spring学习之事务使用姿势 Spring学习之事务管理与传播属性 190612-SpringBoot

    2.2K10

    springboot(十一):Spring boot中mongodb使用

    mongodb增删改查 Spring Boot对各种流行数据源都进行了封装,当然也包括了mongodb,下面给大家介绍如何在spring boot中使用mongodb: 1、pom包配置 pom包里面添加...mongoTemplate.updateFirst(query,update,UserEntity.class); //更新查询返回结果集所有 //...userEntity集合数据 db.userEntity.find() 根据3查询结果来观察测试用例执行是否正确。...多数据源mongodb使用 在多mongodb数据源情况下,我们换种更优雅方式来实现 1、pom包配置 添加lombok和spring-boot-autoconfigure包引用 <dependency...spring-boot-autoconfigure - 就是spring boot自动化配置 2、配置文件使用YAML形式添加两条数据源,如下: mongodb: primary: host

    2.2K60

    SpringBoot - 05. 数据访问之JDBC(源码分析+代码下载)

    JDBC API 属于Java APIJDBC用于以下几种功能:连接到数据库、执行SQL语句 二、Spring Boot中如何使用JDBC 2.1 创建 Spring Boot Project 时引入...") 3.1 自动选择数据源 如果导入了org.apache.tomcat.jdbc.pool.DataSource数据源,并且配置spring.datasource.type配置是org.apache.tomcat.jdbc.pool.DataSource...用Always模式则每次启动spring boot重复执行脚本(创建表脚本都是先判断有没有表,有则删除后重建) private boolean isEnabled() { DataSourceInitializationMode...", value = "需要更新部门id"), @ApiImplicitParam(name = "name", value = "需要更新部门名称") }) @PostMapping("/update...value = "需要删除部门id") }) @PostMapping("/delete") public int deleteDepartment(@RequestParam Long id) {

    82610

    Spring Boot 实战开发》 附录 II : Spring Boot 2.0 新特性《Spring Boot 实战开发》 附录 II : Spring Boot 2.0 新特性Kotlin

    远程CRaSH Shell 不再支持远程CRaSH Shell,删除远程SSH执行器(actuator)支持。 Spring Loaded 移除Spring Loaded支持。...Build 执行器Actuator代码分为两个模块:现有的spring-boot-actuator和新spring-boot-actuator-autoconfigure。...如果使用Flyway或Liquibase管理数据源,并且使用嵌入式数据库,Spring Boot现在将自动关闭Hibernate自动DDL功能。...例如,如果您希望始终执行Spring Batch initialization,您可以设置: spring.batch.initialize-schema=always....此消息确保您知晓在视图渲染(view rendering)期间可执行数据库查询(database queries)。

    3.2K30

    SpringBoot项目整合Mybatis入门,看这一篇就够了

    因此,MyBatis 成为了国内市场主流持久层框架 MyBatis 配置文件包括两个部分,一个是基础配文件,另一个是映射文件。...: 插入标签,代表一条insert sql语句 : 更新标签,代表一条update sql语句 : 查询标签,代表一条查询sql语句...Boot 中,我们可以依赖 MyBatis 社区提供 starter 例如, Maven 加入依赖包,如代码如下所示: org.mybatis.spring.boot...lastUpdatedBy": "x_heshengfu", "lastUpdatedTime": "2020-10-08 19:34:05" } ] } 注:某些最后更新时间与创建时间不一致是由于笔者在允许之前调用过更新接口导致...application.properties或application.yaml等应用配置文件中提供数据源和mybatis配置即可; mybatis-spring-boot-starter中自动配置类在项目启动过程中检测到数据源配置后会自动装配一个

    2.8K60

    Spring Boot 2.4.5、2.3.10 发布

    13、JVM退出时,未打包JAR不会被删除 #25774 14、TLD模式与Tomcat不一致 #25770 15、执行rest模板度量定制阻止RootUriRequestExpectationManager.forRestTemplate...时配置Maven故障保护插件 #25832 10、更新用于删除目标的弃用警告 #25825 依赖更新 1、Upgrade to AppEngine SDK 1.9.88 #26006 2、Upgrade...当关闭带有CassandraSpring Boot应用程序时#25796 6、DefaultErrorWebExceptionHandler未删除元类型当出现质量值时 #25778 7、JVM退出时,...未打包JAR不会被删除 #25773 8、TLD模式未与Tomcat对齐 #25764 9、URI标记http.client.requests请求度量忽略REST模板根URI #25744 10、执行...示例中使用main作为分支名称 #25865 3、更突出地记录DataJpaTest sets spring.jpa.show-sql默认为true #25843 4、更新用于删除目标的弃用警告 #25808

    2.7K40

    Spring Boot3.0升级,踩坑之旅,附解决方案

    本文基于 newbeemall 项目升级Spring Boot3.0踩坑总结而来,附带更新说明:Spring-Boot-3.0-发布说明 Spring-Boot-3.0.0-M5-发布说明一.....*; 不存在这个报错主要是Spring Boot3.0已经为所有依赖项从 Java EE 迁移到 Jakarta EE API,导致 servlet 包名修改,Spring团队这样做原因,主要是避免...大量第三方库关于 Spring Boot starter 依赖失效,导致项目启动报错博主升级到3.0后,发现启动时,Druid 数据源开始报错,找不到数据源配置,便怀疑跟 Spring boot 3.0...写法,导致大量第三方 starter 依赖失效在吐槽一下,这么重要更改在Spring官方 Spring-Boot-3.0-发布说明 中竟然没有,被放在了 Spring-Boot-3.0.0-M5-...Spring Boot 3.0),这会导致项目中sql查询直接报错,这里主要是因 Spring Boot 3.0中删除 NestedIOException 这个类,在 Spring boot 2.7中这个类还存在

    2.4K121

    瑞吉外卖实战项目全攻略——优化篇第二天

    systemctl restart network # 重启mysql systemctl restart mysqld 保证数据信息一致 目前我们两台数据库中信息要保持一致,否则我们在后续操作时会导致错误...SQL语句 # 登录数据库 mysql -uroot -p123456 # 执行下列语句(生成一个用户,使其具有查询日志权力) GRANT REPLICATION SLAVE ON *.* to '...xiaoming'@'%' identified by 'Root@123456'; 登录数据库,执行下面SQL语句,记录信息 # 执行语句(你将会看到日志相关信息,接下来不要对数据库操作,因为操作会导致日志信息改变...# 登录数据库 mysql -uroot -p123456 # 执行下列语句(使用该用户查询日志,注意内容是需要修改) # master_host主库IP,master_user主库用户,master_password...,我们将数据库拆分为主库和从库 其中主库负责事务性增删改操作,从库负责处理查询操作,能够有效避免数据更新导致行锁,使整个系统查询性得到巨大提升 Sharding-JDBC介绍 Sharding-JDBC

    77750

    Spring boot项目搭建(前端到数据库,超详细),大神勿进!

    金三银四如何准备面试 技术栈 Spring Boot 、Jpa 、Thymeleaf、HTML、Maven、MySQL。 对于技术栈,还不清楚同学,自行查找相关资料,至少知道个大概是干啥。...创建Spring Boot项目 可以使用spring官网给创建方式,地址: https://start.spring.io/ 这里也可以参考另外一篇文章: 如何快速构建Spring Boot基础项目?...发现此时用户手机号已经修改完了。 到这里,我们已经做了用户新增、单个用户信息查询、多个用户信息查询、单个用户信息修改。剩下删除功能留给大家自己去做。相信大家也是很轻松就能完成。...总结 本文使用了技术栈: Spring Boot +Jpa + Thyneleaf +MySQL+Maven+HTML 实战演练一个用户信息新增、查询、修改。...好了,一个简单用户信息模块就这样了,删除就靠你们自己去实现了。非常简单~,如有疑惑、问题可以随时联系我。

    87910

    Spring Boot2(四):使用Spring Boot实现多数据源过程

    前言 实际业务场景中,不可能只有一个库,所以就有了分库分表,多数据源出现。实现了读写分离,主库负责增改删,从库负责查询。...这篇文章将实现Spring Boot如何实现多数据源,动态数据源切换,读写分离等操作。...注意:这里需要注意是,从Spring Boot2开始,在配置多数据源时有些配置发生了变化,网上许多教程使用spring.datasource.url。...解决方法:配置多数据源时,将spring.datasource.url配置改为spring.datasource.jdbc-url 3、添加主库配置信息 依据知名博主:纯洁微笑,写博文我们来分析一波...是一样,必须保持不同,否则idea就会提示报错Duplicate prefix 导致只有主库可以执行Mybatis配置,从库无效。

    1.3K30

    springboot第29集:springboot项目详细

    连接池 # 多数据源配置 可参考 https://gitee.com/baomidou/dynamic-datasource-spring-boot-starter spring:   datasource...在Spring Boot应用程序中,领域模型通常是用来表示业务实体Java类,例如用户、订单、产品等。...表结构变更:如果在数据库表结构发生了变化,例如添加或删除了某些列,而代码中插入操作没有相应地更新,也可能导致这个错误。...使用参数化查询:推荐使用参数化查询执行数据库插入操作,而不是直接拼接SQL语句。这样可以避免SQL注入问题,并且更容易管理参数和值匹配。...因为TRUNCATE TABLE操作是不可逆,一旦执行就会永久删除表中所有数据。 此操作可能需要具有足够权限数据库用户来执行

    31030

    走进Java接口测试之持久层框架Spring-data-jpa

    数据源支持 同源数据库多源支持 日常接口测试中因为测试项目使用分布式开发模式,不同服务有不同数据源,常常需要在一个项目中使用多个数据源,因此需要配置 Spring-data-jpa对多数据源使用...,一般分一下为三步: 配置多数据源 不同源实体类放入不同包路径 声明不同包路径下使用不同数据源、事务支持 异构数据库多源支持 比如项目中,即需要对 mysql支持,也需要对mongodb查询等...该参数几种配置如下: create:每次加载 hibernate 时都会删除上一次生成表,然后根据你model类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失一个重要原因...update:最常用属性,第一次加载 hibernate时根据 Entity 类会自动建立起表结构(前提是先建立好数据库),以后加载 hibernate时根据 model类自动更新表结构,即使表结构改变了但表中行仍然存在不会删除以前行...name 查询 User 实体和按 name和 age 查询 User实体,可以看到我们这里没有任何类SQL语句就完成了两个条件查询方法。

    2.5K20

    芋道 Spring Boot 分库分表入门

    当然,它不仅仅能够提供上述两个功能,也能提供分布式事务、数据库治理。 《为什么几乎所有的开源数据库中间件都是国内公司开源?并且几乎都停止了更新?》...在这里,我们可以看到 ds-orders-0 ,表名该物理 SQL ,是路由到 ds-orders-0 数据源执行。 同时,查询是 order_config 表。...那么,一次性发起这么多条 Actual SQL 是不是会顺序执行导致很慢呢?实际上,Sharding-JDBC 有 执行引擎 ,会并行执行这多条 Actual SQL 操作。...所以呢,最终操作时长,由最慢 Actual SQL 所决定。 虽然说,执行引擎 提供了并行执行 Actual SQL 操作能力,我们还是推荐尽可能查询时候,带有片键(分库分表字段)。...读写分离 在 《芋道 Spring Boot数据源(读写分离)入门》 「9.

    2K10
    领券