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

spring batch

邵锐
2023-03-14

我开发了一个spring批处理,用于将用户加载到DB中。我能够从提供主类的eclipse中作为Java应用程序运行它,但不能通过unix服务器上的shell脚本运行批处理。我得到了这个例外:

    org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'jobLauncher' is defined
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:529)
at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1095)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:277)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1093)
at com.batch.LoadBatch.launchJob(LoadBatch.java:56)
at com.batch.LoadBatch.main(LoadBatch.java:38)

我在job.xml文件中声明了bean,如下所示

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:batch="http://www.springframework.org/schema/batch"
       xsi:schemaLocation="http://www.springframework.org/schema/batch
        http://www.springframework.org/schema/batch/spring-batch-2.2.xsd
        http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
        http://www.springframework.org/schema/jdbc 
        http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd"">

<bean
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <value>classpath:LoadBatch.properties </value>
        </property>
    </bean>

    <bean id="jobRepository" class="org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean">
        <property name="transactionManager" ref="transactionManager" />
    </bean>

    <bean id="transactionManager" class="org.springframework.batch.support.transaction.ResourcelessTransactionManager" />

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

    <!--
        *****************************productLoadJob********************************
    -->

    <bean id="completionPolicy" class="org.springframework.batch.repeat.policy.DefaultResultCompletionPolicy"/> 

    <bean id="multiResourceReader"
        class=" org.springframework.batch.item.file.MultiResourceItemReader" scope="step">
        <property name="resources" value="file:///${inputFilePath}*.csv" />
        <property name="delegate" ref="flatFileItemReader" />
    </bean>

    <bean id="flatFileItemReader" class="org.springframework.batch.item.file.FlatFileItemReader" scope="step">
        <property name="lineMapper">
            <bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper">
                <property name="fieldSetMapper">
                    <bean class="com.mapper.IndividualRetailerFieldSetMapper" />
                </property>
                <property name="lineTokenizer">
                    <bean class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer">
                        <property name="delimiter" value="," />
                    </bean>
                </property>
            </bean>
        </property>
        <property name="linesToSkip" value="1" />
    </bean>

    <bean id="flatFileItemWriter" 
          class="org.springframework.batch.item.file.FlatFileItemWriter" scope="step">
        <property name="resource" value="file:${outputFilePath}${outputFileName}.${outputFileType}" />
        <property name="appendAllowed" value="true" />
        <property name="lineAggregator">
          <bean class="org.springframework.batch.item.file.transform.DelimitedLineAggregator">
            <property name="delimiter" value="," />
            <property name="fieldExtractor">
                <bean   
                  class="org.springframework.batch.item.file.transform.BeanWrapperFieldExtractor">
                    <property name="names" value="serialNo,mobileNo,role,parentId" />
                </bean>
            </property>
          </bean>
        </property>
    </bean>

    <bean id="itemProcessor" class="com.handlers.LoadWriter" scope="step">
        <property name="LoadFileHandler" ref="filehandler" />       
        <property name="LoadFieldSetMapper" ref="LoadFieldSetMapper"/>
        <property name="opId" value="ABC" />
        <property name="buId" value="XYZ" />
    </bean>

    <bean id="batchExceptionListner" class="com.handlers.LoadBatchExceptionListener" >
        <property name="irLoadFileHandler" ref="filehandler" />
    </bean>
    <bean id="filehandler" class="com.handlers.IRLoadFileHandler" />
    <bean id="IRLoadFieldSetMapper" class="com.handlers.IRLoadFieldSetMapper" />
    <bean id="skipExceptionListner" class="com.handlers.IRLoadSkipExceptionListener" />


    <batch:job id="IRLoadJob">
        <batch:step id="importFileStep">
            <batch:tasklet>
               <batch:chunk reader="multiResourceReader" writer="flatFileItemWriter"
                            processor="itemProcessor" commit-interval="1">
               </batch:chunk>               
            </batch:tasklet>
        </batch:step>
        <batch:listeners>
                    <batch:listener ref="batchExceptionListner" />
        </batch:listeners>
    </batch:job>
</beans>
    context = new ClassPathXmlApplicationContext(new String[] {"classpath*:Job.xml"});
        logger.info("context in Spring Initializer is :: " + context.getBeanDefinitionCount());

共有1个答案

游鸣
2023-03-14

我将属性和xml文件放在两个位置,即在我的批处理jar中,以及在服务器上配置批处理的位置。我从jar中移除了文件,我的批处理开始运行!:)

 类似资料:
  • 主要内容:面向读者,前提条件,问题反馈Spring Batch是一个轻量级框架,用于在开发企业应用程序中批处理应用程序。 本教程解释了Spring Batch的基本概念,并展示了如何在实际环境中使用它。 面向读者 本教程对于那些需要处理大量涉及诸如事务管理,作业处理统计,资源管理等重复操作的记录的专业人员来说尤其有用。Spring Batch是处理大容量的非常有效的框架 批量作业。 前提条件 Spring Batch建立在Spring

  • 我试图使用两个数据源,一个用于Spring批处理的元数据表,另一个是我的应用程序数据库,用于读取/处理/写入。

  • 我正在编写spring批处理,它从平面文件中读取数据,很少进行处理,并将摘要写入输出文件。与reader相比,我的处理器和写入程序相对更快。我正在使用FlatFileItemReader,并尝试了从50-1000开始的各种提交间隔。我的批处理作业必须以更快的速度处理1000万条记录。请告诉我如何提高FlatFileItemReader的速度。粘贴到我的配置文件和映射器类下面,读取字段集并将值设置为

  • 我想用3个步骤建立一个批次。我想配置这个步骤,就像如果有100条记录,当step1读取、处理和写入一个10块时,step02,然后step03开始和结束,然后再次返回step1,读取下一个块。这在Spring批量可能吗?

  • 我正在尝试对作业使用Spring批处理。我有两个作业tempJob和tempJob2在两个单独的配置中。当尝试使用命令行参数(-dspring.batch.job.names=tempJob)运行tempJob时,SpringBatch尝试运行tempJob两次,我得到以下错误 2018-06-15 11:36:37.956信息14436---[main]O.S.B.C.L.Support.Sim

  • 我有一个springbatch应用程序,我将连接到一个网络数据库进行阅读。我发现的大多数示例都嵌入了数据库,用于独立测试。我不想那样做。我不确定配置是否类似。以下是我所拥有的最具德国特色的部分(带有一些异议): ,然后从应用程序启动: 我没有配置数据源。我不确定,因为我的基本上只是一个到远程网络数据库的客户端连接,它的配置是否会与我找到的各种示例的嵌入式设置不同。所以我自然会出错(如下)。我只是在

  • 用例:步骤1:ItemReader:从数据库中读取1000个ItemProcessor块中的数据:处理这些数据。ItemWriter:将数据写入地图,以便下一步使用 步骤2:ItemReader:读取地图ItemProcessor:处理地图数据并获取新对象。ItemWriter:将新的进程对象持久化到数据库中。 现在我希望Map在整个作业中保持不变,目前我已经为Map创建了一个不同的POJO类,并

  • 我们的SpringBatch作业只有一个步骤,包括ItemReader、ItemProcessor和ItemWriter。我们用不同的参数同时运行同一个作业。ItemReader是有状态的,因为它包含从中读取的输入流。 因此,我们不希望ItemReader的相同实例用于每个JobInstance(作业参数)调用。 我不太确定哪种是这种情况的最佳“范围界定”。 1) 该步骤是否应该以@JobScop