Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用Spring切换动态事务?_Java_Spring_Hibernate_Architecture_Spring Transactions - Fatal编程技术网

Java 如何使用Spring切换动态事务?

Java 如何使用Spring切换动态事务?,java,spring,hibernate,architecture,spring-transactions,Java,Spring,Hibernate,Architecture,Spring Transactions,首先,非常感谢您阅读我的文章 我有一个具有以下体系结构的web应用程序: WEB <-> ManagedBean (JSF) <-> Service <-> DAO -> DataBase 1 -> DataBase 2

首先,非常感谢您阅读我的文章

我有一个具有以下体系结构的web应用程序:

WEB <-> ManagedBean (JSF) <-> Service <-> DAO
                                               -> DataBase 1
                                               -> DataBase 2
                                               -> DataBase n
是否可以动态更改数据库连接?模式完全相同,但是我需要(取决于ManagedBean上的参数)使用不同的事务管理器

我在DAO上放置了一个拦截器,读取了一个hibernate文件,启动了selects,它就可以工作了,但是在事务上下文中是不可能的,因为Spring在它创建的事务中进行提交

先谢谢你

是否可以动态更改数据库连接


如果使用事务性注释,唯一的方法是更改数据源定义(在应用程序上下文中)。但是不,如果不更改事务实现,就不能单独在java中以编程方式完成

支持不启动事务,知道事务在哪里启动吗?我可以在事务注释中添加一个表示数据源的最终参数,但我需要动态执行。如果可以直接执行,我会将它放在我的答案中。另一种选择是使用N个服务层bean实例,每个实例都绑定到不同的数据源,并通过服务的路由实现动态路由到它们。如果将服务层拆分为许多类,可能会出现问题;我已经为不同的数据源定义了一个个人Spring作用域,并且,不是只有一个服务类实例,而是每个数据源都有一个实例,但是现在我需要使用新的数据源配置、XML或try-catch块来加载新的服务。你觉得怎么样?:)不看代码很难说,但是因为没有标准的首选解决方案,你可以选择任何适合你的解决方案。所以。。。我必须编写自己的允许变量的事务注释,不是吗?不,您不能在运行时更改注释。您必须使用事务性注释以外的其他内容,如@mrembisz所说。或者更改数据源定义(我假设它在您的应用程序上下文中)。我知道我有两个选择:1。删除注释,并通过XML配置来完成,创建XML dinamically或2。删除注释并通过try-catch块执行事务。
@Transactional("myDataSource")
public void doCommit( MyObject object );