有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在使用SpringJDBCTemplate时动态更改数据库/目录

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

在客户机数据RDBMS中为每个数据库定义DataSource,然后根据建议动态选择一个here对于我们来说不是一个选项,因为数据库是动态创建和销毁的

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


共 (3) 个答案

  1. # 1 楼答案

    jdbcTemplate.getDataSource().getConnection().setSchema(schemaName) 
    

    这是我使用postgres切换模式所需要的。@m3th0dman的道具,让我走上正轨。我只是想补充一下,以防其他人像我一样在搜索切换模式时找到这个答案

  2. # 2 楼答案

    您可以从JdbcTemplate访问Connection

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

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

  3. # 3 楼答案

    也许您可以用^{}包装数据源,在getConnection()中调用setCatalog(),并在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));