Field or property 'jobParameters' cannot be found on object of type 'org.springframework.beans.facto

 

JobParameters

      顾名思义,所谓JobParameters,就是Job运行时的参数。它在bath中有两个作用:一是标示不同的jobInstance,二是作为job中用到的信息,以参数的形式传给job。

      如何使用JobParameters呢?它主要是在启动的job的时候,与job联系起来的。看一下框架提供的启动job的接口JobLauncher的 源代码,就会发现其run方法需要两个参数,一个是Job,也就是需要启动的job,另一个就是JobParameters。可以通过如下方式使用:

      jobLauncher.run(job, new JobParametersBuilder() 

                                           .addString("para1", "value1") 

                                           .addString("para2","value2")

                                           .toJobParameters()

                              );

如代码所示,参数para1和para2就可以传给Job了,在Job中如果需要使用参数信息,可以使用Spring注入的方式传给不同的使用对象。

<bean:bean id="itemReader" class="com.wanggc.springbatch.BatchItemReader" scope="step">
      <bean:property name="filePath" value="#{jobParameters['inputFilePath']}" />
</bean:bean>

注意需要设置Bean的scope属性为step,这是SpringBatch的一个后绑定技术,就是在生成Step的时候,才去创建bean,因 为这个时候jobparameter才传过来。如果加载配置信息的时候就创建bean,这个时候jobparameter的值还没有产生,会抛出异常。

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'spotReader10' defined in class path resource [jp/pioneer/ncs/imagelogreportbatch/resources/imageLogReportBatch.xml]: Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanExpressionException: Expression parsing failed; nested exception is org.springframework.expression.spel.SpelEvaluationException: EL1008E:(pos 0): Field or property 'jobParameters' cannot be found on object of type 'org.springframework.beans.factory.config.BeanExpressionContext'
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:527)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:609)
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:469)
	at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
	at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:93)
	at jp.pioneer.ncs.imagelogreportbatch.batch.ImagelogreportbatchLaunch.main(ImagelogreportbatchLaunch.java:43)
Caused by: org.springframework.beans.factory.BeanExpressionException: Expression parsing failed; nested exception is org.springframework.expression.spel.SpelEvaluationException: EL1008E:(pos 0): Field or property 'jobParameters' cannot be found on object of type 'org.springframework.beans.factory.config.BeanExpressionContext'
	at org.springframework.context.expression.StandardBeanExpressionResolver.evaluate(StandardBeanExpressionResolver.java:142)
	at org.springframework.beans.factory.support.AbstractBeanFactory.evaluateBeanDefinitionString(AbstractBeanFactory.java:1299)
	at org.springframework.beans.factory.support.BeanDefinitionValueResolver.evaluate(BeanDefinitionValueResolver.java:210)
	at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:182)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1360)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1118)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517)
	... 11 more

 

来源://作者:/更新时间:2013-05-09
相关文章
评论:
验证码:
匿名评论:

最新文章

文章排行