spring batch 任务运行时提示No job configuration with the name解决办法
来源:互联网 发布:c语言怎么写注释 编辑:程序博客网 时间:2024/06/06 00:44
spring batch 任务运行时提示No job configuration with the name解决办法
开发环境
- spring boot
- spring 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:
@Configurationpublic 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)@WebAppConfigurationpublic 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的注册机制有关。若有知道的请赐教。
阅读全文
0 0
- spring batch 任务运行时提示No job configuration with the name解决办法
- Run Spring batch job with CommandLineJobRunner(三)
- Configuration with name 'default' not found 解决办法
- Android Studio gradle 编译提示‘Error:Configuration with name 'default' not found.’ 解决办法
- unable to locate configuration files of the name struts-plugin.xml提示信息的解决办法
- unable to locate configuration files of the name struts-plugin.xml提示信息的解决办法
- spring -- batch job
- Spring batch Job define
- spring batch之三 配置和运行Job
- 导入工程时提示Error:Configuration with name ‘default’ not found.解决方法
- Error:Configuration with name 'default' not found. 解决办法
- Error:Configuration with name 'default' not found. 解决办法
- Error:Configuration with name 'default' not found. 解决办法
- Error:Configuration with name 'default' not found. 解决办法
- Error:Configuration with name 'default' not found. 解决办法
- Error:Configuration with name 'default' not found. 解决办法
- Spring 定制 Job ( Spring-Batch )
- Spring Batch(4): Job详解
- 这是一个新的开始还是一个偶然的邂逅?
- java的8中数据类型
- HTTP规范的8种可能的请求方法
- 图像处理之霍夫变换圆检测算法
- GROUP BY学习
- spring batch 任务运行时提示No job configuration with the name解决办法
- 爬虫基本概念
- [高斯消元]BZOJ 1013 [JSOI2008]——球形空间产生器sphere
- [FUNC]ahk利用JScript解析JSON
- 使用redis和zookeeper实现分布式锁
- Dagger2学习笔记
- 为什么在java中String是不可变的?
- Android apk优化 zipalign
- 上传项目到GitHub:如何用同一个github帐号在两台电脑上同步开发?/ 如何协同开发?