我正在开发一个应用程序,其中我必须根据从客户端传递的客户id连接到不同的数据库。所有数据库的模式都是相同的。它是一种多租户应用程序。由于我不知道会有多少客户,我无法使用xml配置静态创建数据源,因此我必须手动创建数据源。
我们使用Spring JdbcTemplate连接到数据库,连接参数来自另一个保存应用程序配置的数据库。我能够正确连接到数据库,但方法调用不会在事务中发生。下面的代码片段只对一个数据库进行了数据库连接,我打算将其扩展到多个数据库:
BasicDataSource datasource = new BasicDataSource();
// set database connection params
....
// create jdbcTemplate,
jdbcTemplate = new JdbcTemplate(datasource);
// create transaction managers
PlatformTransactionManager txManager = new DataSourceTransactionManager(datasource);
我的想法是手动创建事务管理器,并以某种方式将其绑定到spring容器中,以便所有带有@Transactional注释的方法/类都可以使用该事务管理器。我不知道如何绑定txManager,这样所有带有@Transactional的方法/类都将使用这个事务管理器。我不确定这是否正确,是否应该为每个数据源创建一个事务管理器,因为我不希望事务跨越多个数据库,但我希望每个服务方法调用都应该在一个事务中。注意:我的所有服务类都有@Component和@Transactional注释。
我用正确的方法解决问题了吗?
您可以使用spring的AbstractRoutingDatasource。
请检查以下链接。解释了AbstractRoutingDatasource。在这里,数据库根据所选语言进行动态更改。
Spring AbstractRoutingDatasSource
我认为下面的答案提供了你想要的。否则,您将需要一个全局事务管理器。全局事务管理器将与JEE容器捆绑在一起,或者可以由TrnAction管理器(如Atomikos)单独提供。Spring文档涵盖了这两个方面
问题内容: 我在Junit应用程序上下文文件中定义了三个(JDBC)。其中两个需要进行事务管理;使用这两个数据源时,我不必链接任何方法(它们完全彼此独立)。 当我使用单个事务管理器作为时,我没有问题,即使已被使用但未在相应方法中进行管理。尽管如此,在还需要管理来自各种DAO类的方法(仅使用这些方法)后,我添加了第二个事务- 。上下文文件包含以下内容: 由于要定义多个事务管理器,因此我用他们自己的值
我想要一些关于Spring Batch处理中数据流的信息,但在Internet上找不到我要找的东西(尽管本网站上有一些有用的问题)。 我正在努力建立在我们公司使用Spring Batch的标准,我们想知道当一个步骤中的多个处理器更新不同数据源上的数据时,Spring Batch的行为如何。 这个问题侧重于分块过程,但可以随意提供有关其他模式的信息。 从我所看到的情况来看(如果我错了,请纠正我),当
我有一个Spring mvc rest webservice,它带有一个保存数据源地图的数据源管理器bean。每个客户都有自己的数据库,因此也有自己的数据源。webservice以编程方式从DataSourceManager加载客户数据源,如果不存在,则创建一个新的。 通过这种实现,可以使用注释驱动的事务管理吗?我阅读的所有示例都在配置文件中声明了一个或多个数据源。
null 下面是一个示例代码- 我的问题是,updateDb02中的setRollbackOnly()只回滚Db01事务。
我试图从这里用我当前的应用程序实现数据源代理 我在Spring xml中配置了数据源对象,即在dataSourceProxy对象中传递dataSourceReal。 侦听器和过滤器与文档中一样正确配置。 Spring xml文件: 数据源名称的JNDI名称的xml文件: 我得到了这个错误: 请帮忙。
我正在构建一个spring boot应用程序,它有多个数据源、实体管理器、事务管理器和数据库。每一个都是为一个客户提供的,并共享相同的DAO、服务。 数据源之间的切换工作得很好。但我对交易有问题 这里是我的配置: } 根据配置文件加载数据源。像LoadCust4DatasourceCondition之类的类用于检查是否加载。 我的数据源配置文件是: 我的服务就像: 我的刀是这样的: 在服务级别,如