배치.. 이제 시작 좀 해보려는데 에러가 났다면?
Caused by: java.io.FileNotFoundException: class path resource [org/springframework/batch/core/configuration/support/DefaultBatchConfiguration.class] cannot be opened because it does not exist
spring batch core 5.0.0 버전으로 바뀌면서 일부 deprecate 발생한 부분이 있다.
기존 사용하던 JobBuilderFactory 를 JobBuilder로 , StepBuilderFactory를 StepBuilder로 변경해서 사용하기를 5.0.0에서 권장하고 있는 것이다.
그래서 강제로 batch 버전을 4.2.7로 내려서 deprecated 에러를 일단 해결했는데
(워낙 자료도 잘 없는 batch, 한땀 한땀 자료 찾아서 공부 중인데 5.0.0 버전으로 공부를 진행할 자신이 없었다.)
아래처럼 4.2.7버전으로 수정을 감행한다.
implementation 'org.springframework.batch:spring-batch-core:4.2.7.RELEASE'
그리고 도커에 mariaDB 를 올린뒤, 연결하고
이제 실행을 좀 해보려고 하는데, 에러가 발생해서 실행이 되지 않았다.
에러 전문을 아래에 ..
에러 전문
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v3.0.1)
2023-01-12T12:28:27.806+09:00 INFO 17892 --- [ main] c.b.springbatch.SpringBatchApplication : Starting SpringBatchApplication using Java 17.0.5 with PID 17892 (C:\amazing\DataflowProject\SpringBatch\build\classes\java\main started by DIR-N-0153 in C:\amazing\DataflowProject\SpringBatch)
2023-01-12T12:28:27.808+09:00 INFO 17892 --- [ main] c.b.springbatch.SpringBatchApplication : No active profile set, falling back to 1 default profile: "default"
2023-01-12T12:28:28.052+09:00 WARN 17892 --- [ main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanDefinitionStoreException: Failed to process import candidates for configuration class [com.batchproject.springbatch.SpringBatchApplication]: class path resource [org/springframework/batch/core/configuration/support/DefaultBatchConfiguration.class] cannot be opened because it does not exist
2023-01-12T12:28:28.060+09:00 INFO 17892 --- [ main] .s.b.a.l.ConditionEvaluationReportLogger :
Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled.
2023-01-12T12:28:28.076+09:00 ERROR 17892 --- [ main] o.s.boot.SpringApplication : Application run failed
org.springframework.beans.factory.BeanDefinitionStoreException: Failed to process import candidates for configuration class [com.batchproject.springbatch.SpringBatchApplication]: class path resource [org/springframework/batch/core/configuration/support/DefaultBatchConfiguration.class] cannot be opened because it does not exist
at org.springframework.context.annotation.ConfigurationClassParser.processImports(ConfigurationClassParser.java:524) ~[spring-context-6.0.3.jar:6.0.3]
at org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorGroupingHandler.lambda$processGroupImports$1(ConfigurationClassParser.java:726) ~[spring-context-6.0.3.jar:6.0.3]
at java.base/java.lang.Iterable.forEach(Iterable.java:75) ~[na:na]
at org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorGroupingHandler.processGroupImports(ConfigurationClassParser.java:723) ~[spring-context-6.0.3.jar:6.0.3]
at org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorHandler.process(ConfigurationClassParser.java:694) ~[spring-context-6.0.3.jar:6.0.3]
at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:182) ~[spring-context-6.0.3.jar:6.0.3]
at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:398) ~[spring-context-6.0.3.jar:6.0.3]
at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:283) ~[spring-context-6.0.3.jar:6.0.3]
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:344) ~[spring-context-6.0.3.jar:6.0.3]
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:115) ~[spring-context-6.0.3.jar:6.0.3]
at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:745) ~[spring-context-6.0.3.jar:6.0.3]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:565) ~[spring-context-6.0.3.jar:6.0.3]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[spring-boot-3.0.1.jar:3.0.1]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:730) ~[spring-boot-3.0.1.jar:3.0.1]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:432) ~[spring-boot-3.0.1.jar:3.0.1]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:308) ~[spring-boot-3.0.1.jar:3.0.1]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1302) ~[spring-boot-3.0.1.jar:3.0.1]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1291) ~[spring-boot-3.0.1.jar:3.0.1]
at com.batchproject.springbatch.SpringBatchApplication.main(SpringBatchApplication.java:13) ~[main/:na]
Caused by: java.io.FileNotFoundException: class path resource [org/springframework/batch/core/configuration/support/DefaultBatchConfiguration.class] cannot be opened because it does not exist
at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:211) ~[spring-core-6.0.3.jar:6.0.3]
at org.springframework.core.type.classreading.SimpleMetadataReader.getClassReader(SimpleMetadataReader.java:54) ~[spring-core-6.0.3.jar:6.0.3]
at org.springframework.core.type.classreading.SimpleMetadataReader.<init>(SimpleMetadataReader.java:48) ~[spring-core-6.0.3.jar:6.0.3]
at org.springframework.core.type.classreading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.java:103) ~[spring-core-6.0.3.jar:6.0.3]
at org.springframework.boot.type.classreading.ConcurrentReferenceCachingMetadataReaderFactory.createMetadataReader(ConcurrentReferenceCachingMetadataReaderFactory.java:86) ~[spring-boot-3.0.1.jar:3.0.1]
at org.springframework.boot.type.classreading.ConcurrentReferenceCachingMetadataReaderFactory.getMetadataReader(ConcurrentReferenceCachingMetadataReaderFactory.java:73) ~[spring-boot-3.0.1.jar:3.0.1]
at org.springframework.core.type.classreading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.java:81) ~[spring-core-6.0.3.jar:6.0.3]
at org.springframework.context.annotation.ConfigurationClassParser.asSourceClass(ConfigurationClassParser.java:610) ~[spring-context-6.0.3.jar:6.0.3]
at org.springframework.context.annotation.ConfigurationClassParser$SourceClass.getSuperClass(ConfigurationClassParser.java:923) ~[spring-context-6.0.3.jar:6.0.3]
at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:334) ~[spring-context-6.0.3.jar:6.0.3]
at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:243) ~[spring-context-6.0.3.jar:6.0.3]
at org.springframework.context.annotation.ConfigurationClassParser.processMemberClasses(ConfigurationClassParser.java:365) ~[spring-context-6.0.3.jar:6.0.3]
at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:265) ~[spring-context-6.0.3.jar:6.0.3]
at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:243) ~[spring-context-6.0.3.jar:6.0.3]
at org.springframework.context.annotation.ConfigurationClassParser.processImports(ConfigurationClassParser.java:514) ~[spring-context-6.0.3.jar:6.0.3]
... 18 common frames omitted
Process finished with exit code 1
아니 다짜고짜 DefaultBatchConfiguration.class를 찾을수 없다고 하는데 사용한 적이 없고
딱히 작성한 코드도 없는 상태라, 코드의 문제 같지가 않았다.
찾지 못한다고 하는 DefaultBatchConfiguration.class가 5.0.0 공식문서에 내용이 있는걸 발견하고,
버전문제의 연상선이라는걸 직감. (정확하지는 않은..)
하지만 이미 버전을 낮추는 시도는 해본 나.
더이상의 시도할 방안이 없어서 절망하고 있다가.
밥먹을 때 동료에게 이야기해보니
batch 버전만 낮추기보단 스프링 부트 버전 자체를 낮추는게 더 나을것 같다고 말해줬고,
밥먹고 와서 gradle 설정만 바꿨더니 바로 실행 되었다.
스프링 부트 버전은 '2.7.7', dependencies 버전 입력없이 자동으로 편성되도록 했다.
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-batch'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
implementation 'org.mariadb.jdbc:mariadb-java-client'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.h2database:h2'
runtimeOnly 'com.mysql:mysql-connector-j'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.batch:spring-batch-test'
}
'Spring' 카테고리의 다른 글
외부 라이브러리 JAR 추가 시, PropertiesLauncher 사용 관련 (0) | 2025.03.19 |
---|---|
circuitBreaker (2) | 2025.02.03 |