Spring boot 在Spring Boot中配置两个数据源

Spring boot 在Spring Boot中配置两个数据源,spring-boot,spring-jdbc,Spring Boot,Spring Jdbc,在我的Spring Boot应用程序中配置两个数据源时,我遇到了最奇怪的情况,这两个数据源只有一个正常工作: @Configuration (...) @Bean(destroyMethod = "close") protected DataSource applicationDataSource( (...) return dataSource; } 还有两个: @Configuration (...) @Bean(destro

在我的Spring Boot应用程序中配置两个数据源时,我遇到了最奇怪的情况,这两个数据源只有一个正常工作:

@Configuration
(...)
    @Bean(destroyMethod = "close")
    protected DataSource applicationDataSource(
        (...)
        return dataSource;
    }
还有两个:

@Configuration
(...)
    @Bean(destroyMethod = "close")
    @Primary
    protected DataSource applicationDataSource(
        (...)
        return dataSource;
    }

@Configuration
(...)
    @Bean
    protected DataSource localDataSource(
        (...)
        return dataSource;
    }
(它们位于不同的配置文件中)

现在奇怪的是,对于两个DS,没有相关的特定错误。我得到的错误是一个看似无关的错误,表示它找不到注入的bean实例(在与数据源无关的完全不同的配置文件中)。我确实注意到,当只使用一个DS时,DS bean在错误中显示的bean之前被实例化,这使我认为在定义两个DS时,它们被忽略了

我尝试了很多方法,包括将第二个bean声明为另一种类型的DS

@Configuration
(...)
    @Bean
    protected HikariDataSource localDataSource(
        (...)
        return dataSource;
    }
但什么都没用

现在最奇怪的是,我发现了一个可行的方法,将第二个bean声明为对象(!!!)

这很有效!!!我只需要将它转换到其他地方(例如实现SqlSessionFactoryBean或DataSourceTransactionManager)

请注意,这些方法是受保护的,但我也使用public进行了测试。至于SpringBoot应用程序,无论是否排除,我都进行了测试

@Configuration
@SpringBootApplication
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class})
所以我让它工作,一切都很好,但我不知道这到底是怎么发生的,我真的很想让它工作没有黑客


干杯。

我怀疑您有自动连线问题,因为配置了两个DataSource类型的bean,可能有多个bean标记为@Primary

打开org.springframework的日志应该突出显示这一点。发布启动日志


由于您实际上只创建了一个DataSource类型的bean,因此您的修复工作正常。

您可以发布stacktrace吗?请检查此项
@Configuration
@SpringBootApplication
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class})