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

当Spring Boot启动批处理作业时,将JobRepositoryFactoryBean转换为JobRepostory会导致ClassCastExc的异常

督辉
2023-03-14

原因:org . spring framework . beans . bean instantiation exception:无法实例化[org . spring framework . batch . core . configuration . annotation . jobbuilderfactory]:工厂方法“jobBuilders”引发异常;嵌套异常是java.lang.ClassCastException:

org.springframework.batch.core.repository.support.JobRepositoryFactoryBean$$EnhancerBySpringCGLIB$$ba801bb9

无法转换为org . spring framework . beans . factory . support . simpleinstantiationstrategy . instantiate(simpleinstantiationstrategy . Java:185)...18由以下原因导致的常见帧省略:Java . lang . classcastexception:org . spring framework . batch . core . repository . support . jobrepository factory bean $ $ enhancerbyspringglib $ $ ba 801 bb 9无法转换为org . spring framework . batch . core . repository . job repository at org . spring framework . batch . core . configuration . annotation . simplebatch configuration $ $ enhancerbyspring glib $ $ 9641 e37 a . job repository()。CG lib $ job builders $ 8()at org . spring framework . batch . core . configuration . annotation . simple batch configuration $ $ enhancerbyspringglib $ $ 9641 e37a $ $ FastClassBySpringCGLIB $ $ 19e 6 f1 ca . invoke()at org . spring framework . CG lib . proxy . method proxy . invoke super(method proxy . Java:244)at org . spring framework . contextent . annotation . configurationclassenhancer $ bean method interceptor . interceptor(configuration classenhancer . Java:363)

尝试使用 Spring 引导运行批处理作业

@SpringBootApplication
@Import(value = {BatchJobConfig.class, AJobConfig.class})
@ImportResource("classpath:META-INF/spring/batch-context.xml")
public class MyApp {

    /**
     * @param args
     */
    public static void main(final String[] args) {
        SpringApplication.run(MyApp.class);
    }

}

试图使AJobConfig成为DefaultBatchConfigurer的子类,但实际上不起作用。无论是否添加@EnableBatchProcessing,都会出现此错误。尝试将@EnableBatchProcessing添加到MyApp.java和AJobConfig.java。

如果有人能帮忙指出我是否明显遗漏了什么,我将不胜感激?

我正在使用 Spring 引导 2.1.8、Spring批处理 4.1.2、Spring 5.1.6

@Configuration
public class BatchJobConfig {

    @Bean
    @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
    public JobExecutionListener myJobListener() {
        return new MyJobExecutionListener();
    }

}

@Configuration
public class MyJobConfig extends MyAbstractJobConfig {

    @Override
    @Bean
    public String jobName() {
        return "MYJOB";
    }

    @Bean("MYJOB")
    public Job myJob() {
        return newJobBuilder() //
                .next(parms01Step())
                .build();

    }

    @Bean("PARMS01")
    public Step parms01Step() {
        return newStepBuilder("PARMS01") //
                .execute(Cblparmc.class, "zzzzz") //
                .build();
    }
}

batch-context.xml除了定义一个占位符之外什么也不做

<context:property-placeholder location="classpath:/config/my-batch*.properties"/>

在AbstractMyJobConfig中,有自动连接的bean,但没有什么特别的

@Autowired
protected JobBuilderFactory jobBuilderFactory;

@Autowired
protected StepBuilderFactory stepBuilderFactory;

共有1个答案

司空均
2023-03-14

在看了几次下面的链接后,我终于找到了问题的原因。Spring批处理配置异常

问题是,在xml bean定义(批处理:作业存储库)中有一个名为jobRepository的。对于@EnableBatchProcessing,我认为这不是必需的。此外,这可能会导致Spring boot自动配置的问题?

删除bean定义将解决所描述的问题。

 类似资料:
  • 我遵循了spring批处理文档,无法异步运行我的作业。 因此,我从一个web容器运行该作业,该作业将通过RESTendpoint触发。 我想让JobInstance ID在完成整个作业之前传递它作为响应。因此,他们可以稍后使用JobInstance ID检查作业的状态,而不是等待。但我没能让它工作。下面是我尝试过的示例代码。请让我知道我错过了什么或错了什么。 BatchConfig创建异步JobL

  • 我的服务是开始Spring批工作。我希望能够传递一些对象给作业,每次这个对象参数都会不同。这个对象我需要在我的任务中使用。我开始工作的JobLauncher。据我谷歌,我看到JobParameters不会帮助我在这种情况下。此外,我发现很多答案是使用JobExecttionContext或任何东西。但是我想在作业开始前注入参数对象。它是可拥有的吗? 开始工作的服务 我的小任务

  • 我有一个spring批处理作业,从CSV文件读取并写入数据库。我想让它重新启动。例如,如果在读取文件或写入db时出现异常,导致作业失败,则应从失败的同一点/块重新开始,而不是从头开始读取整个文件。 我正在从一个endpoint触发作业启动器,并在我的控制器中配置了它。 目前,我正在通过控制器将参数(这是一个唯一的标识符/数字)传递给作业参数,以运行新的作业实例。如果作业失败,我将使用与GET请求中

  • 我开始学习spring batch,遇到一个问题,当我想使用在数据库中持久化作业的状态时。编译器显示: “原因:org.springframework.beans.factory.beanCreationException:创建类路径资源[springconfig.xml]中定义的名为'job repository'的bean时出错:调用init方法失败;嵌套异常为java.lang.noClas

  • 我有一个用Spring Boot(1.4.1.Release)开发的Spring批处理作业。 它成功地从命令行运行,并将作业执行数据写入MySQL。它在Spring Batch Admin(2.0.0.M1,指向MySQL)中显示为不可启动的作业,我可以看到作业执行度量。 我想知道以前有没有人这样做过。文档中有一节添加您自己的启动作业。但是它没有指定在哪里为作业添加实现jar? 是spring-b

  • 是否可以配置Spring批处理管理员来启动主作业和从作业。我们有一个进程作为主节点和3-4个从节点。 Spring batch admin在单独的JVM进程中运行,但所有Spring批处理作业都使用相同的批处理数据库模式。