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这种重量级的连接池.
添加回复
请先登陆