spring-boot で、application 起動時に、org.springframework.context.annotation.ConflictingBeanDefinitionException が発生


spring-boot で application 起動時に、以下のエラーが発生しました。
対処方法を記載します。

  • エラー内容
    Caused by: org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name 'listCommand' for bean class [xyz.monotalk.google.webmaster.cli.subcommands.sites.ListCommand] conflicts with existing, non-compatible bean definition of same name and class [xyz.monotalk.google.webmaster.cli.subcommands.sitemaps.ListCommand]
            at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.checkCandidate(ClassPathBeanDefinitionScanner.java:345)
            at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.doScan(ClassPathBeanDefinitionScanner.java:283)
            at org.springframework.context.annotation.ComponentScanAnnotationParser.parse(ComponentScanAnnotationParser.java:135)
            at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:287)
            at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:245)
            at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:198)
            at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:167)
    

エラーの原因

Comportnent scan 対象のパッケージ配下に、パッケージ違いで同一のクラス名が存在する場合、bean 登録時に bean 名が重複してしまうようです。


対処方法

以下の記事に、まさに対応方法の記載がありました。
Spring の component-scan で設定される Bean 名をカスタマイズする - Qiita

記事記載のFQCNBeanNameGenerator を作成し、完全修飾クラス名を bean 名とすることで対処しました。

以上です。

コメント