Java 运行时具有多个数据源的spring批处理

Java 运行时具有多个数据源的spring批处理,java,datasource,spring-batch,Java,Datasource,Spring Batch,我必须在表中的一些已配置数据库之间爬行。其中每个记录指定要从中读取的模式。因此,我们必须轮询表并适当地运行作业 考虑使用SpringBatch(JdbcPagingItemReader)从所有配置的模式中读取数据。如果我必须对此进行配置,如何使用Spring批处理进行配置 我应该为每个数据库读取多个具有不同读取器的作业,还是有任何方法可以在运行时发送数据源,以便Spring批处理从中读取数据 如何为单个Spring批处理管理多个数据库。如果没有,对数据库爬网(或获取)还有其他建议吗?如果您只是运

我必须在表中的一些已配置数据库之间爬行。其中每个记录指定要从中读取的模式。因此,我们必须轮询表并适当地运行作业

考虑使用SpringBatch(JdbcPagingItemReader)从所有配置的模式中读取数据。如果我必须对此进行配置,如何使用Spring批处理进行配置

我应该为每个数据库读取多个具有不同读取器的作业,还是有任何方法可以在运行时发送数据源,以便Spring批处理从中读取数据


如何为单个Spring批处理管理多个数据库。如果没有,对数据库爬网(或获取)还有其他建议吗?

如果您只是运行一个查询来获取一些数据,然后再运行其他查询,那么这与Spring Batch所做的并不一致。这只是一个标准的JDBC或JPA类型的DAO/服务设置。您可以使用Quartz或Spring Scheduler在检查表时设置CRON值

使用Spring Batch有两种解决方案:

  • 在运行时通过
    JobParameters
    传递
    DataSource
    属性(url、用户名、密码……)。这意味着第一次读取的读取逻辑(告诉您要读取什么的逻辑)必须在作业之外完成
  • 有一个包含两个步骤的作业,第一个步骤执行“元数据”读取并将结果存储在
    JobExecutionContext
    中,第二个步骤使用以前在运行时存储的值执行实际读取

谢谢您的回复。但我以不同的方式解决了这个问题。我已经删除了JdbcPagingItemReader的setDatasource(),并根据Jobparameter键注入了一个数据源值。因此,我只是简单地将键名映射到数据库中的数据源名,并在运行时进行相应的处理。正如你所说的,我也可以根据SetDataSource方法中的jobParameters构建一个数据源,但是将数据库密码放在任何地方都不是那么安全else@BrainC我不是在运行一个查询,它有一个处理器和一个编写器。不管怎样,谢谢你,布莱恩,我的问题解决了