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

如果我使用的是基于xml的配置,如何通过CommandLineRunner运行spring批处理作业?

洪昱
2023-03-14

我正在读取txt文件,并在我的xml下面用itemprocessor编写csv文件

<!-- JobRepository and JobLauncher are configuration/setup classes -->
<bean id="jobRepository" class="org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean" />

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


<!-- ItemReader reads a complete line one by one from input file -->
<bean id="flatFileItemReader" class="org.springframework.batch.item.file.FlatFileItemReader"  scope="step">
    <property name="resource" value="classpath:Test.txt" />

    <property name="lineMapper">

        <bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper">

            <property name="fieldSetMapper">
                <!-- Mapper which maps each individual items in a record to properties in POJO -->
                <bean class="com.chaman.springbatch.ResultFieldSetMapper" />
            </property>

            <property name="lineTokenizer">
                <!-- A tokenizer class to be used when items in input record are separated by specific characters -->
                <bean class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer">
                    <!-- <property name="delimiter" value="|" /> -->
                </bean>
            </property>

        </bean>

    </property>

</bean>
<bean id="flatFileItemWriter" class="org.springframework.batch.item.file.FlatFileItemWriter" scope="step">`

`

    <property name="resource" value="file:csv/Result.csv" />

    <property name="lineAggregator">

        <!-- An Aggregator which converts an object into delimited list of strings -->
        <bean class="org.springframework.batch.item.file.transform.DelimitedLineAggregator">

            <!-- <property name="delimiter" value="|" /> -->

            <property name="fieldExtractor">

                <!-- Extractor which returns the value of beans property through reflection -->
                <bean class="org.springframework.batch.item.file.transform.BeanWrapperFieldExtractor">
                    <property name="names" value="number" />
                </bean>
            </property>
        </bean>
    </property>
</bean>

<!-- XML ItemWriter which writes the data in XML format -->
<!-- <bean id="xmlItemWriter" class="org.springframework.batch.item.xml.StaxEventItemWriter">

    <property name="resource" value="file:xml/examResult.xml" />

    <property name="rootTagName" value="UniversityExamResultList" />

    <property name="marshaller">

        <bean class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
            <property name="classesToBeBound">
                <list>
                    <value>com.websystique.springbatch.model.ExamResult</value>
                </list>
            </property>
        </bean>

    </property>

</bean> -->

<!-- Optional ItemProcessor to perform business logic/filtering on the input records -->
<bean id="itemProcessor" class="com.chaman.springbatch.ResultItemProcessor" />

<!-- Optional JobExecutionListener to perform business logic before and after the job -->
<bean id="jobListener" class="com.chaman.springbatch.ResultJobListener" />

<!-- Step will need a transaction manager -->
<bean id="transactionManager" class="org.springframework.batch.support.transaction.ResourcelessTransactionManager" />

<!-- Actual Job -->
<batch:job id="ResultJob">
    <batch:step id="step1">
        <batch:tasklet transaction-manager="transactionManager">
            <batch:chunk reader="flatFileItemReader" writer="flatFileItemWriter"    processor="itemProcessor" commit-interval="10" />
        </batch:tasklet>
    </batch:step>
    <batch:listeners>
        <batch:listener ref="jobListener" />
    </batch:listeners>
</batch:job>

共有1个答案

淳于健
2023-03-14

如果我使用的是基于xml的配置,如何通过CommandLineRunner运行spring批处理作业?

这在文档中解释,请参见从命令行运行作业。这里有一个例子:

java CommandLineJobRunner myJob-configuration.xml myJob param=value
 类似资料:
  • 我正在使用Spring批处理设置一个作业服务器。我的JdbcCursorItemReader需要配置sql,该sql在每个作业运行的基础上进行更改。因为sql发生了变化,所以我希望阅读器具有@stepscope,这样我就不需要担心sql的状态性了。 所以我设置了这样一个类: 我在整个服务器上使用基于Java的配置。ItemReader的一个实例的bean如下所示: 启动服务器并运行Spring批处

  • 到目前为止,我正在运行spring批处理,只有一个作业。现在我想运行多个不同的作业,这意味着不同的功能。在我的配置文件中,我配置了两个具有不同id和不同名称的作业。现在我得负责这些工作。你能告诉我怎么跑吗。在这里,我的疑问是在我的java类中,我已经为运行批处理编写了这段代码。 对于其他作业,如何调用jobLauncher的run方法。 我的配置文件是

  • 问题内容: 运行main方法时,将执行作业。这样我无法弄清楚如何控制作业的执行。例如,您如何安排作业,访问作业执行或设置作业参数的方式。 我试图注册自己的JobLauncher 但是当我尝试在主要方法中使用它时: 当加载上下文时,该作业再次执行,而当我尝试手动运行它时,我得到了。有没有办法防止自动作业执行? 问题答案: 通过设置可以防止作业执行 在application.properties中。或

  • 我按照这个示例使用Boot进行Spring批处理。 运行main方法时,作业将执行。这样我就不知道如何控制作业的执行了。例如如何排定作业、访问作业执行或设置作业参数。 我尝试注册自己的JobLauncher 但当我尝试在主法中使用时: 当加载上下文时,再次执行作业,并且尝试手动运行作业时得到。有没有办法防止自动执行作业?

  • 我有一个作业流,我希望以以下方式运行它: 作业流将从Job1开始。在Job1成功完成后,Job1将同时启动Job2和Job4。 Job2和Job4将并行运行。 在Job2成功完成后,Job2将启动Job3。 在Job4成功完成后,Job4将启动Job5。 下面是job1.xml和job1的作业启动器类的代码片段: job1.xml uijobLauncher.java “job2,Job3”对和“

  • 附言。我是新的Spring配置在Java配置Spring Boot和Spring批处理...