该应用程序是在Spring休眠.它有一个进程,在这个进程下,来自3个模式的mysql表得到更新.我有不同的dataSources,sessionFactories和每个架构的transactionManagers.我有3个DAO类在各自执行数据库操作架构表.因为所...
>该应用程序是在Spring休眠.
>它有一个进程,在这个进程下,来自3个模式的mysql表得到更新.
>我有不同的dataSources,sessionFactories和
每个架构的transactionManagers.
>我有3个DAO类在各自执行数据库操作
架构表.
>因为所有数据库操作都应该在一个单独的操作之下
事务,我从一个服务方法调用那些dao方法.
但问题是我不知道如何注释这个服务方法@Transactional. Transactional annotation只接受一个事务管理器,但我有3个.
我的方法有误吗?我怎么解决这个问题?
解决方法:
如果您需要协调多个事务资源,那么我认为您唯一的选择是使用JTA进行分布式事务管理.
This article解释了如何配置Spring以使用JTA事务管理器.
编辑:
在做了一些研究之后,如果你的三个数据源真的只指向同一服务器托管的不同模式(与mysql中的数据库相同),那么你似乎有了更好的选择.如果是这种情况,并且您有一个用于所有三个连接的用户,那么您基本上可以将它们合并为一个连接,并在您的实体上使用@Table注释来指定它们所属的架构,例如: @Table(schema =“schemaX”).
这样做是因为连接URL中给出的数据库名称只指定了默认数据库(参见doc),但您仍然可以执行使用其他数据库名称限定表名的SQL语句,这正是@Table注释导致Hibernate的原因. .
现在有一个单独的连接可以解决您在不同模式的表中进行原子更新的原始问题.
本文标题为:java – 服务方法的事务管理器,它对来自多个模式的表执行数据库操作
- java线程池参数位置导致的夺命故障宿主机打不开 2023-01-03
- 基于SpringBoot整合SSMP的详细教程 2023-04-07
- 利用Java实现文件锁定功能 2023-04-12
- 微信小程序获取手机号的完整实例(Java后台实现) 2023-01-09
- feign开启日志Logger.Level feignLoggerLevel()中Level爆红的解决 2023-02-05
- JSP 中request与response的用法详解 2023-07-31
- JSP中的PreparedStatement对象操作数据库的使用教程 2023-08-02
- mybatis-plus 插入修改配置默认值的实现方式 2023-02-19
- java+jsp+mysql电影订票管理系统,特别适合做期末作业和毕业设计 2023-11-04
- log4j日志格式加入自定义字段信息方式 2023-08-10