搭建maven web项目并配置quartz定时任务【业务:对比数据变化内容】 历程
搭建maven web项目并配置quartz定时任务【业务:对比数据变化内容】 历程
2018年03月03日 10:51:10 守望dfdfdf 阅读数:100更多
个人分类: 工作 问题
编辑
版权声明:本文为博主原创文章,转载请注明文章链接。 https://blog.csdn.net/xiaoanzi123/article/details/79380777
前提说明:
之前的博客 http://blog.csdn.net/xiaoanzi123/article/details/78843037 记录了当时开发的一个功能,就是从数据库一个表的某个字段(这个字段存的是xml字符串)取出xml字符串,在程序中解析,取出各个标签的值,封装到不同的bean,然后hibernate存入各自bean对应的表。 这个功能当时开发时,该项目中的基础是spring框架和maven。别的什么都没有。
现在:要把该maven项目,转换成maven web项目,每天对比一次前面提到的xml内容是否发生变化,并且把变化 的内容返回到页面给技术人员展示。同时提供一个确认功能,意思是让技术人员手动确认他已经知道该条内容发生变化的详情。
关键点: 备份旧数据:每日材料(xml)内容要先解析再入库,既然那要对比昨日和今日的变化内容,那就要对比两天的额数据。创建 储存解析后入库数据的表 的 备份表 就很有必要了,以用来存储昨日数据。因为之前做的解析xml时,若一个材料内容发生变化,会先删除 旧数据,再把新解析的新数据插入。
过程问题:
整个过程遇到了好多问题,一直也没顾着整理,现在集中记录整理下,遇到的问题越多,说明自己越弱,月能积累经验提升解决问题的能力。
① maven项目红色感叹号, 一般常用的maven项目问题处理办法有如下:项目点击右键--maven--update dependencies ;
项目右键--maven--update project configuration ; maven clean ;maven install ;项目 clean 等等。目前为止遇到的maven 疑问 基本都是这几步都试一下,差不多就解决了。当然一些具体问题得具体分析。
② maven 构建build 时报 test 错误。一句话,采用跳过test。参考文章:
http://blog.csdn.net/honghailiang888/article/details/50687079 声明:图片来自该文章。
③ 代码中 import部分报错,提示 the im[port xxxx cannot be resolved 。但是确定引入的内容存在,路径正确。
首先,clean项目【我发现使用eclipse或者myeclipse ,一些问题怎么找也解决不掉,clean下就好了,这种情况遇到很多次了。所以不妨先试一下】,然后,基本上是还是因为maven引入以来的原因,参考上述①的内容。
④ 在项目中配置spring mvc 等内容后,我把项目 把maven项目转成 maven web项目。始终出不来页面。这个过程可把我折腾的够呛。我自身的原因是对maven web 项目 目录结构不熟悉,导致问题不断。
主要问题是项目转成web项目后,webcontent目录,src目录,编译后的class文件到底在哪?
经过这次算是记忆深刻,首先放上参考文章连接:
如何把maven项目转换成web项目
该文中 第五【修改部署项目时文件的发布路径,右键项目,Properties-->Deployment Assembly,删除test两项以及WebContent,因为test是测试时使用,并不需要部署】,
第六【添加src/main/webapp的部署路径以及】,
第七【添加Maven Dependencies的部署路径】 步是第一次清晰的接触,也是重点,不然就是各种问题困惑了,也是我走过的坑吧。
还有,该文中第二步少说了一点我觉得很重要:转换成web项目,选中Dynamic Web Module和JavaScript,这里我选的是Dynamic Web Module版本是3.0,然后先别着急点击ok,注意下面的黄色部分的提示:futher configuration available..... ,点击进入以后,将Context directory修改成src/main/webapp,并选择生成web.xml,保存。如下图:
此时你会看到你的工程结构如下图,src/main目录下出现了java/resources/webapp三个目录,这样就ok了。关于这一点:
http://blog.csdn.net/yu616568/article/details/70739976 这篇文章中有提到。
还有一片参考文章很清晰直观:maven和web项目标准目录结构
总结:web-content是 java 一般web项目下生成目录,里面存放web的相关内容。而 maven web都在src目录下。熟悉maven web的创建过程就好,问题之所以这么多是没经验,我当时甚至手动去创建web-content目录,可笑了。
⑤ 开始配置quartz定时任务。 quartz与spring怎么结合配置我就不再赘述,推荐一篇博客可以参考下:
http://blog.csdn.net/tanqian351/article/details/53584737
附上目前我的spring与quartz的配置文件spring-quartz.xml的代码:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <!--quartz与spring整合 第一步 : 定义任务的bean(工作任务的job) --> <bean id="getHcDataJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject"> <bean class=" com.hello.tasks.QuartzJob"></bean> </property> <property name="targetMethod" value="getNewestData" /> <property name="concurrent" value="false" /> </bean> <bean id="dataCopyJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject"> <bean class=" com.hello.tasks.QuartzJob"></bean> </property> <property name="targetMethod" value="dataCopy" /> <property name="concurrent" value="false" /> </bean> <bean id="resolveXmlJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject"> <bean class=" com.hello.tasks.QuartzJob"></bean> </property> <property name="targetMethod" value="resolveXml" /> <property name="concurrent" value="false" /> </bean> <bean id="guideInfoJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject"> <bean class=" com.hello.tasks.QuartzJob"></bean> </property> <property name="targetMethod" value="guideInfo" /> <property name="concurrent" value="false" /> </bean> <!-- quartz与spring整合 第二步 定义触发器的bean,定义一个Cron的Trigger,一个触发器只能和一个任务进行绑定 --> <bean id="triggerGetData" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail" ref="getHcDataJob" /> <property name="cronExpression" value="0 50 8 * * ?" /><!-- 获取远程数据job时间设置 --> </bean> <bean id="triggerCopyData" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail" ref="dataCopyJob" /> <property name="cronExpression" value="0 50 8 * * ?" /><!-- 材料数据备份 job时间设置 --> </bean> <bean id="triggerResolveXML" class="org.springframework.scheduling.quartz.CronTriggerBean"> <!-- 指定Tirgger绑定的Job --> <property name="jobDetail" ref="resolveXmlJob" /> <!-- 指定Cron 的表达式 ,--> <property name="cronExpression" value="0 51 15 * * ?" /><!-- xml数据解析job时间设置 --> </bean> <bean id="triggerGuideInfo" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail" ref="guideInfoJob" /> <property name="cronExpression" value="0 0 9 * * ?" /><!-- xxxx数据推送job时间设置 --> </bean> <!-- 总管理类 如果将lazy-init='false'那么容器启动就会执行调度程序 --> <bean id="startQuertz" lazy-init="true" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <!-- 触发器列表 --> <ref bean="triggerGetData" /> <!-- 获取远程的 数据 的 任务 --> <ref bean="triggerCopyData" /> <!-- 插入新数据前 清空bak表 并 拷贝旧数据到bak表 任务 --> <ref bean="triggerResolveXML" /> <!-- 解析xml数据任务 --> <ref bean="triggerGuideInfo" /> <!-- 推送数据的定时任务 --> </list> </property> </bean> </beans>
我的问题是配置好以后启动,quartz的定时任务总是会同时运行两次,这肯定不对。我当时参考了这篇文章:
https://www.cnblogs.com/bingosblog/p/5802367.html ,里面的重点内容如下:
【
1. autodeploy属性值设置为false,如果此项设为true,表示Tomcat服务处于运行状态时,能够监测appBase下的文件,如果有新有web应用加入进来,会自运发布这个WEB应用,设成false就不会。
2.增加deployOnStartup="false",表示Tomcat服务器启动时, 不会自动发布appBase目录下所有的Web应用。
】
我就在tomcat的server.xmnl里面在<host>标签里 把 autodeploy属性值设置为false ,并添加deployOnStartup="false", 。然后启动发现quartz任务运行两次的问题的确没有了。但是web页面出不来,不是报404,就是根本无法加载,网页无法访问。这个问题缠绕了我很久,主要处理问题的方向错了。最后终于发现关键原因是 添加的deployOnStartup="false"导致项目根本就没有发布,怎么会访问到。无语了。host标签改回<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">。然后启动就ok了。等于白折腾半天,但是也学到点东西吧【比如tommcat当时日志显示启动时间很短,虽然没报错,但是不报错不意味着没问题啊,哈哈,这下记忆深刻了,以后别一看日志没报错就直接过了。。。】
至于为什么quartz任务运行了两次,我也解决有点莫名其妙。最初quartz的配置是在多个不同的配置文件写的(调度器,job分别在不同的配置文件),然后依次调用。 后来我把这些xml整合到一起了,放在一个xml文件【spring-quartz.xml】里面,然后在web.xml里面去加载
【
<!-- 加载的时候需要通过上下文初始化参数指定spring配置文件的路径 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<!-- 目前基本上所有的框架在编写路径的时候,都支持“classpath:”这种语法,表示查找起点是从类路径中开始检索 -->
<param-value>classpath*:spring_schedule/**/*.xml</param-value>
</context-param>
】,就没再出现任务跑两次的现象。
我的配置文件目录如下:
后来看了这篇文章算是明白了,讲得很详细全面(在最后)。
http://blog.csdn.net/chaijunkun/article/details/6925889
至此,搭建构造上基本没什么问题了,剩下的就是业务上的功能开发。后续如果有必要我会再写一篇来记录。
搭建maven web项目并配置quartz定时任务【业务:对比数据变化内容】 历程的更多相关文章
- Eclipse 搭建 Maven Web项目
第一步:安装JDK: 第二步:安装Eclipse: 第三步:安装tomcat7: 第四步:安装maven插件: 4.1 下载maven:http://maven.apache.org/download ...
- 在Eclipse中使用Struts和Hibernate框架搭建Maven Web项目
前言 学习使用Java还是2012年的事情,刚开始学习的Java的时候,使用的是MyEclipse工具和SSH框架.初学者适合使用MyEclipse,因为他将struts.Spring和Hiberna ...
- 搭建 maven 项目 搭建 maven web 项目及遇到 JDK 的问题
临时起意搭建一个 maven web 项目.使用的servlet 3.0 及 1.8 JDK. maven 默认创建了一个JDK 1.5 版本的项目. 注意此处选择一下WAR包.不然在配置中配置的话会 ...
- Eclipse搭建maven web项目
最近在做做一个小实验,搭建ssm框架,要求使用maven来统一管理jar包,接下来就看如何建立maven项目,首先必须有要有相应的开发环境:JDK和maven,以及配置tomcat. 开发环境搭建可以 ...
- intellij idea 12 搭建maven web项目 freemarker + spring mvc
配置spring mvc ,写这篇文章的时候spring已经出了4.0 这里还是用稳定的3.2.7.RELEASE,先把spring和freemarker配置好 1.spring mvc配置 在web ...
- Eclipse中导入Maven Web项目并配置其在Tomcat中运行
今天因为实习的关系需要讲公司已经开发的项目导入进Eclipse,而公司的项目是用Maven来构建的所以,需要将Maven项目导入进Eclipse下. 自己因为没有什么经验所以搞了得两个多小时,在这里和 ...
- intellij idea 12 搭建maven web项目
原来公司一直使用eclipse,突然使用这个intellij还真有点不习惯,等用了一段时间才发现的确好用,因为也是刚开始用,所以很多不理解的地方,搭建一个项目从头好好了解下intellij 最开始的m ...
- intellij idea 12 搭建maven web项目 freemarker + spring mvc(续)
上次有2个东西没整明白,一个就是controller的注解使用RequestMappingHandlerAdapter报错 No adapter for handler [controller.Use ...
- idea 15 搭建maven web项目
加上这个创建会比较快
随机推荐
- ASP.NET-GridView之固定表数据滚动
有时候,在线Web开发时,需要显示的数据往往会超过我们规定的表格长度,所以为了方便显示大量数据,为了美观,这里提出了两种显示数据方式. ①可以滚动显示数据但是表头未能获取 效果显示 前端DEMO &l ...
- 【bzoj1965】: [Ahoi2005]SHUFFLE 洗牌 数论-快速幂-扩展欧几里得
[bzoj1965]: [Ahoi2005]SHUFFLE 洗牌 观察发现第x张牌 当x<=n/2 x=2x 当x>n/2 x=2x-n-1 好像就是 x=2x mod (n+1) 就好 ...
- (Python OpenGL)【5】平移 PyOpenGL
(Python OpenGL) 原文:http://ogldev.atspace.co.uk/www/tutorial06/tutorial06.html (英文) 下面是我翻译过来的: 背景 在本 ...
- #6145. 「2017 山东三轮集训 Day7」Easy 动态点分治
\(\color{#0066ff}{题目描述}\) JOHNKRAM 最近在参加 C_SUNSHINE 举办的聚会. C 国一共有 n 座城市,这些城市由 n−1 条无向道路连接.任意两座城市之间有且 ...
- php 过滤重复的数组
首先数组分为一维数组和多维数组 1.一维数组 $a = array(a,b,c,d,a,b,e,f,g); array_unique($a) 就行了 2.二维数组 $a = array( array( ...
- 数据结构11: 栈(Stack)的概念和应用及C语言实现
栈,线性表的一种特殊的存储结构.与学习过的线性表的不同之处在于栈只能从表的固定一端对数据进行插入和删除操作,另一端是封死的. 图1 栈结构示意图 由于栈只有一边开口存取数据,称开口的那一端为“栈顶”, ...
- springloud系列搭建注册中心
首先搭建父工程: 点击next父工程就搭建完成; pom.xml文件: <?xml version="1.0" encoding="UTF-8"?> ...
- Jmeter函数引用和函数重定向【转】
在jmeter中的[选项]中选择[函数助手对话框]---这些函数可以高速有效的帮助我们开展自动化编写与校验!!!!!! 如图: 重点!!!本章的侧重点不讲函数的具体使用,函数具体的使用与java类似, ...
- 分页插件PageHelper
一.PageHelper说明 如果你也在用Mybatis,建议尝试该分页插件,这个一定是最方便使用的分页插件. 该插件目前支持Oracle,Mysql,MariaDB,SQLite,Hsqldb,Po ...
- js 联动下拉菜单
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...