Spring 引导外部数据源 bean

Spring Boot external DataSource bean

我正在尝试创建一个公共库,其中包含我的微服务所需的一些内容。其中之一是 spring-security 提供的 ACL 功能。我最初的想法是从公共库中的@Configuration 文件初始化所有与 ACL 相关的 bean,每次微服务需要此功能时,我可以使用 @Import 注释(对我的微服务项目)来 "enable" 它。

其中一些 bean 需要著名的 javax.sql.DataSource 才能工作,所以在我的 common 库中,我按如下方式自动装配它:

@Configuration
public class AclConfiguration {

@Autowired
DataSource dataSource 

当我决定要进行此配置时,我会转到我的微服务项目(假设是 RulesApplication)并在主要 class(用 @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 从来没有真正的问题。所有的挫折都是由于在同一个 class 中双重定义另一个 Bean 而造成的,这导致所有 @Autowired bean 都无法初始化。

作为这项研究的结果(如其他帖子所述)bean 初始化在共享项目之间顺利进行,因此大多数时候此错误会发生在 double-defining/badly-defining 其他 bean 中。