关于Jfinal配合quartz进行定时任务。数据源用的是Druid,经常出现数据源连接超时,网上说用Jfinal Db+Record 模式就可以解决该问题,我所有定时任务用的都是Jfinal Db+Record 模式 ,但是还是经常出现以下报错,问题并没有解决,
druid配置如下:
@Override
	public void configPlugin(Plugins me) {
		/**配置druid数据连接池插件**/
		DruidPlugin dp = new DruidPlugin(PropKit.get("jdbcUrl"), PropKit.get("user"), PropKit.get("password"),PropKit.get("driverClass"));
		dp.setMaxActive(30).
		setInitialSize(1)
		.setMaxWait(60000)
		.setMinIdle(5).setTimeBetweenEvictionRunsMillis(6000)
		.setMinEvictableIdleTimeMillis(300000)
		.setValidationQuery("SELECT 'x'")
		.setTestWhileIdle(true).
		setTestOnBorrow(false).
		setTestOnReturn(false).
		setFilters("stat").
		/**配置druid监控**/
		addFilter(new StatFilter()).//sql监控
		addFilter(new WallFilter()).//防止sql注入
	    setMaxPoolPreparedStatementPerConnectionSize(20);
		WallFilter wall=new WallFilter();
		wall.setDbType("mysql");
		dp.addFilter(wall);
		me.add(dp);
		
		ActiveRecordPlugin arp = MyDB.loadTableConfig(dp);
//		arp.setShowSql(true);
		me.add(arp);定时任务代码如下:
@Scheduled(fixedDelay = 1000 * (60 * 60 * 1))
// 间隔一个小时执行
/* @Scheduled(cron="0 0 0 * * ?") */// 固定时间执行
public class SysAdopt implements Job {
	private static Log logger = LogFactory.getLog(SysAdopt.class);
	@Override
	public void execute(JobExecutionContext arg) throws JobExecutionException {
		try {
			// 查询所有系统选择的问题
			Date beginDate = new Date();
			Calendar date = Calendar.getInstance();
			date.setTime(beginDate);
			date.set(Calendar.DATE, date.get(Calendar.DATE) - 1);
			String endDate = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).format(date.getTime());
			logger.info("之前的时间===" + endDate);
//			List<Question> questions =Question.dao.queryForList("*", "selectType = 1 and createDate<= ? and state = 0", endDate);
			List<Record> questions = Db.find("select * from question where selectType = 1 and createDate<= ? and state = 0", endDate),
					orderlist=Db.find("select paymentNo,orderNo,type from order_table where state=1 and paymentNo is not null and wxOrder is null");
			logger.info("系统选择问题  定时任务测试开始===");
			for (Record question : questions) {
				UserPriceUtil.calculatingUserAmount(question);
			}
			if(StringUtil.isNotEmpty(orderlist)){
				List<OrderTable> list=new ArrayList<>();
				OrderTable order;
				boolean useCert;
				for (Record o : orderlist) {
					useCert=o.getInt("type")==2;
					Map<String, String> wxOrder= PaymentApi.orderQuery(o.get(useCert?"orderNo":"paymentNo"),useCert);
					order=new OrderTable();
					order.set("wxOrder", JSONObject.toJSONString(wxOrder));
					order.set("paymentNo", o.get("paymentNo"));
					order.set("orderNo", o.get("orderNo"));
					list.add(order);
				}
				Db.batch("update order_table set wxOrder =? where paymentNo=? and orderNo=?", "wxOrder, paymentNo,orderNo", list, list.size());
			}
			logger.info("系统选择问题  定时任务结束===");
		} catch (Exception e) {
			logger.error("定时任务系统选择问题异常:",e);
		}
	}
}2018:04:20:15:56:17 ERROR [com.admin.util.quartz.SysAdopt] (SysAdopt.java:47) - 定时任务系统选择问题异常: com.jfinal.plugin.activerecord.ActiveRecordException: com.alibaba.druid.pool.DataSourceClosedException: dataSource already closed at Mon Apr 16 13:59:58 CST 2018 at com.jfinal.plugin.activerecord.Model.find(Model.java:565) at com.admin.model.MyDB.find(MyDB.java:69) at com.admin.model.MyDB.queryForList(MyDB.java:82) at com.admin.util.quartz.SysAdopt.execute(SysAdopt.java:40) at org.quartz.core.JobRunShell.run(JobRunShell.java:206) at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:548) Caused by: com.alibaba.druid.pool.DataSourceClosedException: dataSource already closed at Mon Apr 16 13:59:58 CST 2018 at com.alibaba.druid.pool.DruidDataSource.getConnectionInternal(DruidDataSource.java:1057) at com.alibaba.druid.pool.DruidDataSource.getConnectionDirect(DruidDataSource.java:960) at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:4544) at com.alibaba.druid.filter.FilterAdapter.dataSource_getConnection(FilterAdapter.java:2723) at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:4540) at com.alibaba.druid.filter.stat.StatFilter.dataSource_getConnection(StatFilter.java:661) at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:4540) at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:938) at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:930) at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:102) at com.jfinal.plugin.activerecord.Config.getConnection(Config.java:161) at com.jfinal.plugin.activerecord.Model.find(Model.java:562) ... 5 more
 项目:JFinal
 
//解决BAE3.0 mysql公有数据库30秒断连接限制
druidPlugin.setTestWhileIdle(true);
druidPlugin.setTestOnBorrow(true);
druidPlugin.setTestOnReturn(true);拿去调试下。