线程" main"中的例外情况org.spring .... beans.factory.BeanCreationException:创建名称为' FirstStep'的bean时出错:bean的实例化失败

时间:2015-12-24 06:19:16

标签: spring-batch

我正在尝试运行我的应用程序时遇到错误。我正在使用spring批量修补来运行多个job的线程。我得到的异常是步骤名称是bean的实例化失败;嵌套异常是java.lang.IllegalStateException:没有在bean定义上指定bean类。请建议我任何一个。

Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'Step': Instantiation of bean failed; nested exception is java.lang.IllegalStateException: No bean class specified on bean definition
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1071)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1016)
    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:300)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:296)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:660)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:760)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
    at john.deere.com.PartApp.runTest(PartApp.java:18)
    at john.deere.com.PartApp.main(PartApp.java:13)
Caused by: java.lang.IllegalStateException: No bean class specified on bean definition
    at org.springframework.beans.factory.support.AbstractBeanDefinition.getBeanClass(AbstractBeanDefinition.java:354)
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:66)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1064)
    ... 14 more
我的配置文件中的

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

            <context:component-scan base-package="john.deere.com" />
            <import resource="applicationContext.xml"/>
            <import resource="ApplicationDB.xml"/>

       <job id="partitionJob" xmlns="http://www.springframework.org/schema/batch">

        <!-- master step, 10 threads (grid-size)  -->
        <step id="Step">
        <partition step="slave" partitioner="rangePart">
            <handler grid-size="10" task-executor="taskExecutor" />
        </partition>
        </step>

<step id="slave" xmlns="http://www.springframework.org/schema/batch">
            <tasklet>
                <chunk reader="itemReader" processor="itemProcessor" writer="itemWriter" commit-interval="1" />
            </tasklet>
        </step> 
      </job>



        <bean id="rangePart" class="john.deere.com.PartitionerEx" />

        <bean id="taskExecutor" class="org.springframework.core.task.SimpleAsyncTaskExecutor" />

        <bean id="itemProcessor" class="john.deere.com.EmpProcessor"
            scope="step">
            <property name="threadName" value="#{stepExecutionContext[name]}" />
        </bean>

        <!-- csv file writer -->
        <bean id="itemWriter" class="org.springframework.batch.item.file.FlatFileItemWriter"
            scope="step" >
            <property name="resource"
                value="file:csv/outputs/employee.processed#{stepExecutionContext[fromId]}-#{stepExecutionContext[toId]}.csv" />
            <!-- <property name="appendAllowed" value="false" /> -->
            <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="id, name, age, salarey, address" />
                        </bean>
                    </property>
                </bean>
            </property>
        </bean>

        <bean id="itemReader"
        class="org.springframework.batch.item.database.JdbcPagingItemReader"
        scope="step">
        <property name="dataSource" ref="dataSource" />
        <property name="queryProvider">
          <bean
            class="org.springframework.batch.item.database.support.SqlPagingQueryProviderFactoryBean">
            <property name="dataSource" ref="dataSource" />
            <property name="selectClause" value="select id, name, age, salary, address" />
            <property name="fromClause" value="from employee" />
            <property name="whereClause">
             <value>
             <![CDATA[
             where id >= :fromId and id <= :toId
             ]]>
             </value>
             </property>
            <property name="sortKey" value="id" />
          </bean>
        </property>
        <!-- Inject via the ExecutionContext in rangePartitioner -->
        <property name="parameterValues">
          <map>
            <entry key="fromId" value="#{stepExecutionContext[fromId]}" />
            <entry key="toId" value="#{stepExecutionContext[toId]}" />
          </map>
        </property>
        <property name="pageSize" value="10" />
        <property name="rowMapper">
            <bean class="john.deere.com.EmpRowMapper" />
        </property>
      </bean>

    </beans>

1 个答案:

答案 0 :(得分:0)

您步骤奴隶是在作业标签之外定义的。这看起来不正确

...

  </step>
</job>
  <step id="slave" xmlns="http://www.springframework.org/schema/batch">
    <tasklet>

...