首页 > 北京SEO优化 > 异域美食 > 正文

quartz与jfinal整合存在的问题解决

2019-04-07作者:

jfinal与quartz整合时使用数据库存储方式,在启动时会报错,系统无法启动

quartz.properties配置信息如下:

org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.dataSource = my

org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 5
org.quartz.threadPool.threadPriority = 5

org.quartz.dataSource.my.connectionProvider.class = com.jfinal.plugin.quartz.ConnectionPoolProvider

AppConfig代码:

public class AppConfig extends JFinalConfig {
    public static DruidPlugin druidPlugin;
    
    	@Override
	public void configPlugin(Plugins me) {
		// 主系统数据库
		String databaseUse = getProperty("databaseUse", "master");
		druidPlugin = new DruidPlugin(getProperty(databaseUse + "_jdbcUrl"), getProperty(databaseUse + "_user"),
				getProperty(databaseUse + "_password").trim(), getProperty(databaseUse + "_jdbcClass"));
	}
}

ConnectionPoolProvider代码:

public class ConnectionPoolProvider implements ConnectionProvider {
	@Override
	public Connection getConnection() throws SQLException {
		return AppConfig.druidPlugin.getDataSource().getConnection();
	}

	@Override
	public void initialize() throws SQLException {
	}

	@Override
	public void shutdown() throws SQLException {
	}

}

报错信息如下:

Caused by: java.lang.NullPointerException
	at com.jfinal.plugin.quartz.ConnectionPoolProvider.getConnection(ConnectionPoolProvider.java:13)
	at org.quartz.utils.DBConnectionManager.getConnection(DBConnectionManager.java:108)
	at org.quartz.impl.jdbcjobstore.JobStoreSupport.getConnection(JobStoreSupport.java:775)

错误产生原因:

类加载器不同,导致ConnectionPoolProvider中访问AppConfig.druidPlugin(static属性)的时候与系统中实际可用(期望对象)并不是同一对象,导致ConnectionPoolProvider访问到AppConfig.druidPlugin为空

解决办法:

/**
 * 建议使用 JFinal 手册推荐的方式启动项目 运行此 main
 * 方法可以启动项目,此main方法可以放置在任意的Class类定义中,不一定要放于此
 */
public static void main(String[] args) {
	// JFinal.start("src/main/webapp", 80, "/", 5);
	// 不想一个类一个类找的话直接.addHotSwapClassPrefix("org.quartz.")
	UndertowServer.create(AppConfig.class).addHotSwapClassPrefix("org.quartz.").start();
}

经验总结,借用波总的代码注释:

	/**
	 * 仅用于解决项目的 JFinalConfig 继承类打成 jar 包,并且使用 undertow.devMode=true 配置
	 * 时报出的异常,以上两个条件没有同时成立时无需理会,也就是说没有报异常就无需理会
	 * 
	 * 假定项目中的 JFinalConfig 的继承类 com.abc.MyConfig 被打进了 jar 包并且
	 * undertow.devMode 设置成了 true,这里在启动项目的时候由于 ClassLoader
	 * 不同会报出以下异常:
	 *   Can not create instance of class: com.abc.MyConfig. Please check the config in web.xml
	 * 
	 * 解决办法是使用 addHotSwapClassPrefix(...) :
	 *   UndertowServer.create(MyConfig.class).addHotSwapClassPrefix("com.abc.").start();
	 * 
	 * 只添加 JFinalConfig 的继承类 com.abc.MyConfig 也可以:
	 *   UndertowServer.create(MyConfig.class).addHotSwapClassPrefix("com.abc.MyConfig").start();
	 *   
	 * 注意:该配置对生产环境无任何影响,在打包部署前无需删除该配置
	 */


【源码分享】JFinal俱乐部...

这套UI目前是为JFinal俱乐部项目和JFinal官网新版...

欢迎使用开源的驰骋表单引...

   

JFinal增加从内存获取文件...

jfinal现有的文件上传,是用jfinal+cos实现,文件...

我即将前往一个大家听闻已...

我即将前往一个大家听闻已久但十分陌生地方,待我...

jfinal engine 在启动时从...

思路:在JFinalConfig的实现类中配置插件的启动时...

JFinal &jfinal...

JFinal 离线文档 chm

下载地址:

预览...

请问,JFINAL是使用什么链...

也就是底层使用的是什么进行数据库链接和操作的?<...

jfinal 图片上传问题

问题如下:

前端上传一张base64格式的图片,...

formdata 提交form表单,...

如下图,日志里面已经输出了用户名和密码,但是使...

关于linux平台 jfinal...

代码命令

quartz与jfinal整合存在的...

jfinal与quartz整合时使用数据库存储方式,在启动时...

JFinal3.6文档,离线版

因为本人公司没有外网,所以无法在线访问jfinal官...

JFinal模板开发的一个IT资...

cron4j表达式与使用简介

cron4j是一个轻量级的Java任务调度工具。

引...

jetty server 2019.1 发布

   为了加快启动速度,提升开发体验,早...

JBolt1.6.8发布-JFinal极...

JBolt是专门为JFinal社区开发者定制的Eclipse开发...

Jfinal 3.5+jfinal...

最近在尝试把公司的一些老项目改成 jfinal 版本 遇...

jfinal查数据遇到对象名无...

使用jfinal对接视图时遇到对象名无效问题,sql语句...

jfinal实现热部署需要引入...

jfinal实现热部署需要引入哪些Jar包

北京SEO-上海网站推广优化-天津杭州百度网络排名公司