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

Spring boot升级到2.2后不会触发Spring batch作业

宦炜
2023-03-14

我有以下基于xml的批处理配置,但作业没有得到执行。我没有看到任何错误,而提出的应用程序,我怀疑有一个错误的配置,我无法找出。以下是配置

application.java如下所示:

@SpringBootApplication(exclude= {ValidationAutoConfiguration.class, WebMvcAutoConfiguration.class })
@ImportResource("classpath:/application.xml")
@ComponentScan(value = "com.abc.xyz.app.configuration") //retrives dataSource
@EnableScheduling
@EnableTransactionManagement
public class Application extends SpringBootServletInitializer{

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);     
    }
}
    <import resource="classpath:/app-batch-context.xml"/>   
    <import resource="classpath:/job_1.xml"/>   
    <import resource="classpath:/schdeuler_1.xml"/>

app-batch-context.xml包含以下内容。

<bean id="jobRegistry" class="org.springframework.batch.core.configuration.support.MapJobRegistry"/>

        <bean id="jobLauncher" class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
            <property name="jobRepository" ref="appJobRepository"/>
        </bean>

        <bean id="jobExplorer" class="org.springframework.batch.core.explore.support.JobExplorerFactoryBean">
            <property name="dataSource" ref="dataSource"/>
        </bean>

        <bean id="jobOperator" class="org.springframework.batch.core.launch.support.SimpleJobOperator">
            <property name="jobExplorer" ref="jobExplorer"/>
            <property name="jobLauncher" ref="jobLauncher"/>
            <property name="jobRepository" ref="appJobRepository"/>
            <property name="jobRegistry" ref="jobRegistry"/>
        </bean> 

       <bean id="appJobRepository" class="org.springframework.batch.core.repository.support.JobRepositoryFactoryBean">
           <property name="dataSource" ref="dataSource"/>
           <property name="lobHandler" ref="lobHandler"/>
           <property name="serializer" ref="xStreamExecutionContextStringSerializer"/>
           <property name="transactionManager" ref="transactionManager"/>
        </bean>

       <bean id="xStreamExecutionContextStringSerializer" class="org.springframework.batch.core.repository.dao.XStreamExecutionContextStringSerializer"/>        
       <bean id="lobHandler" class="org.springframework.jdbc.support.lob.DefaultLobHandler"/>

       <!-- Wrapper bean to hold the applicationcontext, and make it accessible to all the objects-->
       <bean id="appContext" class="com.app.core.AppContextInitializer"></bean>     
       <bean id="stepListner" class="com.app.core.step.APPStepExceutionListner"></bean>
       <bean id="jobListner" class="com.app.core.job.APPJobExecutionListner"></bean>  

       <!-- abstract base Job, all jobs will extend this Job -->
       <batch:job id="APPBaseJob" abstract="true" job-repository="appJobRepository">
             <batch:listeners>
                    <batch:listener ref="jobListner"/>
             </batch:listeners>
       </batch:job>

       <!-- abstract base Job, all the steps will extend this step-->
       <batch:step id="abstractStep" abstract = "true">
             <batch:listeners>
                    <batch:listener ref ="stepListner"/>
             </batch:listeners>
       </batch:step>

job_1.xml

<batch:job id="myTestJob" parent="APPBaseJob">

        <batch:step id="myTestPreProcessorStep" next="myTestStopProcessingDecider">         
            <batch:tasklet ref="myTestPreProcessorTasklet"/>
        </batch:step>

        <batch:decision id="myTestStopProcessingDecider" decider="stopProcessingDecider">
            <batch:next on="CONTINUE" to="myTestFileNameValidatorStep" />
            <batch:end on="COMPLETED"/>
        </batch:decision>
        .
        .
        .
<batch:step id="myTestCustomInputValidatorStep" next="myTestTransformStep">         
            <batch:tasklet ref="myTestCustomInputValidatorTasklet"/>
        </batch:step>

        <batch:step id="myTestTransformStep" parent="abstractStep" next="myTestFileTransferStep">
            <batch:tasklet>
                <batch:chunk reader="myTestFileItemReader" processor="myTestXmlProcessor" writer="myTestItemWriter" 
                    commit-interval="#{stepExecutionContext.get('APPBATCHCONTEXT').appBatch.toBeProcessedSize}"/>
            </batch:tasklet>
        </batch:step>

         <batch:step id="myTestFileTransferStep" next="myTestPostProcessorStep">
            <batch:tasklet ref="myTestFileTransferTasklet"/>
        </batch:step>   

    </batch:job>

    <!-- File Reader -->
    <bean class="com.app.core.reader.v1.APPJaxbFileEntityReader" id="myFileItemReader" scope="step">
        <property name="batchContext" value="#{stepExecutionContext.get('APPBATCHCONTEXT')}"></property>
        <property name="packageName" value="com.abc.jaxb.xyz.extract"></property>
    </bean>

    <!-- File Content Writer-->
    <bean class="com.app.core.writer.v1.APPXmlJaxbItemWriter" id="myItemWriter" scope="step">
        <property name="batchContext" value="#{stepExecutionContext.get('APPBATCHCONTEXT')}"></property>    
        <property name="packageName" value="com.abc.jaxb.xyz.extract"></property>
    </bean>


  <bean id="myXmlProcessor" class="com.abc.app.xyz.customprocessor.XMLDocumentProcessor" scope="step">
    <property name="batchContext" value="#{stepExecutionContext.get('APPBATCHCONTEXT')}"></property>
    <property name="somePropertyDataService" ref="somePropertyDataService"/>
  </bean>

  <bean id="myFileTransferTasklet" class="com.abc.xyz.customsender.mySenderTasklet">
    <property name="stepSkipDeciders" ref="skipStepDeciders"></property>
    <property name="router" ref="myRouter"></property>
  </bean>

  <bean class="com.abc.xyz.app.customsender.ABCRouter"
        id="myRouter"></bean>
<bean id="transactionManager" class="org.springframework.transaction.jta.WebSphereUowTransactionManager" /> 

Scheduler有以下信息:使用自定义jobLauncher,但反过来使用org.springframework.batch.core.launch.jobLauncher来运行作业。

<task:scheduler id="myScheduler" pool-size="1"/>
    <bean id="myLauncher" class="com.abc.xyz.job.APPJobLauncher">
        <property name="jobCode" value="abc"></property>
    </bean>
    <task:scheduled-tasks scheduler="abcScheduler">
        <task:scheduled ref="myLauncher" method="startJob" cron="${abcFreq}"/>
    </task:scheduled-tasks> 

共有1个答案

梁新觉
2023-03-14

在application.java中使用@enableBatchProcessing进行简单尝试

  @SpringBootApplication(exclude= {ValidationAutoConfiguration.class,         WebMvcAutoConfiguration.class })
  @ImportResource("classpath:/application.xml")
  @ComponentScan(value = "com.abc.xyz.app.configuration") //retrives  dataSource
  @EnableScheduling
  @EnableBatchProcessing
  @EnableTransactionManagement
  public class Application extends SpringBootServletInitializer{

  public static void main(String[] args) {
    SpringApplication.run(Application.class, args);     
  }
}
 类似资料:
  • 为了帮助大伙儿升级,我们为现在的Apache用户提供了一份重要信息的文档说明。这些只是一些简要说明,你可以从新特性文档或src/CHANGES文件中得到更多信息。 这篇文档仅仅描述了从版本 2.0 到 2.2 的变化,如果你是从1.3版进行升级的,请查考从1.3升级到2.0文档。 编译时配置的改变 编译过程与2.0版本非常相似,你曾经使用过的configure命令行(在安装目录下的build/co

  • WARNING 本升级指南仅适用于 2.2 版本升级至 2.3 版本,如果你并非 2.2 版本,请查看其他升级指南,Plus 程序不允许跨版本升级! 更新代码 预计耗时: 2 小时 这是你自我操作的步骤,确认将你的 2.2 版本代码升级到 2.3 版本,如果你做过一些自定义修改可能会出现代码冲突,你需要解决。 升级依赖 预计耗时: 3 分钟 进入 Plus 程序目录,执行: composer up

  • WARNING 本升级指南仅适用于 2.1 版本升级至 2.2 版本,如果你并非 2.1 版本,请查看其他升级指南,Plus 程序不允许跨版本升级! 更新代码 预计耗时: 1 小时 这是你自我操作的步骤,确认将你的 2.1 版本代码升级到 2.2 版本,如果你做过一些自定义修改可能会出现代码冲突,你需要解决。 升级依赖 预计耗时: 3 分钟 进入 Plus 程序目录,执行: composer up

  • 我正在运行《docker compose》中的jenkins,来自图片jenkins/jenkins。升级到Jenkins 2.277.1后,LDAP身份验证停止工作,我无法登录。我收到以下错误: 詹金斯。docker。new\u 1 | 2021 06-04 14:49:31.3110000[id=138]警告o.j.p.p.DiskUsageCollector#collect:无法获取磁盘使用

  • 与pip一起运行命令会出现以下错误。甚至命令也会产生以下错误。 我读到这个错误是由setupols版本31.0.0引起的,它应该低于28.0.0。但是我的setupols的版本是26.1.1,它仍然给出了相同的错误。

  • 我在升级到JPA 2.2时遇到问题。我正在使用eclipselink并在pom中更改了版本: 我还更新了持久性。指向xsd正确版本的xml: 问题是我收到以下错误消息: 持久性。xml文件没有此JPA平台支持的内容。 我看了日食留档,没有什么东西在我身上跳出来。 有什么想法吗?