【发布时间】:2020-04-29 15:24:46
【问题描述】:
我正在尝试创建一个公共库,其中包含我的微服务所需的一些内容。其中之一是 spring-security 提供的 ACL 功能。我最初的想法是从公共库中的 @Configuration 文件初始化所有与 ACL 相关的 bean,每次微服务需要此功能时,我都可以使用 @Import 注释(到我的微服务项目)来“启用”它。
其中一些 bean 需要著名的 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 为空。
我在这里错过了什么?
【问题讨论】:
-
虽然它是按预期创建的(仅通过删除 @Import 进行验证)=> 删除后,行为如何?
-
RulesApplication 按预期运行,因为所有 DatasourceConfiguration 都由 Spring 处理,但没有 ACL 功能。阅读我的问题,是否清楚 AclConfiguration.class 不是 RulesApplication 项目的一部分?
标签: spring spring-boot configuration spring-data-jpa datasource