当前位置: 首页 > 面试题库 >

有没有办法正确整合spring-batch-admin和spring-boot?

淳于飞鸾
2023-03-14
问题内容

根据文档, spring
batch admin非常容易嵌入到现有应用程序中。只需复制web.xml和index.jsp,然后添加所需的依赖项就足以使其正常工作。

但是,如果我想在现有的Spring
Boot项目中使用它,那就越来越糟了。根据此示例,配置有些麻烦,但是可以使用。直到我尝试@EnableBatchProcessing在我的configuriton
bean中使用注释。然后我得到以下异常。

Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jobBuilders' defined in class path resource [org/springframework/batch/core/configuration/annotation/SimpleBatchConfiguration.class]: Instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: Factory method [public org.springframework.batch.core.configuration.annotation.JobBuilderFactory org.springframework.batch.core.configuration.annotation.AbstractBatchConfiguration.jobBuilders() throws java.lang.Exception] threw exception; nested exception is java.lang.ClassCastException: org.springframework.batch.core.repository.support.JobRepositoryFactoryBean$$EnhancerBySpringCGLIB$$49fa0273 cannot be cast to org.springframework.batch.core.repository.JobRepository
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:597)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1095)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:990)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:504)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:706)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:762)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482)
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:109)
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:691)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:320)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:952)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:941)
    at demo.Application.main(Application.java:35)
Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: Factory method [public org.springframework.batch.core.configuration.annotation.JobBuilderFactory org.springframework.batch.core.configuration.annotation.AbstractBatchConfiguration.jobBuilders() throws java.lang.Exception] threw exception; nested exception is java.lang.ClassCastException: org.springframework.batch.core.repository.support.JobRepositoryFactoryBean$$EnhancerBySpringCGLIB$$49fa0273 cannot be cast to org.springframework.batch.core.repository.JobRepository
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:188)
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:586)
    ... 17 more
Caused by: java.lang.ClassCastException: org.springframework.batch.core.repository.support.JobRepositoryFactoryBean$$EnhancerBySpringCGLIB$$49fa0273 cannot be cast to org.springframework.batch.core.repository.JobRepository
    at org.springframework.batch.core.configuration.annotation.SimpleBatchConfiguration$$EnhancerBySpringCGLIB$$b5c6eb04.jobRepository(<generated>)
    at org.springframework.batch.core.configuration.annotation.AbstractBatchConfiguration.jobBuilders(AbstractBatchConfiguration.java:58)
    at org.springframework.batch.core.configuration.annotation.SimpleBatchConfiguration$$EnhancerBySpringCGLIB$$b5c6eb04.CGLIB$jobBuilders$8(<generated>)
    at org.springframework.batch.core.configuration.annotation.SimpleBatchConfiguration$$EnhancerBySpringCGLIB$$b5c6eb04$$FastClassBySpringCGLIB$$d88bd05f.invoke(<generated>)
    at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
    at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:312)
    at org.springframework.batch.core.configuration.annotation.SimpleBatchConfiguration$$EnhancerBySpringCGLIB$$b5c6eb04.jobBuilders(<generated>)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:166)
    ... 18 more

我的配置非常简单,我有两个配置bean

@Configuration
@ImportResource({"classpath:/org/springframework/batch/admin/web/resources/servlet-config.xml", 
        "classpath:/org/springframework/batch/admin/web/resources/webapp-config.xml"})
public class BatchAdminConfiguration {
}

@Configuration
@EnableBatchProcessing
public class BatchImporterConfiguration { 
}

当我删除@EnableBatchProcessing并尝试使用JobBuilderFactory创建作业并使用@StepScope注释时,我得到了其他ClassCastExceptions。

现在,我正在使用基于xml的配置来创建作业,步骤和其他bean。它工作正常,但实际上我会提供xml免费配置。有没有一种方法可以轻松集成spring
boot,spring batch和spring batch admin?


问题答案:

简短的答案是您不想@EnableBatchProcessing与Spring Batch Admin
一起使用。SBA在全球范围内@EnableBatchProcessing还提供了许多Bean 。SBA
2.0(当前正在开发中)可能会填补当前@EnableBatchProcessing提供的内容JobBuilderFactory与提供的内容(特别是and
StepBuilderFactory)之间的空白。

为了使自己运行,您应该能够( 我自己还不厌倦 )在META-INF/spring/batch/override/目录a
JobBuilderFactory和a中StepBuilderFactory进行配置以供全局使用。从那里,您可以使用目录中的XML文件,该文件META- INF/spring/batch/jobs只不过是对@Configuration类进行组件扫描。但是,@EnableBatchProcessing由于重复了bean
,请不要使用。

记录下来,这不是Spring Boot问题,因为@EnableBatchProcessing它是Spring Batch批注,而不是Boot。



 类似资料:
  • 注意:该项目正在移至 Spring Attic,不建议用于新项目。 建议使用 Spring Cloud Data Flow 替代,以管理和监视以后的 Spring Batch 作业。可以在此处阅读有关迁移到 Spring Cloud Data Flow 的更多信息。 Spring Batch Admin 是基于Spring Batch应用的监控管理工具,使用用Spring Batch Admin,通过web控制台监控和操作Job。

  • 根据文档,spring batch admin非常容易嵌入到现有的应用程序中。简单地复制web.xml和index.jsp,然后添加所需的依赖项就足以使其工作。 但是如果我想在一个现有的spring boot项目中使用它,它会变得更糟。根据这个例子,这个配置有点蹩脚,但是它可以工作。直到我尝试在我的configuriton bean中使用注释。然后我得到以下异常。 我的配置很简单我有两个配置bea

  • 我有一个Spring批处理项目,它使用基于注释的配置,并且是一个工作代码本身。现在我想将它与一个新的Spring Batch管理项目集成。我尝试了一些博客中可用/回答的解决方案,比如将批处理项目的依赖项添加到批处理管理项目中,并修改META-INF/spring/batch/servlet/override/context-config.xml文件以指向批处理项目配置文件。即。job包存在于Spr

  • 我正在尝试用Mockito模拟我的房间数据库,以便我可以在我的存储库中测试复杂的算法。无论我朝哪个方向走,我都会遇到很多不同的错误。 首先,我试图模仿整个数据库对象,这创建了一个空接口异常。 为了解决这个问题,我使用了房间的静态对象生成器。(这是一个仪器化的单元测试,所以我可以访问底层的Android依赖项) 有了这个,我收到了一个被滥用的匹配器异常… org.mockito.exceptions

  • 问题内容: Go的范围可以遍历地图和切片,但是我想知道是否有一种方法可以遍历一系列数字,例如: 还是有一种方法可以像Go语言中的Ruby 类那样在Go中表示整数范围? 问题答案: 您可以并且应该只编写一个for循环。简单,明显的代码就是Go方式。

  • 我使用spring-batch和Spring-Boot完成了一个项目。 业务模式MySQL 和修改的application.properties: 这是副作用。除了java配置之外,我的应用程序还使用了applicationContext.xml。