使用Spring JdbcTemplate时如何动态更改数据库/目录

pgi*_*cek 6 java mysql spring-jdbc jdbctemplate spring-data

考虑一种情况,其中所有客户端数据都存储在其自己的数据库/目录中,而所有此类数据库都存储在单个RDBMS(客户端数据)中。主数据(例如客户端等)保存在另一个RDBMS(主数据)中。我们如何通过来动态访问客户端数据RDBMS中的特定数据库JdbcTemplate

DataSource在客户端数据RDBMS中定义每个数据库,然后按照此处的建议动态选择一个数据库,对我们来说不是一个选择,因为数据库是动态创建和销毁的。

我基本上需要类似JDBC的东西,Connection.setCatalog(String catalog)但是我没有找到类似Spring的东西JdbcTemplate

小智 6

也许您可以包装数据源以DelegatingDataSource进行调用setCatalog()getConnection()并在JdbcTemplate创建时使用包装的数据源:

class MyDelegatingDS extends DelegatingDataSource {
  private final String catalogName;

  public MyDelegatingDS(final String catalogName, final DataSource dataSource) {
    super(dataSource);
    this.catalogName = catalogName;
  }

  @Override
  public Connection getConnection() throws SQLException {
    final Connection cnx = super.getConnection();
    cnx.setCatalog(this.catalogName);
    return cnx;
  }

  // maybe also override the other getConnection();
}

// then use like that: new JdbcTemplate(new MyDelegatingDS("catalogName", dataSource)); 
Run Code Online (Sandbox Code Playgroud)


m3t*_*man 5

您可以访问Connection来自JdbcTemplate

jdbcTemplate.getDataSource().getConnection().setCatalog(catalogName);

您只需确保数据库驱动程序支持此功能。