将转换后的时间规则表达式记录到数据库中(也可以写入xml文件中,选上之后往往会令我们不知道所文件的具体位置,3) 记录时间规则 我将时间规则存入数据库中,如果看不惯si把所有的文件名首字母都大写就勾上这个选项吧,从数据库中得到相应的时间规则表达式,Spring Quartz如何动态配置时间Spring Quartz如何动态配置时间1. 目的:动态设置时间,我们的代码中一般都会有一些开关宏,通过在Conditions中配置这些宏的默认值。
组装一台电脑配置清单
参考配置如下:英特尔i9 9900K处理器 盒装: 3899元,超频三 东海逐鹿 D66A 5VRGB CPU散热器:329元,微星MPG Z390 GAMING PLUS主板:998元,索泰RTX2070 霹雳版HA 8G显卡:3199元,金士顿 骇客神条 DDR4 3200 16G内存X2根:569元X2=1138元,金士顿 A2000 500G M.2固态硬盘:599元,台达 红盾系列RS650 额定650W 电源:519元,先马鲁班3豪华版机箱:399元,总价:11080元。备注:显示屏、键盘、鼠标、音箱、耳机等外设自行选购。
怎么配置source insight使得可以编译C语言程序
source insight是个代码浏览工具,
它会自动对你的工程源码进行语法分析,
方便你迅速查找对某个特定符号的引用。它本身不带编译器调试器,但是你可以指定要用的编译器,记得source insight里有这个选项。
1、General
Project File Synchronization-》Remove missing file from project选上可以避免因文件找不到而弹出错误对话框。
把Misc-》Use stricter confirmation dialog选项去掉可以使确认时不输入“yes“。
2、Typing
Source Editing-》Indent commands affect #-preprocessor statements。去掉后(默认值),进行多行缩进时不会影响预处理语句(如#if...#endif)。
Auto Completion-》Use detailed completion window,选上后,联想时可以出现该函数的详细信息。见下图:
(简单)
(详细)
Auto Completion-》Insert paremeters for functions,去掉后,自动联想不会把整个参数都输出到当前行。
Browsing in Lists-》Match syllables while typing(slower)。在symbol list框检索符号时是否采用音节匹配方式,如对于函数FindNext,输入find或者next都可以找到该函数。该功能可能导致反应缓慢(视工程和机器配置而定),建议关闭,因为即使在关闭状态下也可以通过先输入空格再输入单词来动态启用该功能。
注意Browsing in Lists里其实有两个功能,但一般我们只能看到Match syllables while typing这一条,应该是si的菜单设计没有做好,导致在中文windows下不能显示全,另一个功能是Match members while typing,用于打开/关闭按成员变量名来检索类/结构体的功能。
3、Files
Opening Files-》Sharing: Let other programs modify files,以共享方式打开文件,这个很重要,保证可以在其它中同时该文件。典型的场景就是用ide环境去动态编译调试,而用si静态阅读。
Customize ’Open’ Command...,用于设置Ctrl+O打开的页面,默认选项是 Project File list view in Project Window,建议保持默认。
Saving Files-》Preserve Undo data and revision marks after saving,如果发现保存后就不能undo了,请检查该选项是否选中。
Remove extra white space when saving。保存时自动去除每行尾部的空格和tab。建议选中。
4、Languages
自定义其它编程语言的语法解析,这个...还是另写一篇来讲吧。
Conditional Parsing不要错过了,这里的Conditions功能实在让人喜欢。Conditions是什么意思呢?我们的代码中一般都会有一些开关宏,通过在Conditions中配置这些宏的默认值,可以让si把配置为不开启的宏视为无效代码,从而不进行符号检索。
如果源代码中的开关宏太多,还可以使用Condition Parsing中的Scan Files来自动找出所有开关宏。
5、Symbol Lookups
没太多特别的。
6、Display
显示配置和个人喜好和显示器的状态有关,偶用的x60小本,屏幕资源有限,所以在Display Elements里把Project Window, Status Bar, Tool Bar,Clip Window都关了,基本用快捷键可以代替它们。
Options-》Horizontal scroll bars for each new window。很多大师都教导我们说一行不要写太多代码。在这个指导思想下,我们不需要这个东东。
Show exact case of file names。如果看不惯si把所有的文件名首字母都大写就勾上这个选项吧。
Tile source and destination windows for Source Link commands。Source Link很多时候用于外部命令输出结果的解析(如Make, lint),这个功能会把解析结果与目标窗口自动tile,很实用。
Trim long path names with ellipses。这个建议不要选中。事实上这个主要影响标题栏,但一般来说标题栏上的空间是充裕的,选上之后往往会令我们不知道所文件的具体位置。
Spring Quartz如何动态配置时间
Spring Quartz如何动态配置时间
1. 目的:动态设置时间,触发相应的任务
2. 系统架构为 struts spring hibernate
3. 实现步骤:
在页面上设置时间;
将时间转换为Unix Cron Expression;
将转换后的时间规则表达式记录到数据库中(也可以写入xml文件中,这里是项目需要记录入数据库中);
从数据库中得到相应的时间规则表达式;
更新您的任务触发器的时间设置;
RESCHEDULE THE JOB。; - )
4. 具体实现细节:
1) 在页面上设置时间
根据具体的业务需求,设置时间规则,下面以某一项目为例,需要 按每月、每周、自定义分为三种规则。
1 《 tr 》
2 《 th 》 执行这个任务 《/ th 》
3 《 td style =“font-weight:bold;“ 》
4 《 html:radio property =“everyWhat“ styleClass =“InputBorderNone“ value =“monthly“ onclick =“changeStatus(this.value)“ 》 每月 《/ html:radio 》
5 《 html:radio property =“everyWhat“ styleClass =“InputBorderNone“ value =“weekly“ onclick =“changeStatus(this.value)“ 》 每周 《/ html:radio 》
6 《 html:radio property =“everyWhat“ styleClass =“InputBorderNone“ value =“userDefined“ onclick =“changeStatus(this.value)“ 》 自定义 《/ html:radio 》
7 《 html:hidden property =“jobName“ value =“compare“ /》
8 《/ td 》
9 《/ tr 》
10
每月则需要选择该月的第几个星期的星期几
1 《 tr style =“display:“ id =“whichWeek“ 》
2 《 th 》 选择第几个星期 《/ th 》
3 《 td style =“font-weight:bold;“ 》
4 《 html:select property =“week“ 》
5 《 html:option value =“1“ 》 一 《/ html:option 》
6 《 html:option value =“2“ 》 二 《/ html:option 》
7 《 html:option value =“3“ 》 三 《/ html:option 》
8 《 html:option value =“4“ 》 四 《/ html:option 》
9 《/ html:select 》
10 《 html:select property =“dayOfMonth“ 》
11 《 html:option value =“1“ 》 星期日 《/ html:option 》
12 《 html:option value =“2“ 》 星期一 《/ html:option 》
13 《 html:option value =“3“ 》 星期二 《/ html:option 》
14 《 html:option value =“4“ 》 星期三 《/ html:option 》
15 《 html:option value =“5“ 》 星期四 《/ html:option 》
16 《 html:option value =“6“ 》 星期五 《/ html:option 》
17 《 html:option value =“7“ 》 星期六 《/ html:option 》
18 《/ html:select 》
19 《/ td 》
20 《/ tr 》
21
每周则需要选择星期几
1 《 tr style =“display:none“ id =“whichDay“ 》
2 《 th 》 选择星期 《/ th 》
3 《 td style =“font-weight:bold;“ 》
4 《 html:select property =“dayOfWeek“ 》
5 《 html:option value =“1“ 》 星期日 《/ html:option 》
6 《 html:option value =“2“ 》 星期一 《/ html:option 》
7 《 html:option value =“3“ 》 星期二 《/ html:option 》
8 《 html:option value =“4“ 》 星期三 《/ html:option 》
9 《 html:option value =“5“ 》 星期四 《/ html:option 》
10 《 html:option value =“6“ 》 星期五 《/ html:option 》
11 《 html:option value =“7“ 》 星期六 《/ html:option 》
12 《/ html:select 》
13 《/ td 》
14 《/ tr 》
15
自定义则选择具体的日期,如 2007-1-10
三种规则都需要设定时间点
1 《 tr 》
2 《 th 》 起始时间 《/ th 》
3 《 td style =“font-weight:bold;“ 》
4 《 html:select property =“timeType“ styleId =“type“ onchange =“changeStatus2(this.value)“ 》
5 《 html:option value =“AM“ 》 上午 《/ html:option 》
6 《 html:option value =“PM“ 》 下午 《/ html:option 》
7 《/ html:select 》
8 《 html:select property =“hour“ styleId =“amHours“ 》
9 《 html:option value =“1“ 》 1 《/ html:option 》
10 《 html:option value =“2“ 》 2 《/ html:option 》
11 《 html:option value =“3“ 》 3 《/ html:option 》
12 《 html:option value =“4“ 》 4 《/ html:option 》
13 《 html:option value =“5“ 》 5 《/ html:option 》
14 《 html:option value =“6“ 》 6 《/ html:option 》
15 《 html:option value =“7“ 》 7 《/ html:option 》
16 《 html:option value =“8“ 》 8 《/ html:option 》
17 《 html:option value =“9“ 》 9 《/ html:option 》
18 《 html:option value =“10“ 》 10 《/ html:option 》
19 《 html:option value =“11“ 》 11 《/ html:option 》
20 《 html:option value =“12“ 》 12 《/ html:option 》
21 《/ html:select 》
22 《 html:select property =“hour“ styleId =“pmHours“ style =“display:none“ 》
23 《 html:option value =“13“ 》 13 《/ html:option 》
24 《 html:option value =“14“ 》 14 《/ html:option 》
25 《 html:option value =“15“ 》 15 《/ html:option 》
26 《 html:option value =“16“ 》 16 《/ html:option 》
27 《 html:option value =“17“ 》 17 《/ html:option 》
28 《 html:option value =“18“ 》 18 《/ html:option 》
29 《 html:option value =“19“ 》 19 《/ html:option 》
30 《 html:option value =“20“ 》 20 《/ html:option 》
31 《 html:option value =“21“ 》 21 《/ html:option 》
32 《 html:option value =“22“ 》 22 《/ html:option 》
33 《 html:option value =“23“ 》 23 《/ html:option 》
34 《 html:option value =“0“ 》 0 《/ html:option 》
35 《/ html:select 》 点
36 《 html:text property =“minute“ name =“minute“ style =“width:20px;“ value =“0“ onchange =“valTime(this.value)“ /》 分
37 《 html:text property =“second“ name =“second“ style =“width:20px;“ value =“0“ onchange =“valTime(this.value)“ /》 秒(0-59之间的整数)
38 《/ td 》
39 《/ tr 》
40
OK. 这样我们的页面设置就完成了。: - )
上回说到,我们的设置页面已经做好了,接下来就是将时间转换为Unix Cron Expression。
2) 将时间转换为Unix Cron Expression
需要ActionForm将页面表单数据映射到Action中,然后在Action中转换为cron expression:
1 SchedulerForm schedulerForm = (SchedulerForm) form;
2 String jobName = schedulerForm.getJobName();
3 String cronExpression = ““ ;
4 String commonNeeds = {schedulerForm.getSecond(), schedulerForm.getMinute(), schedulerForm.getHour()};
5 String monthlyNeeds = {schedulerForm.getWeek(), schedulerForm.getDayOfMonth()} ;
6 String weeklyNeeds = schedulerForm.getDayOfWeek();
7 String userDefinedNeeds = schedulerForm.getDate();
8 String everyWhat = schedulerForm.getEveryWhat();
9 // 得到时间规则
10 cronExpression = CronExpConversion.getCronExpression(everyWhat, commonNeeds,
11 monthlyNeeds, weeklyNeeds, userDefinedNeeds);
12
我定义了一个 规则类来处理转换规则(写得不是很好 能用就行 嘿嘿)
1
2 /**
3 * 页面设置转为UNIX cron expressions 转换类
4 * CronExpConversion
5 */
6 public class CronExpConversion {
7
8 /**
9 * 页面设置转为UNIX cron expressions 转换算法
10 * @param everyWhat
11 * @param commonNeeds 包括 second minute hour
12 * @param monthlyNeeds 包括 第几个星期 星期几
13 * @param weeklyNeeds 包括 星期几
14 * @param userDefinedNeeds 包括具体时间点
15 * @return cron expression
16 */
17 public static String convertDateToCronExp(String everyWhat,
18 String monthlyNeeds, String weeklyNeeds,
19 String userDefinedNeeds) {
20 String cronEx = ““ ;
21 String commons = commonNeeds “ “
22 commonNeeds “ “ ;
23 String dayOfWeek = ““ ;
24 if ( “ monthly “ .equals(everyWhat)) {
25 // eg.: 6#3 (day 6 = Friday and “#3“ = the 3rd one in the
26 // month)
27 dayOfWeek = monthlyNeeds
28 CronExRelated.specialCharacters
29 .get(CronExRelated._THENTH) monthlyNeeds;
30 cronEx = (commons
31 CronExRelated.specialCharacters.get(CronExRelated._ANY)
32 “ “
33 CronExRelated.specialCharacters.get(CronExRelated._EVERY)
34 “ “ dayOfWeek “ “ ).trim();
35 } else if ( “ weekly “ .equals(everyWhat)) {
36 dayOfWeek = weeklyNeeds; // 1
37 cronEx = (commons
38 CronExRelated.specialCharacters.get(CronExRelated._ANY)
39 “ “
40 CronExRelated.specialCharacters.get(CronExRelated._EVERY)
41 “ “ dayOfWeek “ “ ).trim();
42 } else if ( “ userDefined “ .equals(everyWhat)) {
43 String dayOfMonth = userDefinedNeeds.split( “ - “ );
44 if (dayOfMonth.startsWith( “ 0 “ )) {
45 dayOfMonth = dayOfMonth.replaceFirst( “ 0 “ , ““ );
46 }
47 String month = userDefinedNeeds.split( “ - “ );
48 if (month.startsWith( “ 0 “ )) {
49 month = month.replaceFirst( “ 0 “ , ““ );
50 }
51 String year = userDefinedNeeds.split( “ - “ );
52 // FIXME 暂时不加年份 Quartz报错
53 /* cronEx = (commons dayOfMonth “ “ month “ “
54 CronExRelated.specialCharacters.get(CronExRelated._ANY)
55 “ “ year).trim(); */
56 cronEx = (commons dayOfMonth “ “ month “ “
57 CronExRelated.specialCharacters.get(CronExRelated._ANY)
58 “ “ ).trim();
59 }
60 return cronEx;
61 }
62 }
63
这样就将页面的时间设置转为了Cron Expression。
书接上回,上回说到,我们已经将页面的时间设置转为了Cron Expression,下面我记录了时间规则。
3) 记录时间规则
我将时间规则存入数据库中,目的是为了生成历史日志,也可以存入XML文件中。当然您也可以省略此步,直接将转换后的规则放入相应的Quartz trigger中。
4) 更新任务触发器的时间设置
到了关键的一步了,也是最简单的一步,一个方法就可以实现了。
首先,我们需要通过trigger的名称得到一个CronTriggerBean;
其次,通过trigger的setCronExpression(String cronExp)方法将新的表达式注入;
最后,RESCHEDULE THE JOB,OK!
-组装