【问题标题】:how create datasource programmatically in spring batch?如何在春季批处理中以编程方式创建数据源?
【发布时间】:2020-01-02 09:44:10
【问题描述】:

我想将许多数据从 diff 机器上的服务器数据库复制到中心数据库。 我认为春季批次可能是满足我要求的选择。 所以。应该做很多工作来完成整个任务,工作会是这样的:

job A: copy from db1 to db111;
job B: copy from db2 to db111;
job C: copy form db3 to db111;

等等... 而db1、db2、db3...中的表则大相径庭。

到目前为止,我知道如何在 Spring Boot 启动时创建数据源,但我不知道如何在运行时在作业实例中创建数据源。有什么想法吗? (如果能支持spring data jpa就更好了)

或者有什么比spring batch更好的方法吗?

谢谢。

【问题讨论】:

  • @SimonMartinelli,是的,可以,但我真的不喜欢硬编码 sql。谢谢
  • 但这就是你想要做的。顺便提一句。有很多工具可以进行数据库迁移,也许你甚至根本不需要开发它
  • @SimonMartinelli。你的意思是水壶或任何其他工具?
  • 像 Talend 这样的 ETL 工具可以满足您的所有需求。但你应该从比较选项开始

标签: spring-boot spring-data-jpa spring-batch


【解决方案1】:

数据源是一组与数据库的连接,因此在您的场景中,只有多种类型的数据库或多个相同类型的数据库,并且适用于两种场景 - 您必须为每个数据库创建一个数据源,然后使用它在您需要的任何地方的代码中。

第 1 步 - 因此,您为每个数据库编写一个配置类来设置一个数据源。在适当的文件级别,您将无法使用默认属性,但您将在自定义属性中使用数据库名称为属性添加前缀以进行区分。

您需要为每个数据源定义事务管理器等,并且您唯一地命名每个数据源。

第 2 步:下一步是使用适当的数据源和适当的 dao 类。在上面的配置类中,如果你使用 JPA ,那些配置已经存在,包括实体包、存储库包等。 JdbcTemplate 在构造函数等中获取数据源。

All in All - 场景类似于单一数据源场景,您必须在应用启动时提前设置所有数据源,但使用适当的限定 bean 名称,然后在任何需要的地方使用这些数据源。

This Answer is what works for me

【讨论】:

  • 如果我有50个数据源,我应该在属性文件中配置50个数据源,那么当spring boot启动时,所有的数据源都会被创建,这可能不是一个好主意。谢谢。
  • 你真的有这么多数据源还是只是理论上说的?任何像Spring Boot这样的低级编程框架都不适合您描述的场景,您需要使用其他人描述的更高级别的工具。
  • 是的,我真的有这么多数据源,可能更多。所以我应该找到一个工具来处理它。我需要一个计划来管理许多任务,每个任务连接两个数据库,一个一个地执行所有任务。
猜你喜欢
  • 1970-01-01
  • 2014-07-21
  • 2017-03-26
  • 1970-01-01
  • 2022-08-02
  • 2014-12-15
  • 2018-05-27
  • 2015-05-13
  • 2017-06-25
相关资源
最近更新 更多