您好我是Spring批次的新手,我收到以下我无法解决的异常:
LinkedList
我的代码:
IndexOutOfBoundsException
我可以通过添加java.lang.IllegalStateException: Failed to execute CommandLineRunner
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:800) [spring-boot-2.0.1.RELEASE.jar:2.0.1.RELEASE]
at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:781) [spring-boot-2.0.1.RELEASE.jar:2.0.1.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:335) [spring-boot-2.0.1.RELEASE.jar:2.0.1.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1255) [spring-boot-2.0.1.RELEASE.jar:2.0.1.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1243) [spring-boot-2.0.1.RELEASE.jar:2.0.1.RELEASE]
at com.demo.BatchDemo.main(KnpBatchApplication.java:16) [classes/:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_72]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_72]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_72]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_72]
at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) [spring-boot-devtools-2.0.1.RELEASE.jar:2.0.1.RELEASE]
Caused by: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.rangeCheck(ArrayList.java:653) ~[na:1.8.0_72]
at java.util.ArrayList.get(ArrayList.java:429) ~[na:1.8.0_72]
at org.springframework.batch.core.JobParametersBuilder.getNextJobParameters(JobParametersBuilder.java:265) ~[spring-batch-core-4.0.1.RELEASE.jar:4.0.1.RELEASE]
at org.springframework.boot.autoconfigure.batch.JobLauncherCommandLineRunner.execute(JobLauncherCommandLineRunner.java:162) ~[spring-boot-autoconfigure-2.0.1.RELEASE.jar:2.0.1.RELEASE]
at org.springframework.boot.autoconfigure.batch.JobLauncherCommandLineRunner.executeLocalJobs(JobLauncherCommandLineRunner.java:179) ~[spring-boot-autoconfigure-2.0.1.RELEASE.jar:2.0.1.RELEASE]
at org.springframework.boot.autoconfigure.batch.JobLauncherCommandLineRunner.launchJobFromProperties(JobLauncherCommandLineRunner.java:134) ~[spring-boot-autoconfigure-2.0.1.RELEASE.jar:2.0.1.RELEASE]
at org.springframework.boot.autoconfigure.batch.JobLauncherCommandLineRunner.run(JobLauncherCommandLineRunner.java:128) ~[spring-boot-autoconfigure-2.0.1.RELEASE.jar:2.0.1.RELEASE]
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:797) [spring-boot-2.0.1.RELEASE.jar:2.0.1.RELEASE]
... 10 common frames omitted
来解决此问题。但我想找到真正的原因并解决它。
我没有传递任何命令行参数,并且此异常不会一直发生。
的pom.xml
@SpringBootApplication
public class BatchDemo {
public static void main(String args[])
{
SpringApplication.run(BatchDemo.class);
}
}
答案 0 :(得分:3)
使用@SpringBootApplication
时,默认情况下会启用Spring的自动配置。由于您在类路径中加载了spring批量依赖项,因此也启用了Spring Batch AutoConfiguration。
在应用程序启动期间,Spring Batch的自动配置(BatchAutoConfiguration)创建一个Runner并运行BatchConfig中定义的所有作业。
您可以通过在应用程序属性中将spring.batch.job.enabled
属性设置为false
来禁用此行为,也可以直接排除批量自动配置,就像您一样。
答案 1 :(得分:1)
对于希望其批处理作业实际执行并且遇到此错误的任何人,请尝试检查Spring批处理元数据表中的记录是否存在任何不一致之处。
要获取下一个JobParameters
,Spring Batch会搜索与您的工作相同的BATCH_JOB_INSTANCE
的最新JOB_NAME
,然后在数据库中查找匹配的BATCH_JOB_EXECUTION
记录(由JOB_INSTANCE_ID
链接)。
我们有一个内部任务正在运行,该任务从BATCH_JOB_EXECUTION
中删除了记录,但是由于错误,没有从BATCH_JOB_INSTANCE
中删除匹配的记录。
在一个环境中,自从我们执行任何作业以来已经有3个月了,所以我们不再有BATCH_JOB_EXECUTION
条记录,但是有许多BATCH_JOB_INSTANCE
条记录。我们反复在多个不同的Spring Batch应用程序之间抛出了此问题中列出的堆栈跟踪,但找不到在线解决方案。
我们通过以下方式解决了该问题
BATCH_JOB_INSTANCE
中没有匹配记录的BATCH_JOB_EXECUTION
中删除-这在短期内取消了作业的阻塞;并且,答案 2 :(得分:0)
我收到此错误,这是因为我正在从遵循一般命名约定和类型的文件夹中读取文件。我错误地在同一目录中留下了一个图像文件,我的代码无法处理它并抛出此错误。