解决定时工程schedulePro无法在tomcat中启动的问题

本文由Markdown语法编辑器编辑完成。

1. 问题提出:

现假设已经有A,B,C三个工程,A为挂号register,B为门诊outpatient,C为收费hisPay三个工程。由于在这三个工程中都存在一些定时功能:
比如,
(1)在register挂号工程中,需要定时(每隔5分钟)去查一下挂号表,是否有已经挂了费但是还未缴费的患者。因为一旦挂号,HIS会将号资源锁号(类似于在12306网站上抢到一张火车票,但是还未缴费时,12306会暂且将该座位锁定30分钟,其他乘客无法再买这张票)。但是如果5分钟内该患者仍然未付费,则需要将该号资源释放,以供别的患者挂号;
(2)在outpatient医生工作站中,需要每晚定时(凌晨1点)将门急诊所有的药品(西药和中成药)处方,通过webservice发送给药剂科,供药剂科审核前一日的药品处方和实际发药的差别;
(3)在hisPay收费工程中,也需要每隔一段时间查询是否有未付费的处方,以作废处方等。
诸如此类的需求。为了能够将不同工程中的定时任务的功能都集中在一个独立的工程中,新创建一个schedule的定时工程,该工程依赖于register, outpatient和hisPay三个工程。

但是,当将这三个工程中的定时任务都迁移到schedule工程后,并且为该工程新建了一个tomcat后,发现无法启动该项目了。通过请教前辈,解决了该问题。特将修改的过程记录如下:

2. 解决方案:

今天的大部分时间都消耗在了如何让定时任务的工程启动的问题上,主要请教了两位专业人士,现在将解决的过程记录下来。

(1)schedule项目导入Eclipse时无法找到依赖工程的问题:

  之前各个工程之间都在pom.xml中定义了依赖关系,因此在代码中,通过Ctrl键可以进入其他工程中的类文件。但是,当我把schedule导入到Eclipse时,里面的那些类却无法相互跳转。
解决方法: 在Eclipse中删除了和schedule的pom冲突的一个工程。然后通过import又重新导入了schedule工程后,这些类就可以相互进行跳转了。

(2)设置本地启动tomcat:

  为了能够让工程编译后,自动能够部署到tomcat中,在schedule的文件夹中增加了一个workspace的文件夹和dev的文件夹。
dev文件夹中主要是:setEnv.batbuild-deploy-start.bat, startJrebelDebugTomcat.bat文件。
在setEnv.bat中,需要根据本地的路径,分别设置TOMCAT_HOME, PROJECT_HOME等常量的路径。
在build-deploy-start.bat中,设置编译生成的war包的名称和路径。
startJrebelDebugTomcat.bat则是启动tomcat的脚本。

(3)启动tomcat时,提示无法找到数据库

  原来是没有在tomcat的两个配置文件:context.xml和server.xml中增加数据源:
在原来server.xml的基础上,增加了一个数据源:

(4)启动tomcat时,提示无法初始化某一个依赖工程中的xml映射文件:

在Eclipse的该项目中,查看该工程目录下的:META-INF/persistence.xml文件。先是将persistence.xml中原来依赖各工程的映射文件:xxx.hbm.xml都删除掉,只留下本工程中独有的映射文件。然后启动tomcat,结果在运行该工程中的语句时,又报缺少相应的xml映射文件。
因此,后来决定将该工程依赖的其他工程的全部hbm.xml都记录到该persistence.xml中。这样该persistence.xml中就记录了依赖工程和本工程中的所有数据库映射文件。

(5)启动tomcat时,报无法创建一个同名的bean

该问题产生的原因是,启动工程时,该工程以及它所依赖的工程中,有一个同名的类,导致无法进行初始化。
解决方案:删除掉被依赖工程中,同名的类,然后再重新编译原来的那个工程,生成jar包。然后将该jar包再拷贝到schedule工程的依赖库中。拷贝路径为:webapps/schedule/WEB-INF/lib, 替换原来那个工程的旧的jar包即可。

最后再启动tomcat,所有的定时任务便会按照设置的时间间隔启动了。

猜你喜欢

转载自blog.csdn.net/inter_peng/article/details/79750424