关于JFinal中另启动一线程获取数据库链接问题

阿莫斯 发布于 2013/11/12 09:58
阅读 1K+
收藏 1

请问我在JFinal的初始化配置afterJFinalStart 中添加了一个线程用作Lucene索引更新,其中有做数据库查询操作,

查询语句用到了

public List<LuceneTasks> getList(){
		return dao.find("select * from lucene_tasks where status='0'");
	}

但是过了一段时间后,Druid提示数据库已关闭,

请问这种情况怎么再开一个连接呢?@JFinal  

加载中
0
JFinal
JFinal
具体的错误提示截图放上来
0
阿莫斯
阿莫斯

@JFinal 大神,错误提示如下:

严重: unable to init the index of suncrs
com.jfinal.plugin.activerecord.ActiveRecordException: com.alibaba.druid.pool.DataSourceClosedException: dataSource already closed at Tue Nov 12 21:34:17 CST 2013
	at com.jfinal.plugin.activerecord.Model.find(Model.java:424)
	at com.jfinal.plugin.activerecord.Model.find(Model.java:443)
	at cn.iver.model.LuceneTasks.getList(LuceneTasks.java:21)
	at cn.iver.kit.search.CrsIndexTasker.list(CrsIndexTasker.java:43)
	at cn.iver.kit.search.IndexInitJob.run(IndexInitJob.java:34)
	at java.lang.Thread.run(Thread.java:662)
Caused by: com.alibaba.druid.pool.DataSourceClosedException: dataSource already closed at Tue Nov 12 21:34:17 CST 2013
	at com.alibaba.druid.pool.DruidDataSource.getConnectionInternal(DruidDataSource.java:793)
	at com.alibaba.druid.pool.DruidDataSource.getConnectionDirect(DruidDataSource.java:712)
	at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:696)
	at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:686)
	at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:85)
	at com.jfinal.plugin.activerecord.DbKit.getConnection(DbKit.java:129)
	at com.jfinal.plugin.activerecord.Model.find(Model.java:421)
	... 5 more

我Jfinal中配置的代码如下:

public void afterJFinalStart() {
    	Thread indexThread = new Thread( new IndexInitJob());
    	indexThread.start();
    }

0
JFinal
JFinal
调试跟踪一下代码,看具体是在哪个地方 close 掉了数据源
阿莫斯
阿莫斯
您好,发现这个问题是在Eclipse中热部署重新加载代码才出现的,如果没有热部署则不会出现。关闭数据源不是在Dbkit中关闭的,应该是Druid中
阿莫斯
阿莫斯
好的,我试下。
返回顶部
顶部