NutzCN Logo
问答 NutDao中,怎样获取DataSource
发布于 2685天前 作者 qq_16dd5808 2343 次浏览 复制 上一个帖子 下一个帖子
标签: dao

由于系统需要多数据库连接,所以做了个工具类,系统启动时,直接初始化多个数据库。用到时,使用get(name)方式获得NutzDao。
目前遇到的问题是,子系统比较多,有多个地方初始化了数据库,导致浪费了数据连接池。
所以我想,在初始化nutzDao的时候,进行判断,如果是链接的同一个地址url,和同一个用户名,那么就不再进行初始化
想通过DataSource的Meta去判断url和userName。如果已经初始化过了,就提示。

工具类如下:目前就是想从nutzDao里面获得dataSource,不知道怎么获得?

package sunyu.kit.database;

import org.nutz.dao.Dao;
import org.nutz.dao.impl.NutDao;
import org.slf4j.Logger;
import sunyu.kit.common.LogKit;

import javax.sql.DataSource;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 数据库工具类
 *
 * @author 孙宇
 */
public class DataBaseKit {

    private static final Logger logger = LogKit.getLogger();

    private static final Map<String, Dao> daoPool = new ConcurrentHashMap<>();//需要适应多个数据库

    /**
     * 添加dao用于操作数据库
     *
     * @param databaseName 数据库名称
     * @param dataSource   数据源
     */
    public static void addDao(String databaseName,
                              DataSource dataSource) {

       //想在这里,通过dataSource去判断daoPool里面的nutzDao是否初始化过这个dataSource

        logger.info("初始化Nutz Dao {} 开始", databaseName);
        if (daoPool.containsKey(databaseName)) {
            logger.warn("Nutz Dao {} 已存在!", databaseName);
        } else {
            NutDao dao = new NutDao(dataSource);
            dao.setRunner(new SpringDaoRunner());
            daoPool.put(databaseName, dao);
        }
        logger.info("初始化Nutz Dao {} 结束", databaseName);
    }

    /**
     * 获得Dao
     *
     * @param databaseName 数据库名称
     * @return
     */
    public static Dao getDao(String databaseName) {
        return daoPool.get(databaseName);
    }

}

4 回复

继承NutDao就可以访问dataSource属性了

没太懂。
···
private static final Map<String, Dao> daoPool = new ConcurrentHashMap<>();//需要适应多个数据库
···
我这里保留了多个NutzDao,链接多个数据库。
用的时候,通过getDao("db1")/getDao("db2")来获得NutzDao操作数据库。

由于多个地方进行初始化,但是dataSource是相同的

addDao("db1",dataSource)//这个
addDao("db2",dataSource)//这个,dataSource相同了,我就不想再次初始化nutzDao,要做一个错误提示
addDao("db3",dataSource2)
public class MyNutDao extends NutDao {
 // 
 
 public DataSource getDataSource() {
       return dataSource;
 }
}

哦,哦,理解了。多谢

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