【问题标题】:Spring Boot external DataSource beanSpring Boot 外部数据源 bean
【发布时间】: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


【解决方案1】:

经过一番挖掘。DataSource bean 从来没有真正的问题。所有的挫败感都是通过在同一个类中双重定义另一个 Bean 造成的,这导致所有 @Autowired bean 无法初始化。

作为这项研究的结果(正如其他帖子所提到的),bean 初始化在共享项目之间工作顺利,所以大多数时候这个错误会发生在重复定义/错误定义其他 bean。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多