spring batch 任务运行时提示No job configuration with the name解决办法
2017-07-14 16:35
2581 查看
spring batch 任务运行时提示No job configuration with the name解决办法
开发环境
spring bootspring batch
idea
jdk8
win7
涉及代码(部分)
启动类:InfrastructureConfiguration.java@Configuration @EnableBatchProcessing(modular = true) public class InfrastructureConfiguration { @Autowired JobRepository jobRepository; @Autowired public DataSource dataSource; @Bean public ApplicationContextFactory flatfileToDbPartitioningJob(){ return new GenericApplicationContextFactory(FlatfilePartitioningJobConfiguration.class); } }
job类:FlatfilePartitioningJobConfiguration.java:
@Configuration public class FlatfilePartitioningJobConfiguration { @Autowired private ResourcePatternResolver resourcePatternResolver; @Autowired private JobBuilderFactory jobBuilders; @Autowired private StepBuilderFactory stepBuilders; @Autowired public DataSource dataSource; @Bean public Job flatfileToDbPartitioningJob(){ return jobBuilders.get("flatfileToDbPartitioningJob") //.listener(protocolListener()) .start(partitionStep()) .build(); } @Bean public Step partitionStep(){ return stepBuilders.get("partitionStep") .partitioner(flatfileToDbStep()) .partitioner("flatfileToDbStep", partitioner()) // .taskExecutor(taskExecutor()) .taskExecutor(new SimpleAsyncTaskExecutor()) .build(); } }
单元测试类:InfrastructureConfigurationTest.java
@RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest(classes = AellelibBatchApplication.class) @WebAppConfiguration public class InfrastructureConfigurationTest { @Autowired private JobRegistry jobRegistry; @Autowired private JobLauncher jobLauncher; @Autowired private Job job; @Test public void testFlatfileToDbPartitioningJob() throws NoSuchJobException, JobParametersInvalidException, JobExecutionAlreadyRunningException, JobRestartException, JobInstanceAlreadyCompleteException { Job job = jobRegistry.getJob("flatfileToDbPartitioningJob"); JobParameters jobParameters = new JobParametersBuilder().addString("flatfileToDbPartitioningJob",""+System.currentTimeMillis()).toJobParameters(); JobExecution jobExecuton = jobLauncher.run(job,jobParameters); System.out.println(jobExecuton.getEndTime()); } }
运行InfrastructureConfigurationTest中的testFlatfileToDbPartitioningJob()时报”No job configuration with the name [flatfileToDbPartitioningJob] was registered”的异常,详细如下:
org.springframework.batch.core.launch.NoSuchJobException: No job configuration with the name [flatfileToDbPartitioningJob] was registered at org.springframework.batch.core.configuration.support.MapJobRegistry.getJob(MapJobRegistry.java:66) at com.aellelib.batch.configuration.InfrastructureConfigurationTest.testFlatfileToDbPartitioningJob(InfrastructureConfigurationTest.java:106) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75) at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86) at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:252) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191) at org.junit.runner.JUnitCore.run(JUnitCore.java:137) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68) at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:51) at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:237) at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
仔细检查代码觉得都没有问题,并且网络上对job的定义都是类似这样定义的:
FlatfilePartitioningJobConfiguration.java:
@Bean public Job flatfileToDbPartitioningJob(){ return jobBuilders.get("flatfileToDbPartitioningJob") //.listener(protocolListener()) .start(partitionStep()) .build(); }
折腾了好一阵后,把对job的定义修改成如下就可以了:
把定义的方法名由flatfileToDbPartitioningJob()修改为job()
FlatfilePartitioningJobConfiguration.java:
@Bean public Job job(){ return jobBuilders.get("flatfileToDbPartitioningJob") //.listener(protocolListener()) .start(partitionStep()) .build(); }
具体原因不是特别清楚,个人猜测应该是跟spring boot和spring batch job的注册机制有关。若有知道的请赐教。
相关文章推荐
- 串口调试,提示the given port name does not start with COM/com异常解决办法,,发现是打印机在搞怪
- unable to locate configuration files of the name struts-plugin.xml提示信息的解决办法
- Android Studio gradle 编译提示‘Error:Configuration with name 'default' not found.’ 解决办法
- unable to locate configuration files of the name struts-plugin.xml提示信息的解决办法
- struts2提示“There is no Action mapped for namespace [/] and action name [XXX]... ”错误的解决办法
- py2exe生成exe后,运行exe时提示No module named * 的解决办法
- Your build settings specify a provisioning profile with the UUID, no provisioning profile ...问题的解决办法
- py2exe生成exe后,运行exe时提示No module named * 的解决办法
- LR场景运行提示:This Vuser already started a transaction with the same name, and has not yet processed the
- 举例android项目中的string.xml出现这个The character reference must end with the ';' delimiter.错误提示的原因及解决办法
- Hibernate报错:org.hibernate.ObjectNotFoundException: No row with the given identifier exists 解决办法
- Linux运行shell脚本提示No such file or directory错误的解决办法
- git 出现The current branch is not configured for pull No value for key branch.master.merge found in configuration错误的解决办法
- IAR的STlink下载出现 Failed to set configuration with MCU name STM8S207MB: SWIM error [30006]:解决办法
- No configuration found for the specified action解决办法
- No configuration found for the specified action解决办法
- android No resource found that matches the given name attr的一种解决办法
- Linux运行脚本命令提示No such file or directory错误的解决办法
- Error:Configuration with name 'default' not found. 解决办法
- No resource found that matches the given name 'android:TextAppearance.Material...'解决办法