NutzCN Logo
问答 关闭新建的数据连接池
发布于 3205天前 作者 efraiser 1938 次浏览 复制 上一个帖子 下一个帖子
标签:
public static Dao getNewConnect(String brNo) throws ClassNotFoundException, SQLException {
    SysEastUrlDao sysEastUrlDao = Mvcs.getIoc().get(SysEastUrlDao.class, "sysEastUrlDao");
    SysEastUrl sysEastUrl = sysEastUrlDao.fetch(brNo);
    DruidDataSource ds = new DruidDataSource();
    ds.setDriverClassName(sysEastUrl.getDriver());
    ds.setUrl(sysEastUrl.getUrlStr());
    ds.setUsername(sysEastUrl.getUserName());
    ds.setPassword(sysEastUrl.getPassword());
    ds.getConnection();//用完我想关闭它
    Dao dao = new NutDao(ds);
    return dao;
}
我自己这样想的
    public static void dsClose() {
    DruidDataSource ds = Mvcs.getIoc().get(DruidDataSource.class, "ds");
    ds.close();
}
执行之后报错了
6 回复

想在程序的其他地方能随时的关闭这个连接池

用DaoUp类, NutDao使用的DataSource一旦关闭,那对应的NutDao实例执行任意数据库操作都必死, 除非是SimpleDataSource这种非连接池实现.

// 生成ds的代码xxxxx
// ....
// 新建DaoUp类
DaoUp daoUp = new DaoUp(){}; // 注意最后面的花括号, 因为强制要求继承的.
daoUp.setDataSource(ds);

return daoUp; // 返回daoUp,而非daoUp.dao(), 把对应的dao实例使用完成后, 调用daoUp.close()清理

对于一次性的数据源, 建议使用SimpleDataSource,而非DruidDataSource这种重量级的连接池.

因为数据量比较大采用SimpleDataSource 效率太低了,如果我这边使用完了dao 我怎么获取之前的daoUp实例。(因为我的已经在写了一个函数返回Dao实例并在有些地方应用了)
DaoUp daoUp = Mvcs.getIoc().get(DaoUp.class, "daoUp");
这样吗?还是不能直接采用返回Dao实例的方法

以前没接触过DaoUp 不了解他

晕死, 没看我写的代码?

现在明白你的意思了,谢谢兽总

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