在Spring Boot中使用多个数据源时,如何设置多个连接池?

我有一个Spring Boot" title="Spring Boot">Spring Boot应用程序,可以连接到两个单独的数据库。一切

正常(我遵循了文档

和教程中的步骤),尽管为了

自定义Tomcat JDBC连接池设置,我必须手动

配置它(由于

定义了多个数据源,因此忽略了Boot自动配置,并且

Spring Boot不再从

application.properties中读取特定于tomcat的属性)。

在两个数据源的配置过程中使用调试器时,我看到

两个

org.apache.tomcat.jdbc.pool.DataSource

实例在

DataSource.PoolProperties [“ name”]条目中具有相同的连接池。请参见

调试器中的以下屏幕截图,每个dataSource()方法都在单独的配置

类中进行配置。请注意,定义了相同的连接池。主数据源CP配置

辅助数据源CP配置

但是,从我使用jConsole + tomcatJMX看到的结果来看,只有一个连接池,其中配置了主要数据库详细信息(URL,凭据,请参见下文)。jConsole检查有关连接池的Tomcat JDBC JMX信息

由于Spring内部有多个抽象层,因此

我很难调试它。我有Eclipse Class Decompiler

插件,

通常用它来查看Spring逻辑,但是在这种情况下,

数据源的初始化代码在

注册bean时发生,而不是在Spring Boot实际使用它们设置数据时发生

来源。

最重要的是,您能帮我了解一下吗:

为什么只有一个连接池

如何使用两个连接池,每个数据源一个

在Spring代码中的何处查看其工作原理的更多详细信息

回答:

我正在回答当时的情况。如果您找到更好的解决方案,或者

Spring允许多个连接池,请发布答案,我会

选择您的答案。

考虑到我在问题中发布的代码,由于Spring将仅配置

一个连接池( 在tomcat CP上设置了validationQuery和validationInterval),因此我添加了一个计划方法来使 第二个数据源保持活动状态。

@Scheduled(fixedRate=INTERVAL_IN_MS)

public void scheduledTestDatabaseConnection() {

try {

testDatabaseConnection();

LOGGER.trace("Tested EJBCA DB connection with success");

}

catch (Exception e) {

LOGGER.error("Got an error when refreshing the EJBCA DB connection '{}'", e.getMessage());

}

}

在上面的示例中,testDatabaseConnection()在SpringData Repository 上调用一个方法

@Query("SELECT 1 FROM MyTable")

public int testConnection();

以上是 在Spring Boot中使用多个数据源时,如何设置多个连接池? 的全部内容, 来源链接: utcz.com/qa/428980.html

回到顶部