NutzCN Logo
问答 NutDao使用DruidDataSource连接池,如何设置catelog
发布于 2693天前 作者 Alfred-li 2059 次浏览 复制 上一个帖子 下一个帖子
标签:

项目中,使用DruidDataSource做连接池,使用NutDao做了获取数据库的链接,
使用原生Druid,我可以通过下面这样设置connection的数据库;

DruidPooledConnection connection = dataSource.getConnection();
connection.setCatalog(routingKey2DB.getDatabaseName());

问题是,在NutDao如何设置链接的数据库呢

NutDao dao = new NutDao(dataSource);
11 回复

DruidDataSource有个属性叫 "defaultCatalog"

多谢帮助!
这样设置应该能解决我的问题,
就是每次都要改感觉不是太好
NutDao里面没提供相关支持吗?

每次都要改?? 没懂

我们这边是按数据库实例来做链接池的,
Map<ins, Druid>
一个数据库实例下面可能有多个库。
连接时,我能获取本次要获取的ins和库信息
所以每次根据ins获取到Druid后,都要设置一下defaultCatalog
这样使用上应该没啥问题,就是感觉不够优雅

这是每次新建一个NutDao的节奏???

这样?

public class CatalogDataSource {
   private DataSource dataSource;
   private String catalog;
   public CatalogDataSource(CatalogDataSource dataSource, String catalog) {
        this.dataSource = dataSource;
        this.catalog = catalog;
   }
   public Connection getConnection() {
        Connection conn = dataSource.getConnection();
        conn.setCatalog(catalog);
        return conn;
   }
  // 其他无关紧要的方法
}

就是每次新建一个NutzDao啊

请问这样开销会成为性能瓶颈吗?

不是你上面代码那样描述的
类似于下面这样:

	        DruidDataSource dataSource = getDataSource(routingKey2DB.getUrl());
		dataSource.setDefaultCatalog(routingKey2DB.getDatabaseName());
		NutDao dao = new NutDao(dataSource);
		return dao;

我觉得你用数据库ip+catalog做key, NutDao实例做value, 放在一个Map里面, 不要每次新建

然后呢, 用我上面写的CatalogDataSource 就可以把catalog固定下来啦, 从而实现不同的NutDao共享一个DataSource, 但是使用不同的catalog

多谢回复!
讨论过你上面的这种实现
老大的意思是,数据库连接池要做到mysql instance级别,如果做到DB级别,不方便连接池的管理

就是mysql instance级别哦, 然后用CatalogDataSource 代理原本的DataSource, 供连接给NutDao的时候,就是特定的catalog了

Map ins = new HashMap<String, DruidDataSource>();
Map daos = new HashMap<String, NutDao>();

String key = insName+ "_" + catalogName;
Dao dao = daos.get(key);
if (dao != null)
    return dao;
DataSource dataSource = ins.get(insName);
dao = new NutDao(new CatalogDataSource(dataSource, catalogName));
daos.put(key, dao);
return;

嗯嗯,理解你的思路了
NutzDao最终也是从getConnection()这个方法获取connection的
CatalogDataSource 应该实现DataSource接口
多谢!

添加回复
请先登陆
回到顶部