问题
将 Spring Boot 升级到版本2.2.0.M2
(来自2.2.0.M1
)后,用 注释的 bean@ConfigurationProperties
被加载两次,导致应用程序失败并出现以下异常 -
Parameter 0 of constructor in config.HazelcastConfiguration required a single bean, but 2 were found:
- hazelcastProperties: defined in file [D:\LocationGuru\Projects\JavaEE\spring-boot-issues\target\classes\config\HazelcastProperties.class]
- application.hazelcast-config.HazelcastProperties: defined in null
请参阅下面的应用程序日志 -
2019-04-16 20:40:51.517 INFO 14804 --- [ main] config.HazelcastProperties : Creating bean HazelcastProperties ..
2019-04-16 20:40:51.517 INFO 14804 --- [ main] config.HazelcastProperties : Creating bean HazelcastProperties ..
2019-04-16 20:40:51.517 INFO 14804 --- [ main] config.HazelcastConfiguration : Found 2 HazelcastProperties beans ..
解决方法
添加@Primary
到所有带有注释的类@ConfigurationProperties
似乎可以暂时解决该问题。
观察 1 使用建议的解决方法,应用自动装配实例列表(如下所示),使 Spring Boot 加载 beans 两次 -
@Autowired
public HazelcastConfiguration(final List<HazelcastProperties> propertiesList)
{
logger.info("Found {} HazelcastProperties beans ..", propertiesList.size());
}
观察 2 使用建议的解决方法应用自动装配单实例(如下所示)使 Spring Boot 加载 beans 一次(如预期)-
@Autowired
public HazelcastConfiguration(final HazelcastProperties properties)
{
logger.info("Found 1 HazelcastProperties beans ..");
}
请参阅随附的项目(spring-boot-issues.zip)以重现该问题。
可能与 gh-15802 有关。