当前位置: 首页 > 知识库问答 >
问题:

Spring批处理中多数据源的使用

白飞飙
2023-03-14

我试图在Spring批处理中配置几个数据源。启动时,Spring批处理抛出以下异常:

若要使用默认的BatchConfigurerer,上下文只能包含一个以上的数据源,找到2

批处理配置的代码段

@Configuration
@EnableBatchProcessing 
public class BatchJobConfiguration {

    @Primary
    @Bean(name = "baseDatasource")
    public DataSource dataSource() {
         // first datasource definition here
    }
    @Bean(name = "secondaryDataSource")
    public DataSource dataSource2() {
         // second datasource definition here
    }
    ...
}

不知道为什么我会看到这个异常,因为我看到了一些基于xml的Spring批处理配置,这些配置声明了多个数据源。我使用的是Spring批处理核心版本3.0.1.发行版和Spring Boot版本1.1.5.发行版。如有任何帮助,将不胜感激。

共有1个答案

洪宏硕
2023-03-14
package batch_config;
...
@EnableBatchProcessing
@ComponentScan(basePackageClasses = MyBatchConfigurer.class)
public class MyBatchConfig {
    ...
}
package batch_config.components;
import org.springframework.batch.core.configuration.annotation.DefaultBatchConfigurer;
import org.springframework.stereotype.Component;
@Component
public class MyBatchConfigurer extends DefaultBatchConfigurer {
}
@Configuration
public class BatchTestDatabaseConfig {
    @Bean
    @Primary
    public DataSource dataSource()
    {
        return .........;
    }
}

这适用于Spring批处理版本3.0.3发行版

要使DataSource上的@primary批注工作,最简单的解决方案可能是添加@componentscan(basePackageClasses=DefaultBatchConfigurer.class)以及@EnableBatchProcessing批注:

@Configuration
@EnableBatchProcessing
@ComponentScan(basePackageClasses = DefaultBatchConfigurer.class)
public class MyBatchConfig {
 类似资料:
  • 我有一个spring批处理应用程序,可以将5M条记录从一个文件加载到SQL Server数据库中。我有根据国家代码区分的不同数据源。当我使用带有@primary注释的单个数据源时,spring batch writer在5分钟内写入5M条记录。但是,当我使用@bean注释给出多个数据源并使用一个非主数据源将文件数据写入数据库时,perforamnce变得非常慢,对于同样的500万条记录,大约需要1

  • 我需要访问两个数据源: Spring批处理存储库:在内存H2中 我的步骤需要访问。 我在那里看到了几个关于如何创建自定义

  • 我正在编写Spring批的Spring Boot应用程序,其中ItemReader从Oracle数据库读取数据并将数据写入postgres sql,但我得到了以下错误 我不想创建spring批处理元数据表,我的应用程序不需要监视作业,请就此向我提出建议。提前谢谢!!

  • 我使用的是Spring Batch 2.1.8。释放我有一个文件,它由一些头信息和一些需要处理的记录组成。 我有一个使用面向块处理的步骤。该步骤包含ItemReader和ItemWriter的实现。ItemReader实现是线程安全的,而ItemWriter不是。 我想在处理(或写入)任何记录之前使用标题信息。在继续使用面向块的处理时,如何确保这一点? 建议的解决方案:一种解决方案可以是编写一个预

  • 我试图在spring boot项目中配置spring批处理,我想在没有数据源的情况下使用它。我发现是一条可行之路,但我无法让它发挥作用。问题是我已经定义了另外3个数据源,但我不想在springBatch中使用其中任何一个。 我已经检查了默认实现,如果找不到数据源,它将完全按照我的要求执行。问题是我有三个,不想用任何一个。 请不要建议使用hsql或其他内存DB,因为我不想这样。

  • 基于Spring boot和batch的项目。我需要使用h2数据库来存储spring批处理表的元数据,以及spring JPA的postgre(由ItemWriter使用)。 我在属性文件中定义了两个独立的属性。 现在,在@配置文件中,为了链接我定义的批处理数据源, 但是,我没有在其他任何地方使用另一个jpa(postgre)db配置(计划将其与JPA链接)。 当我试图运行的项目,我得到下面的异常