当前位置: 首页 > 知识库问答 >
问题:

从自动配置中排除初学者库中的数据源

荆树
2023-03-14

我有多个Spring Boot Starter,每个Starter定义一个数据源,如下所示:

@Bean
@ConfigurationProperties(prefix = "some.unique.namespace.datasource")
public DataSource someUniqueNamespaceDataSource() {
  return DataSourceBuilder.create().build();
}

@Bean
public SomeOtherBean someOtherBean() {
  return new SomeOtherBean(someUniqueNamespaceDataSource())
}

如您所见,bean方法someUniqueNamespaceDataSource()是在同一配置类中的另一个bean方法中直接调用的。然而,Spring Boot正在拦截该方法,然后执行自己的内部注入。这一次,它注入了一种DataSource类型。

当应用程序使用这些启动程序之一时,它不会出现任何问题。但是,当它使用多个启动程序时,我得到如下错误:

org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [javax.sql.DataSource] is defined: expected single matching bean but found 2: someUniqueNamespaceDataSource,someOtherUniqueNamespaceDataSource

我相信这是因为Spring Boot是通过类型在内部注入的,尽管我的代码注入了一个合格的bean。

初学者库是否可以指示数据源不应被视为自动配置的候选者?

是否有某种方法可以使依赖于多个初学者库的应用程序将它们排除在自动配置之外?

完全禁用自动配置是不可行的。此外,手动排除在数据源bean存在时触发的所有当前自动配置太容易了,因为以后添加依赖项(尤其是基于数据源bean触发的传递依赖项)将重新引入错误。

共有1个答案

郭永怡
2023-03-14

@SpringBootApplication@enableAutoConfiguration注释中,将Exclude属性设置为:

@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class,
    HibernateJpaAutoConfiguration.class,
    DataSourceTransactionManagerAutoConfiguration.class })

应该能奏效。

 类似资料:
  • 假设我们有一个Spring Boot应用程序和自动配置,其中定义了几个配置 此类通过外部库依赖项提供,并且满足所有条件,因此这些配置中的所有bean都正在加载。 然而,我需要排除FirstNestedConfiguration中提供的bean,可以这样做吗? UPD:由于它是一个简单的Spring Boot应用程序,所以它的运行方式是 没有任何显式的@ComponentScan配置

  • 我在我的Ruby项目中并没有真正使用。 我怎样才能在自动完成选项中排除它? 很遗憾,无法从< code>Gemfile中删除< code>minitest依赖项,因为它是< code>activesupport的依赖项列表的一部分。 相关问题:JetBrains 想法:排除包

  • 问题内容: 我们有一个应用程序被部署了120次,每个应用程序的配置略有不同。我们希望将配置存储在数据库中,以进行审核和管理。 如何不使用XML直接从数据库实例化Spring Bean? 谢谢 问题答案: 您不能有零个XML配置(除非您使用JavaConfig,这不会使情况有所不同)。您可以将其中一些外部化到数据库,并使用custom 。有关如何实现此目的,请参见本文。

  • 我需要你帮我。我想在RecyclerView中通过SwipeToDelete删除数据库中的数据。 我已经有了一个从RecycleView中删除项目的Swipe类,我可以从该列表中删除项目,但不能从数据库中删除。 我尝试在NoteAdapater(回收器适配器)中调用数据库,并使用removeItem(int-position)方法删除所需的项,如下所示: 这是Main Active代码: 删除数据

  • 我制作了一个JTable,其中填充了数据库中的数据。它从textfields中获取数据并将其添加到表和数据库中。问题是我有一个删除按钮,我让它从表本身删除选定的行(使用defaultTableModel),但它不会从实际的数据库中删除该数据。当我再次运行该程序时,删除的行再次出现在JTable中。 这可能会变得混乱,但希望有人能找出我错过了什么。帮助将会很感激,但不要,我的时间很少,不能完全大修我

  • 我正在使用spring boot开发两个应用程序,一个充当服务器端,另一个是客户端应用程序。然而,这两个应用程序是相同的功能不同的基于活动配置文件。我正在使用spring boot的自动配置功能来配置我的应用程序。 我想禁用所有数据库相关的客户端应用程序自动配置,因为它将不需要数据库连接。应用程序不应尝试与数据库建立连接,也不应尝试使用任何spring数据或Hibernate特性。数据库自动配置的