Java HikariCP-在连接签入和从连接池签出时动态设置连接的数据库

Java HikariCP-在连接签入和从连接池签出时动态设置连接的数据库,java,jdbc,datasource,c3p0,hikaricp,Java,Jdbc,Datasource,C3p0,Hikaricp,我需要在从池签入和签出连接时切换数据库。例如,会话X需要接收到数据库a的连接,会话Y需要接收到数据库B的连接 我还能够使用C3P0使用连接定制器来实现这一点。它调用AbstractConnectionCustomizer的onCheckIn和onCheckOut方法,因此我可以执行以下操作: public class MyConnectionCustomizer extends AbstractConnectionCustomizer { @Override public voi

我需要在从池签入和签出连接时切换数据库。例如,会话X需要接收到数据库a的连接,会话Y需要接收到数据库B的连接

我还能够使用C3P0使用连接定制器来实现这一点。它调用AbstractConnectionCustomizer的onCheckIn和onCheckOut方法,因此我可以执行以下操作:

public class MyConnectionCustomizer extends AbstractConnectionCustomizer {
    @Override
    public void onCheckOut(Connection c, String parentDataSourceIdentityToken) throws Exception {
        if (something) {
            c.setCatalog("some database name");
        }
    }

    @Override
    public void onCheckIn(Connection c, String parentDataSourceIdentityToken) throws Exception {
        c.setCatalog("some other database name");
    }
}

我正在尝试切换到HikariCP,但它仅在创建连接时调用IConnectionCustomizer的customize方法一次。那么,我该如何实现这样的功能呢?

我正在尝试理解这个用例?如果会话X确实需要到数据库a的连接,而会话Y需要到数据库B的连接,为什么不使用单独的池呢

我可以说,作为作者之一,HikariCP可能永远不会支持这种功能。连接池应该提供一个对应用程序完全透明的数据源,这样,如果删除该池并使用本机数据源,应用程序将以相同的方式运行,尽管效率较低

您可以在C3P0中执行类似的操作,但不能在HikariCP、Vibur或apachedbcp中执行,这一事实本身就是一个危险信号。使用这样的功能将您锁定在特定的池实现中,这从来都不是一件好事


对不起,我不能提供一个满意的答案。如果我是你,我会考虑编写一个应用程序级助手类来获取/返回提供你正在寻找的语义的连接。

< P>我想了解这个用例吗?如果会话X确实需要到数据库a的连接,而会话Y需要到数据库B的连接,为什么不使用单独的池呢

我可以说,作为作者之一,HikariCP可能永远不会支持这种功能。连接池应该提供一个对应用程序完全透明的数据源,这样,如果删除该池并使用本机数据源,应用程序将以相同的方式运行,尽管效率较低

您可以在C3P0中执行类似的操作,但不能在HikariCP、Vibur或apachedbcp中执行,这一事实本身就是一个危险信号。使用这样的功能将您锁定在特定的池实现中,这从来都不是一件好事


对不起,我不能提供一个满意的答案。如果我是你,我会考虑编写一个应用程序级助手类来获取/返回提供你所寻找的语义的连接。

< P>一个用例是多租户,其中有多个模式的单个数据库。根据登录到应用程序的租户,我们需要动态切换模式

一个用例是多租户,其中有一个数据库具有多个模式。根据登录到应用程序的租户,我们需要动态切换模式

您可能会发现许多用例,特别是在SaaS marketplace产品方面。您可以看一看:您可能会发现许多用例,特别是在SaaS市场产品方面。你可以看看: