由于系统需要多数据库连接,所以做了个工具类,系统启动时,直接初始化多个数据库。用到时,使用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);
}
}