開発環境
- Eclipse
- JDK 21
- Spring Boot 3.1.3 -> 3.2.2
エラー内容
SpringBootのバージョンアップ後にアプリ起動すると以下のようにエラーが出るようになりました。
@Beanはvoidとして宣言されるべきではないよというエラーのようです。
org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: @Bean method 'initialize' must not be declared as void; change the method's return type or its annotation.
Offending resource: class path resource [xxx/xxxx/XXXXXInitializer.class]
at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:72) ~[spring-beans-6.1.3.jar:6.1.3]
at org.springframework.context.annotation.BeanMethod.validate(BeanMethod.java:47) ~[spring-context-6.1.3.jar:6.1.3]
at org.springframework.context.annotation.ConfigurationClass.validate(ConfigurationClass.java:222) ~[spring-context-6.1.3.jar:6.1.3]
at org.springframework.context.annotation.ConfigurationClassParser.validate(ConfigurationClassParser.java:206) ~[spring-context-6.1.3.jar:6.1.3]
at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:417) ~[spring-context-6.1.3.jar:6.1.3]
at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:289) ~[spring-context-6.1.3.jar:6.1.3]
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:349) ~[spring-context-6.1.3.jar:6.1.3]
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:118) ~[spring-context-6.1.3.jar:6.1.3]
at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:788) ~[spring-context-6.1.3.jar:6.1.3]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:606) ~[spring-context-6.1.3.jar:6.1.3]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[spring-boot-3.2.2.jar:3.2.2]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) ~[spring-boot-3.2.2.jar:3.2.2]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) ~[spring-boot-3.2.2.jar:3.2.2]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:334) ~[spring-boot-3.2.2.jar:3.2.2]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1354) ~[spring-boot-3.2.2.jar:3.2.2]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1343) ~[spring-boot-3.2.2.jar:3.2.2]
at xxx/xxxx/XXXXXTimeApplication.main(XXXXXTimeApplication.java:16) ~[classes/:na]
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na]
at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) ~[spring-boot-devtools-3.2.2.jar:3.2.2]
エラーが発生したコードの詳細は省略しますが、初期化処理を行っています。
エラーの通り、戻り値はvoidで宣言しています。
@Configuration
@Slf4j
public class XXXInitializer {
@Bean
public void initialize() {
// 省略
}
}
修正内容
エラーがでたメソッドの処理はアプリ起動時に一発動いてくれればいいものなので@Beanをやめて@PostConstructに変更して対応しました。@Beanとは実行タイミングが異なるので自分のPJで問題ないかの確認は行うようにしてください。
import jakarta.annotation.PostConstruct;
@Configuration
@Slf4j
public class XXXInitializer {
@PostConstruct
public void initialize() {
// 省略
}
}
以上
コメント