我正在尝试创建一个公共库,其中包含微服务所需的一些内容。其中之一是spring-security提供的ACL功能。我最初的想法是从公共库中的@Configuration文件初始化所有与ACL相关的bean,并且每当微服务需要此功能时,我都可以使用@Import注解(到我的微服务项目)来“启用”它。
这些豆有些需要著名的javax.sql.DataSource才能工作,因此在我的common库中,我将其自动接线如下:
@Configuration
public class AclConfiguration {
@Autowired
DataSource dataSource
[当我决定要进行此配置时,我进入了我的微服务项目(例如,RulesApplication),并在主类(用@SpringBootApplication注释)上,执行以下操作
@SpringBootApplication
@EnableJpaRepositories
@EnableJpaAuditing
@EnableCaching
@Import(AclConfiguration.class)
public class RulesApplication {
.
.
.
问题是,尽管按预期创建了DataSource bean(尽管通过删除@Import进行了验证),但仍无法从公共库中看到它。
每次我从公共库导入配置时,我都会得到一个:
Caused by: java.lang.IllegalArgumentException: DataSource required
at org.springframework.util.Assert.notNull(Assert.java:198) ~[spring-core-5.2.5.RELEASE.jar:5.2.5.RELEASE]
指示DataSource bean为空。
我在这里想念什么?
从一些挖掘中得出。.[[DataSource bean从来没有真正的问题。所有的挫败感是通过在同一个类中双重定义另一个Bean来创建的,这导致所有@Autowired Bean均无法初始化。
作为这项研究的结果(如其他文章所述,bean初始化在共享项目之间正常运行,因此,大多数情况下,此错误将发生在双重定义/错误定义其他bean时。