Quartz在Spring中如何动态配置时间

Quartz在Spring中如何动态配置时间
Quartz在Spring中如何动态配置时间

Quartz在Spring中如何动态配置时间

在项目中有一个需求,需要灵活配置调度任务时间,并能自由启动或停止调度。

有关调度的实现我就第一就想到了Quartz这个开源调度组件,因为很多项目使用过,Spring 结合Quartz静态配置调度任务时间,非常easy。比如:每天凌晨几点定时运行一个程序,这只要在工程中的spring配置文件中配置好spring整合quartz的几个属性就好。

Spring配置文件

引用

这种配置就是对quartz的一种简单的使用了,调度任务会在spring启动的时候加载到内存中,按照cronTrigger中定义的cronExpression定义的时间按时触发调度任务。但是这是quartz 使用“内存”方式的一种配置,也比较常见,当然对于不使用spring的项目,也可以单独整合quartz。方法也比较简单,可以从quartz的doc中找到配置方式,或者看一下《Quartz Job Scheduling Framework 》。

但是对于想持久化调度任务的状态,并且灵活调整调度时间的方式来说,上面的内存方式就不能满足要求了,正如本文开始我遇到的情况,需要采用数据库方式集成Quartz,这部分集成其实在《Quartz Job Scheduling Framework 》中也有较为详细的介绍,当然doc文档中也有,但是缺乏和spring集成的实例。

一、需要构建Quartz数据库表,建表脚本在Quartz发行包的docs\dbTables目录,里面有各种数据库建表脚本,我采用的Quartz 1.6.5版本,总共12张表,不同版本,表个数可能不同。我用mysql数据库,执行了Quartz发行包的docs\dbTables\tables_mysql_innodb.sql建表。

二、建立java project,完成后目录如下

project,完成后目录如下

三、配置数据库连接池

配置jdbc.properties文件

引用

jdbc.driverClassName=com.mysql.jdbc.Driver

jdbc.url=jdbc:mysql://localhost:3306/quartz?useUnicode=true&characterEncoding=UTF-8&auto Reconnect=true

https://www.360docs.net/doc/9214871218.html,ername=root

jdbc.password=kfs

cpool.checkoutTimeout=5000

cpool.minPoolSize=10

cpool.maxPoolSize=25

cpool.maxIdleTime=7200

cpool.acquireIncrement=5

cpool.autoCommitOnClose=true

配置applicationContext.xml文件

引用

xmlns:xsi="https://www.360docs.net/doc/9214871218.html,/2001/XMLSchema-instance"

xmlns:aop="https://www.360docs.net/doc/9214871218.html,/schema/aop"

xmlns:tx="https://www.360docs.net/doc/9214871218.html,/schema/tx"

xmlns:context="https://www.360docs.net/doc/9214871218.html,/schema/context"

xmlns:jee="https://www.360docs.net/doc/9214871218.html,/schema/jee"

xsi:schemaLocation="

https://www.360docs.net/doc/9214871218.html,/schema/context https://www.360docs.net/doc/9214871218.html,/schema/context/spring-context-2.5.xsd

https://www.360docs.net/doc/9214871218.html,/schema/beans https://www.360docs.net/doc/9214871218.html,/schema/beans/spring-beans-2.5.xsd

https://www.360docs.net/doc/9214871218.html,/schema/tx https://www.360docs.net/doc/9214871218.html,/schema/tx/spring-tx-2.5.xsd

https://www.360docs.net/doc/9214871218.html,/schema/aop https://www.360docs.net/doc/9214871218.html,/schema/aop/spring-aop-2.5.xsd

https://www.360docs.net/doc/9214871218.html,/schema/jee

https://www.360docs.net/doc/9214871218.html,/schema/jee/spring-jee-2.5.xsd" >

classpath:jdbc.properties

这里只是配置了数据连接池,我使用c3p0 连接池,还没有涉及到Quartx有关配置,下面且听我慢慢道来。

四、实现动态定时任务

什么是动态定时任务:是由客户制定生成的,服务端只知道该去执行什么任务,但任务的定时是不确定的(是由客户制定)。

这样总不能修改配置文件每定制个定时任务就增加一个trigger吧,即便允许客户修改配置文件,但总需要重新启动web服务啊,研究了下Quartz在Spring中的动态定时,发现

引用

0/10 * * * * ?

中cronExpression是关键,如果可以动态设置cronExpression的值,就可以顺利解决问题了。这样我们就不能直接使用org.springframework.scheduling.quartz.CronTriggerBean,需要自己实现一个动态调度服务类,在其中构建CronTrigger或SimpleTrigger,动态配置时间。

动态调度服务接口:

Java代码

package com.sundoctor.quartz.service;

import java.util.Date;

import org.quartz.CronExpression;

public interface SchedulerService {

void schedule(String cronExpression);

void schedule(String name,String cronExpression);

void schedule(CronExpression cronExpression);

void schedule(String name,CronExpression cronExpression);

void schedule(Date startTime);

void schedule(String name,Date startTime);

void schedule(Date startTime,Date endTime);

void schedule(String name,Date startTime,Date endTime);

void schedule(Date startTime,Date endTime,int repeatCount);

void schedule(String name,Date startTime,Date endTime,int repeatCount);

void schedule(Date startTime,Date endTime,int repeatCount,long repeatInterval) ;

void schedule(String name,Date startTime,Date endTime,int repeatCount,long repeatInterval);

}

package com.sundoctor.quartz.service; import java.util.Date; import org.quartz.CronExpression; public interface SchedulerService { void schedule(String cronExpression); void schedule(String name,String cronExpression); void schedule(CronExpression cronExpression); void schedule(String name,CronExpression cronExpression); void schedule(Date startTime); void schedule(String name,Date startTime); void schedule(Date startTime,Date endTime); void schedule(String name,Date startTime,Date endTime); void schedule(Date startTime,Date endTime,int repeatCount); void schedule(String name,Date startTime,Date endTime,int repeatCount); void schedule(Date startTime,Date endTime,int repeatCount,long repeatInterval) ; void schedule(String name,Date startTime,Date endTime,int repeatCount,long repeatInterval); }

动态调度服务实现类:

Java代码

package com.sundoctor.quartz.service;

import java.text.ParseException;

import java.util.Date;

import java.util.UUID;

import org.quartz.CronExpression;

import org.quartz.CronTrigger;

import org.quartz.JobDetail;

import org.quartz.Scheduler;

import org.quartz.SchedulerException;

import org.quartz.SimpleTrigger;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.beans.factory.annotation.Qualifier;

import org.springframework.stereotype.Service;

@Service("schedulerService")

public class SchedulerServiceImpl implements SchedulerService {

private Scheduler scheduler;

private JobDetail jobDetail;

@Autowired

public void setJobDetail(@Qualifier("jobDetail") JobDetail jobDetail) {

this.jobDetail = jobDetail;

}

@Autowired

public void setScheduler(@Qualifier("quartzScheduler") Scheduler scheduler) { this.scheduler = scheduler;

}

@Override

public void schedule(String cronExpression) {

schedule(null, cronExpression);

}

@Override

public void schedule(String name, String cronExpression) {

try {

schedule(name, new Cronexpression_r(cronExpression));

} catch (ParseException e) {

throw new RuntimeException(e);

}

}

@Override

public void schedule(CronExpression cronExpression) {

schedule(null, cronExpression);

}

@Override

public void schedule(String name, CronExpression cronExpression) {

if (name == null || name.trim().equals("")) {

name = UUID.randomUUID().toString();

}

try {

scheduler.addJob(jobDetail, true);

CronTrigger cronTrigger = new CronTrigger(name, Scheduler.DEFAULT_GROUP, jobDet ail.getName(),

Scheduler.DEFAULT_GROUP);

cronTrigger.setCronexpression_r(cronExpression);

scheduler.scheduleJob(cronTrigger);

scheduler.rescheduleJob(name, Scheduler.DEFAULT_GROUP, cronTrigger);

} catch (SchedulerException e) {

throw new RuntimeException(e);

}

}

@Override

public void schedule(Date startTime) {

schedule(startTime, null);

}

@Override

public void schedule(String name, Date startTime) {

schedule(name, startTime, null);

}

@Override

public void schedule(Date startTime, Date endTime) {

schedule(startTime, endTime, 0);

}

@Override

public void schedule(String name, Date startTime, Date endTime) {

schedule(name, startTime, endTime, 0);

}

@Override

public void schedule(Date startTime, Date endTime, int repeatCount) {

schedule(null, startTime, endTime, 0);

}

@Override

public void schedule(String name, Date startTime, Date endTime, int repeatCount) {

schedule(name, startTime, endTime, 0, 0L);

}

@Override

public void schedule(Date startTime, Date endTime, int repeatCount, long repeatInterval) {

schedule(null, startTime, endTime, repeatCount, repeatInterval);

}

@Override

public void schedule(String name, Date startTime, Date endTime, int repeatCount, long repeatIn terval) {

if (name == null || name.trim().equals("")) {

name = UUID.randomUUID().toString();

}

try {

scheduler.addJob(jobDetail, true);

SimpleTrigger SimpleTrigger = new SimpleTrigger(name, Scheduler.DEFAULT_GROUP, jobDetail.getName(),

Scheduler.DEFAULT_GROUP, startTime, endTime, repeatCount, repeatInterval);

scheduler.scheduleJob(SimpleTrigger);

scheduler.rescheduleJob(name, Scheduler.DEFAULT_GROUP, SimpleTrigger);

} catch (SchedulerException e) {

throw new RuntimeException(e);

}

}

}

package com.sundoctor.quartz.service; import java.text.ParseException; import java.util.Date; import java.util.UUID; import org.quartz.CronExpression; import org.quartz.CronTrigger; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerException; import

org.quartz.SimpleTrigger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; @Service("schedulerService") public class SchedulerServiceImpl implements SchedulerService { private Scheduler scheduler; private JobDetail jobDetail; @Autowired public void setJobDetail(@Qualifier("jobDetail") JobDetail jobDetail) { this.jobDetail = jobDetail; } @Autowired public void setScheduler(@Qualifier("quartzScheduler") Scheduler scheduler) { this.scheduler = scheduler; } @Override public void schedule(String cronExpression) { schedule(null, cronExpression); } @Override public void schedule(String name, String cronExpression) { try { schedule(name, new Cronexpression_r(cronExpression)); } catch (ParseException e) { throw new RuntimeException(e); } } @Override public void schedule(CronExpression cronExpression) { schedule(null, cronExpression); } @Override public void schedule(String name, CronExpression cronExpression) { if (name == null || name.trim().equals("")) { name = UUID.randomUUID().toString(); } try { scheduler.addJob(jobDetail, true); CronTrigger cronTrigger = new CronTrigger(name, Scheduler.DEFAULT_GROUP, jobDetail.getName(), Scheduler.DEFAULT_GROUP); cronTrigger.setCronexpression_r(cronExpression); scheduler.scheduleJob(cronTrigger); scheduler.rescheduleJob(name, Scheduler.DEFAULT_GROUP, cronTrigger); } catch (SchedulerException e) { throw new RuntimeException(e); } } @Override public void schedule(Date startTime) { schedule(startTime, null); } @Override public void schedule(String name, Date startTime) { schedule(name, startTime, null); } @Override public void schedule(Date startTime, Date endTime) { schedule(startTime, endTime, 0); } @Override public void schedule(String name, Date startTime, Date endTime) { schedule(name, startTime, endTime, 0); } @Override public void schedule(Date startTime, Date endTime, int repeatCount) { schedule(null, startTime, endTime, 0); } @Override public void schedule(String name, Date startTime, Date endTime, int repeatCount) { schedule(name, startTime, endTime, 0, 0L); } @Override public void schedule(Date startTime, Date endTime, int repeatCount, long repeatInterval) { schedule(null, startTime, endTime, repeatCount, repeatInterval); } @Override public void schedule(String name, Date startTime, Date endTime, int repeatCount, long repeatInterval) { if (name == null || name.trim().equals("")) { name = UUID.randomUUID().toString(); } try { scheduler.addJob(jobDetail, true); SimpleTrigger SimpleTrigger = new SimpleTrigger(name, Scheduler.DEFAULT_GROUP, jobDetail.getName(), Scheduler.DEFAULT_GROUP, startTime, endTime, repeatCount, repeatInterval); scheduler.scheduleJob(SimpleTrigger); scheduler.rescheduleJob(name, Scheduler.DEFAULT_GROUP, SimpleTrigger); } catch (SchedulerException e) { throw new RuntimeException(e); } } }

SchedulerService 只有一个多态方法schedule,SchedulerServiceImpl实现SchedulerService接口,注入org.quartz.Schedulert和org.quartz.JobDetail,schedule方法可以动态配置org.quartz.CronExpression或org.quartz.SimpleTrigger调度时间。

五、实现自己的org.quartz.JobDetail

在上一步中SchedulerServiceImpl需要注入org.quartz.JobDetail,在以前的静态配置中

引用

中使用org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean。在这里使用org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean。会报

引用

Caused by: java.io.NotSerializableException: Unable to serialize JobDataMap for insertion into database because the value of property 'methodInvoker' is not serializable: org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean

at org.quartz.impl.jdbcjobstore.StdJDBCDelegate.serializeJobData(StdJDBCDelegate.java:3358) at org.quartz.impl.jdbcjobstore.StdJDBCDelegate.insertJobDetail(StdJDBCDelegate.java:515)

at org.quartz.impl.jdbcjobstore.JobStoreSupport.storeJob(JobStoreSupport.java:1102)

... 11 more

异常,google了一下,没有找到解决方法。所以在这里不能使用org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean。,不能pojo了,需要使用org.springframework.scheduling.quartz.JobDetailBean和org.springframework.scheduling.quartz.QuartzJobBean实现自己的QuartzJobBean,如下:Java代码

package com.sundoctor.example.service;

import org.quartz.JobExecutionContext;

import org.quartz.JobExecutionException;

import org.quartz.Trigger;

import org.springframework.scheduling.quartz.QuartzJobBean;

public class MyQuartzJobBean extends QuartzJobBean {

private SimpleService simpleService;

public void setSimpleService(SimpleService simpleService) {

this.simpleService = simpleService;

}

@Override

protected void executeInternal(JobExecutionContext jobexecutioncontext) throws JobExecution Exception {

Trigger trigger = jobexecutioncontext.getTrigger();

String triggerName = trigger.getName();

simpleService.testMethod(triggerName);

}

}

package com.sundoctor.example.service; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.quartz.Trigger; import org.springframework.scheduling.quartz.QuartzJobBean; public class MyQuartzJobBean extends QuartzJobBean { private SimpleService simpleService; public void setSimpleService(SimpleService simpleService) { this.simpleService = simpleService; } @Override protected void executeInternal(JobExecutionContext jobexecutioncontext) throws JobExecutionException { Trigger trigger = jobexecutioncontext.getTrigger(); String triggerName = trigger.getName(); simpleService.testMethod(triggerName); } }

MyQuartzJobBean继承org.springframework.scheduling.quartz.QuartzJobBean,注入的SimpleService如下:

Java代码

package com.sundoctor.example.service;

import java.io.Serializable;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.stereotype.Service;

@Service("simpleService")

public class SimpleService implements Serializable{

private static final long serialVersionUID = 122323233244334343L;

private static final Logger logger = LoggerFactory.getLogger(SimpleService.class);

public void testMethod(String triggerName){

//这里执行定时调度业务

https://www.360docs.net/doc/9214871218.html,(triggerName);

}

public void testMethod2(){

https://www.360docs.net/doc/9214871218.html,("testMethod2");

}

}

package com.sundoctor.example.service; import java.io.Serializable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; @Service("simpleService") public class SimpleService implements Serializable{ private static final long serialVersionUID = 122323233244334343L; private static final Logger logger =

LoggerFactory.getLogger(SimpleService.class); public void testMethod(String triggerName){ //这里执行定时调度业务https://www.360docs.net/doc/9214871218.html,(triggerName); } public void testMethod2(){ https://www.360docs.net/doc/9214871218.html,("testMethod2"); } }

SimpleService主要执行定时调度业务,在这里我只是简单打印一下log日志。SimpleService 需要实现java.io.Serializable接口,否则会报

引用

Caused by: java.io.InvalidClassException: com.sundoctor.example.service.SimpleService; class invalid for deserialization

at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:587)

at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1583)

at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1496)

at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1732)

... 64 more

异常。

配置applicationContext-quartz.xml文件:

引用

com.sundoctor.example.service.MyQuartzJobBean

quartzScheduler中没有了

引用

...

/property>

配置,通过SchedulerService动态加入CronTrigger或SimpleTrigger。

在红色的

引用

中需要注入调度业务类,否则会报空指指错误。

dataSource:项目中用到的数据源,里面包含了quartz用到的12张数据库表;applicationContextSchedulerContextKey:是org.springframework.scheduling.quartz.SchedulerFactoryBean这个类中把spring上下文以key/value的方式存放在了quartz的上下文中了,可以用applicationContextSchedulerContextKey所定义的key得到对应的spring上下文;configLocation:用于指明quartz的配置文件的位置,如果不用spring配置quartz的话,本身quartz是通过一个配置文件进行配置的,默认名称是quartz.properties,里面配置的参数在quartz的doc文档中都有介绍,可以调整quartz,我在项目中也用这个文件部分的配置了一些属性,代码如下:

引用

org.quartz.scheduler.instanceName = DefaultQuartzScheduler

org.quartz.scheduler.rmi.export = false

org.quartz.scheduler.rmi.proxy = false

org.quartz.scheduler.wrapJobExecutionInUserTransaction = false

org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool

org.quartz.threadPool.threadCount = 10

org.quartz.threadPool.threadPriority = 5

org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true

org.quartz.jobStore.misfireThreshold = 60000

#org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore

org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX

#org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.HSQLDBDelegate org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate

#https://www.360docs.net/doc/9214871218.html,eProperties = true

org.quartz.jobStore.tablePrefix = QRTZ_

org.quartz.jobStore.isClustered = false

org.quartz.jobStore.maxMisfiresToHandleAtATime=1

这里面没有数据源相关的配置部分,采用spring注入datasource的方式已经进行了配置。

六、测试

运行如下测试类

Java代码

package com.sundoctor.example.test;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Date;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.sundoctor.quartz.service.SchedulerService;

public class MainTest {

public static void main(String[] args) {

ApplicationContext springContext = new ClassPathXmlApplicationContext(new String[]{"cl asspath:applicationContext.xml","classpath:applicationContext-quartz.xml"});

SchedulerService schedulerService = (SchedulerService)springContext.getBean("schedulerS

ervice");

//执行业务逻辑...

//设置调度任务

//每10秒中执行调试一次

schedulerService.schedule("0/10 * * ? * * *");

Date startTime = parse("2009-06-01 22:16:00");

Date endTime = parse("2009-06-01 22:20:00");

//2009-06-01 21:50:00开始执行调度

schedulerService.schedule(startTime);

//2009-06-01 21:50:00开始执行调度,2009-06-01 21:55:00结束执行调试

//schedulerService.schedule(startTime,endTime);

//2009-06-01 21:50:00开始执行调度,执行5次结束

//schedulerService.schedule(startTime,null,5);

//2009-06-01 21:50:00开始执行调度,每隔20秒执行一次,执行5次结束

//schedulerService.schedule(startTime,null,5,20);

//等等,查看com.sundoctor.quartz.service.SchedulerService

}

private static Date parse(String dateStr){

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

try {

return format.parse(dateStr);

} catch (ParseException e) {

throw new RuntimeException(e);

}

}

}

package com.sundoctor.example.test; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.sundoctor.quartz.service.SchedulerService; public class MainTest { public static void main(String[] args) { ApplicationContext springContext = new ClassPathXmlApplicationContext(new

String[]{"classpath:applicationContext.xml","classpath:applicationContext-quartz.xml"});

SchedulerService schedulerService = (SchedulerService)springContext.getBean("schedulerService"); //执行业务逻辑... //设置调度任务//每10秒中执行调试一次schedulerService.schedule("0/10 * * ? * * *"); Date startTime = parse("2009-06-01 22:16:00"); Date endTime = parse("2009-06-01 22:20:00"); //2009-06-01 21:50:00开始执行调度schedulerService.schedule(startTime); //2009-06-01 21:50:00开始执行调度,2009-06-01 21:55:00结束执行调试//schedulerService.schedule(startTime,endTime); //2009-06-01 21:50:00开始执行调度,执行5次结束//schedulerService.schedule(startTime,null,5); //2009-06-01 21:50:00开始执行调度,每隔20秒执行一次,执行5次结束//schedulerService.schedule(startTime,null,5,20); //等等,查看com.sundoctor.quartz.service.SchedulerService } private static Date parse(String dateStr){ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { return format.parse(dateStr); } catch (ParseException e) { throw new RuntimeException(e); } } }

输出

引用

[2009-06-02 00:08:50]INFO com.sundoctor.example.service.SimpleService(line:17) -2059c26f-9462-49fe-b4ce-be7e7a29459f

[2009-06-02 00:10:20]INFO com.sundoctor.example.service.SimpleService(line:17) -2059c26f-9462-49fe-b4ce-be7e7a29459f

[2009-06-02 00:10:30]INFO com.sundoctor.example.service.SimpleService(line:17) -2059c26f-9462-49fe-b4ce-be7e7a29459f

[2009-06-02 00:10:40]INFO com.sundoctor.example.service.SimpleService(line:17) -2059c26f-9462-49fe-b4ce-be7e7a29459f

[2009-06-02 00:10:50]INFO com.sundoctor.example.service.SimpleService(line:17) -2059c26f-9462-49fe-b4ce-be7e7a29459f

[2009-06-02 00:11:00]INFO com.sundoctor.example.service.SimpleService(line:17) -2059c26f-9462-49fe-b4ce-be7e7a29459f

[2009-06-02 00:11:10]INFO com.sundoctor.example.service.SimpleService(line:17) -2059c26f-9462-49fe-b4ce-be7e7a29459f

这样只是简单的将quartz trigger名称打印出来。

quartz定时任务时间设置

quartz定时任务时间设置 这些星号由左到右按顺序代表:* * * * * * * 格式:[秒] [分] [小时] [日] [月] [周] [年] 序号说明 是否必填允许填写的值允许的通配符 1 秒是0-59 , - * / 2 分是0-59 , - * / 3 小时是0-23 , - * / 4 日是1-31 , - * ? / L W 5 月是1-12 or JAN-DEC , - * / 6 周是1- 7 or SUN-SAT , - * ? / L # 7 年否empty 或1970-2099 , - * / 通配符说明: * 表示所有值. 例如:在分的字段上设置"*",表示每一分钟都会触发。 ? 表示不指定值。使用的场景为不需要关心当前设置这个字段的值。例如:要在每月的10号触发一个操作,但不关心是周几,所以需要周位置的那个字段设置为"?" 具体设置为0 0 0 10 * ? - 表示区间。例如在小时上设置"10-12",表示10,11,12点都会触发。 , 表示指定多个值,例如在周字段上设置"MON,WED,FRI" 表示周一,周三和周五触发 / 用于递增触发。如在秒上面设置"5/15" 表示从5秒开始,每增15秒触发(5,20,35,50)。在月字段上设置'1/3'所示每月1号开始,每隔三天触发一次。 L 表示最后的意思。在日字段设置上,表示当月的最后一天(依据当前月份,如果是二月还会依据是否是润年[leap]), 在周字段上表示星期六,相当于"7"或"SAT"。如果在"L"前加上数字,则表示该数据的最后一个。例如在周字段上设置"6L"这样的格式,则表示“本月最后一个星期五" W 表示离指定日期的最近那个工作日(周一至周五). 例如在日字段上设置"15W",表示离每月15号最近的那个工作日触发。如果15号正好是周六,则找最近的周五(14号)触发, 如果15号是周未,则找最近的下周一(16号)触发.如果15号正好在工作日(周一至周五),则就在该天触发。如果指定格式为"1W",它则表示每月1号往后最近的工作日触发。如果1号正是周六,则将在3号下周一触发。(注,"W"前只能设置具体的数字,不允许区间"-"). 小提示 'L'和'W'可以一组合使用。如果在日字段上设置"LW",则表示在本月的最后一个工作日触发(一般指发工资) # 序号(表示每月的第几个周几),例如在周字段上设置"6#3"表示在每月的第三个周六.注意如果指定"#5",正好第五周没有周六,则不会触发该配置(用在母亲节和父亲节再合适不过了) 小提示 周字段的设置,若使用英文字母是不区分大小写的MON 与mon相同. 常用示例: 0 0 12 * * ? 每天12点触发 0 15 10 ? * * 每天10点15分触发 0 15 10 * * ? 每天10点15分触发 0 15 10 * * ? * 每天10点15分触发 0 15 10 * * ? 2005 2005年每天10点15分触发 0 * 14 * * ? 每天下午的2点到2点59分每分触发

特种设备使用安全管理制度

特种设备使用安全管理制度 为保障本企业特种设备在生产经营活动中的安全生产,根据《特种设备安全监察条例》等相关法律法规的规定,结合本企业实际,特制订本制度。 本企业安全部门负责协同各部门,统一管理全企业的特种设备安全工作。 一、关于安全生产责任的规定 (一)概述 1、企业主要负责人是安全生产工作第一责任人,对本企业安全生产全面负责。 2、企业分管负责人是安全生产工作的直接责任人。 3、特种设备安全管理机构及其管理人员对特种设备使用安全管理负直接责任。 4、特种设备安全技术档案管理部门及其管理人员对特种设备安全技术档案和特种设备有关记录负责。 5、特种设备作业人员对特种设备的操作、运行安全负责。 6、岗位培训教育部门对本企业特种设备管理、使用人员的安全培训、教育工作负责。 (二)企业主要负责人职责(总经理) 1、遵守并督促检查企业各部门遵守特种设备法律、法规、标准和规定以及上级关于职业安全健康指示的执行情况及员工安全学习培训工作。 2、组织建立、健全本企业安全生产责任制。 3、组织制定本企业安全生产规章制度和操作堆积。 4、保证一定的安全生产资金投入。 5、组织制定并实施本企业安全生产事故应急预案。组织事故应急预案的演练。 6、及时、如实报告本企业安全生产事故。 7、督促检查企业各部门对特种设备管理人员、操作人员进行安全技术培训,提高安全生产意识和安全操作技能。 8、组织特种设备安全检查,督促有关部门实施事故隐患的整改。

9、组织特种设备安全会议,提出特种设备安全管理的各项要求。 10参加特种设备事故的应急救援,按“四不放过”原则配合做好事故调查处理工作。(三)企业分管负责人职责(副总经理) 1、负责实施企业主要负责人授权的安全生产工作。分管特种设备使用安全管理工作。 2、严格执行国家有关特种设备安全的法律、法规、标准和规定。 3、建立安全生产责任制,并督促层层落实安全生产责任制和安全生产有关制度。 4、督促、检查本企业的安全生产工作,组织员工安全教育与考核。 5、组织制定职业安全健康规章制度、安全操作规程和事故应急救援预案。 6、及时处理事故并如实向有关部门报告。 (四)特种设备安全管理机构职责(工程部或其它部门) 1、负责监督和协调企业特种设备的管理工作。 2、负责组织贯彻国家有关特种设备的法律法规工作。 3、负责监督特种设备安全管理制度和操作规程的落实。 4、负责组织办理特种设备使用登记等有关手续及定期检验工作。 5、负责监督检查特种设备日常维护保养、定期自行检查执行情况。 6、负责组织特种设备作业人员进行安全培训教育。 7、负责组织事故应急预案的演练。 8、负责特种设备档案资料的整理归档工作。 9、配合特种设备事故的调查。 (五)特种设备安全管理人员职责(工程部或其它部门经理) 1、制定和监督实施特种设备安全管理规章制度。 2、检查特种设备的日常运行、维修和安全附件校验等情况。 3、组织特种设备安全检查,督促有关部门实施事故隐患的整改。 4、编制特种设备的年度定期检验计划,并负责组织实施。

Quartz时间规则表达式

Quartz表达式 “*”字符代表所有可能的值 因此,“*”在子表达式(月)里表示每个月的含义,“*”在子表达式(天(星期))表示星期的每一天 “/”字符用来指定数值的增量 例如:在子表达式(分钟)里的“0/15”表示从第0分钟开始,每15分钟 在子表达式(分钟)里的“3/20”表示从第3分钟开始,每20分钟(它和“3,23,43”)的含义一样“?”字符仅被用于天(月)和天(星期)两个子表达式,表示不指定值 当2个子表达式其中之一被指定了值以后,为了避免冲突,需要将另一个子表达式的值设为“?” “L”字符仅被用于天(月)和天(星期)两个子表达式,它是单词“last”的缩写但是它在两个子表达式里的含义是不同的。 在天(月)子表达式中,“L”表示一个月的最后一天 在天(星期)自表达式中,“L”表示一个星期的最后一天,也就是SAT 如果在“L”前有具体的内容,它就具有其他的含义了 例如:“6L”表示这个月的倒数第6天,“FRIL”表示这个月的最一个星期五 注意:在使用“L”参数时,不要指定列表或范围,因为这会导致问题 字段允许值允许的特殊字符 秒 0-59 , - * / 分 0-59 , - * / 小时 0-23 , - * / 日期 1-31 , - * ? / L W C 月份 1-12 或者 JAN-DEC , - * / 星期 1-7 或者 SUN-SAT , - * ? / L C #

年(可选)留空, 1970-2099 , - * / 表达式意义 "0 0 12 * * ?" 每天中午12点触发 "0 15 10 ? * *" 每天上午10:15触发 "0 15 10 * * ?" 每天上午10:15触发 "0 15 10 * * ? *" 每天上午10:15触发 "0 15 10 * * ? 2005" 2005年的每天上午10:15触发 "0 * 14 * * ?" 在每天下午2点到下午2:59期间的每1分钟触发 "0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发 "0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发 "0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发 "0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44触发 "0 15 10 ? * MON-FRI" 周一至周五的上午10:15触发 "0 15 10 15 * ?" 每月15日上午10:15触发 "0 15 10 L * ?" 每月最后一日的上午10:15触发 "0 15 10 ? * 6L" 每月的最后一个星期五上午10:15触发 "0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一个星期五上午10:15触发 "0 15 10 ? * 6#3" 每月的第三个星期五上午10:15触发 ================================================================ =============== 秒(0~59) 分钟(0~59) 小时(0~23) 天(月)(0~31,但是你需要考虑你月的天数)

对的时间 做对的事

对的时间做对的事 大脑有自己的变化节律,顺应而为,会让你富有能量。按照大脑的“工作习惯”,可将一天活动时间分为7个黄金时段。那么,在对的时间,做对的事,将效率翻倍,效果显著。 上午7点至9点:说爱时段 上世纪80年代,美国专家发现,后叶催产素能让身体产生“爱”的感觉,因此有人称其为“爱情激素”。后来,英国研究发现,男性在清晨时后叶催产素水平较高,随后在一天内递减。因此,刚睡醒时是最适合说爱的时间。 推荐活动:告诉另一半你爱她(他);给家人一个拥抱;给远方的亲友打个电话。 上午9点至11点半:创造性工作时段 大部分学生和成人在上午大脑反应速度较快(老年人大脑灵敏度会有所下降)。对学生来说,这是学习的黄金时间;对上班族来说,这个时间建议做些需要分析、集中注意力或创造性的工作。休息一晚后,人们通常会有比较好的精神状态,有助于提高工作积极性和效率。 推荐活动:做策划,做设计,思考难题。 上午11点半至下午1点半:午睡时段

午饭后放下工作,睡个午觉。首先,饭后大量血液会流向肠胃帮助消化,头脑因此变得昏沉;其次,经过一上午工作,耗费了太多精力,大脑容易感觉疲劳。即便此时工作,也会思维迟钝,不如干脆让大脑休息一下。 推荐活动:半小时左右的午休,最多不超过一小时。 下午1点半至2点半:简单工作时段 从生理角度来说,人在休息时,副交感神经起主要作用,它能使心跳减慢、血管舒张、血压降低,让机体处于平静状态。人在清醒后,交感神经开始起主要作用,心跳加快,血管收缩,血压升高,身体准备进入活动状态。由副交感神经转为交感神经兴奋的过程通常需要一段时间,所以很多人在刚睡醒后不会立刻清醒,必须缓一下才能进入工作状态。神经调节的时长每个人情况不同,一般来说,年纪越大时间越长。建议在这个时间段做些简单、不费脑、不需过多思考的工作。 推荐活动:阅读报纸或杂志,整理简单资料等机械性工作。如条件允许,也可散散步,能帮你更快清醒。 下午2点半至6点:沟通时段 此时人体从“昏沉期”解脱出来,思维又开始活跃,因此可把一天中较重要的工作放在这时候做。另外,研究发现,睡过午觉、充分休息后,人的性格会变得相对随和,善于沟通,所以可做些沟通工作。

特种设备安全使用管理制度

精品word文档可以编辑(本页是封面) 【最新资料Word版可自由编辑!!】 编号:SF/CX-03-38 版本:A

特种设备安全使用 管理制度 编制: 审核: 批准: 2010— 05 - 20 发布2010 —06 —10实施 目录 总贝y .......................................................... 特种设备安全生产责任制 (5) 特种设备安全管理人员岗位职责 (8) 特种设备开工告知申报办理制度 (11) 特种设备监督检验申报办理制度 (12) 特种设备使用登记申报办理制度 (13)

特种设备定期检验申报办理制度 (14) 特种设备作业人员考核申报办理制度 (15) 特种设备安全检查检验配合制度 (16) 特种设备安全责任书制度 (17) 特种设备安全管理会议制度 (18) 特种设备安全教育制度 (19) 特种设备安全作业制度 (20) 特种设备检验合格挂牌明示制度 (21) 特种设备维护保养制度 (22) 特种设备重点监控工作制度 (23) 特种设备档案资料管理制度 (24) 特种设备人员证件使用管理制度 (25) 特种设备事故隐患自查制度 (26) 特种设备事故上报制度 (27) 特种设备事故应急救援制度 (28) 特种设备事故调查制度 (29)

总则 1 目的 为保证本单位正常经营工作顺利进行,落实安全生产的主体责任,的安加强对特种设备

全管理,确保设备安全运行,为本单位的发展提供合法、安全、可靠、经济、有效的 硬件设施设备保障,使设备安全管理工作步入系统化、规范化、制度化、科学化的轨道,依据《特种设备安全监察条例》(以下简称《条例》)等法规、规范的要求,结合本单位实际,特制定本制度2 适用范围本规定明确了宁夏瑞科化工特种设备汇编的编制、修订及更新的具体要求。 本规定适用于宁夏瑞科化工范围内特种设备安全管理工作。 3 安全生产管理规定汇编的制订 3.1 宁夏瑞科化工安环部组织有关部门制订厂级的安全生产规定,并送达相关部门进 行会签,征求修改意见。 3.2 宁夏瑞科化工安环部根据会签提出的修改意见,对初稿进行修改,形成审批稿。 3.3 审批稿经总经理审核,组织相关安全管理人员进行评审,评审后由总经理审批, 发布实施。 4 特种设备安全生产管理规定汇编的修订 4.1 修订频次:正常情况下,每一年组织修订一次,当出现以下情况,可随时组织修 订: 4.1.3 新装置、新产品投产,现行管理规定不能覆盖其安全管理; 4.1.4 组织机构发生重大变化,需重新分配安全生产职责; 4.1.5 安全管理规定之间的相容性和匹配性; 4.1.6 各级人员素质发生较大变化,规章制度的要求已经充分转变员工的自觉行动; 4.2 修订组织:特种设备安全生产管理规定汇编的修订,本着制订部门组织修订的原则,当制订部门发生职能变化时,由该职能的后续承接部门组织。必要时,需了解该规定的制订原始背景。 5 有效期限及发布日期 5.1 发布日期由最新签批版制度上时间为准。 特种设备安全生产责任制 目的

Spring提供的三种定时任务机制及其比较

Spring提供的三种定时任务机制及其比较 定时任务的需求在众多应用系统中广泛存在,在Spring中,我们可以使用三种不同的定时机制,下面一一描述并加以比较 1. 基于Quartz的定时机制

下面详细解释这个类图中涉及的关键类及其使用场景 1.1. SchedulerFactoryBean 这是Spring中基于Quartz的定时机制入口,只要Spring容器装载了这个类,Quartz定时机制就会启动,并加载定义在这个类中的所有trigger Spring配置范例: [xhtml]view plaincopy 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 1.2. CronTriggerBean 实现了Trigger接口,基于Cron表达式的触发器 这种触发器的好处是表达式与linux下的crontab一致,能够满足非常复杂的定时需求,也容易配置

Spring配置范例: [xhtml]view plaincopy 1. 2. 3. 4. 1.3. SimpleTriggerBean 该类也实现了Trigger接口,基于配置的定时调度 这个触发器的优点在于很容易配置一个简单的定时调度策略 Spring配置范例: [xhtml]view plaincopy 1. 2. 3. 4. 5. 6.3600000 7. 8. 9.86400000 10. 11.

详细讲解Quartz如何从入门到精通

详细讲解Quartz如何从入门到精通(1) Quartz是一个开源的作业调度框架,它完全由Java写成,并设计用于J2SE 和J2EE应用中。它提供了巨大的灵活性而不牺牲简单性。你能够用它来为执行一个作业而创建简单的或复杂的调度。它有很多特征,如:数据库支持,集群,插件,EJB作业预构建,JavaMail及其它,支持cron-like表达式等等。 本文内容 1、Quartz让任务调度简单 2、Quartz的发展史 3、上手Quartz 4、Quartz内部架构 5、作业 6、作业管理和存储 7、有效作业存储 8、作业和触发器 9、调度一个作业 10、用调度器(Scheduler)调用你的作业 11、编程调度同声明性调度 12、有状态和无状态作业 13、Quartz框架的其他特征 14、Quartz下一步计划 15、了解更多Quartz特征 你曾经需要应用执行一个任务吗?这个任务每天或每周星期二晚上11:30,或许仅仅每个月的最后一天执行。一个自动执行而无须干预的任务在执行过程中如果发生一个严重错误,应用能够知到其执行失败并尝试重新执行吗?你和你的团队是用 Java编

程吗?如果这些问题中任何一个你回答是,那么你应该使用Quartz调度器。 旁注:Matrix目前就大量使用到了Quartz。比如,排名统计功能的实现,在Jmatrix 里通过Quartz定义了一个定时调度作业,在每天凌晨一点,作业开始工作,重新统计大家的Karma和排名等。 还有,RSS文件的生成,也是通过Quartz定义作业,每隔半个小时生成一次RSS XML 文件。 所以Quartz使用的地方很多,本文无疑是一篇很好的入门和进阶的文章,在此,感谢David w Johnson的努力! Quartz让作业调度简单 在你的Job接口实现类里面,添加一些逻辑到execute()方法。一旦你配置好Job 实现类并设定好调度时间表,Quartz将密切注意剩余时间。当调度程序确定该是通知你的作业的时候,Quartz框架将调用你Job实现类(作业类)上的 execute()方法并允许做它该做的事情。无需报告任何东西给调度器或调用任何特定的东西。仅仅执行任务和结束任务即可。如果配置你的作业在随后再次被调用,Quartz框架将在恰当的时间再次调用它。 如果你使用了其它流行的开源框架象struts,你会对Quartz的设计和部件感到舒适。虽然两个开源工程是解决完全不同的问题,还是有很多相似的之处,就是开源软件用户每天感觉很舒适。Quartz能用在单机J2SE应用中,作为一个RMI服务器,也可以用在web应用中,甚至也可以用在J2EE应用服务器中。 Quartz的发展史 尽管Quartz今年开始受到人们注意,但还是暂时流行。Quartz由James House 创建并最初于2001年春天被加入sourceforge工程。接下来的几年里,有许多新特征和版本出现,但是直到项目迁移到新的站点并成为 OpenSymphony项目家族的一员,才开始真正启动并受到应有的关注。 James House仍然和几个协助他的业余开发者参与大量开发工作。Quartz开发团队今年能发布几个新版本,包括当前正处在候选发布阶段的1.5版。 上手Quartz Quartz工程驻留在OpenSymphony站点上。在Quartz站点上可以找到许多有用的资源:JavaDocs,包含指南的文档,CVS访问,用户和开发者论坛的连接,当然也有下载。 从下载连接取得Quartz的发布版本,并且解压到到本地目录。这个下载文件包含了一个预先构建好的Quartz二进制文件(quartz.jar),你可以将它放进自己的应

对时间的分析

对时间的分析 【本讲重点】 分析时间的重要性 时间分析方法 【忠告】 我们都有相同的时间,时间稍纵即逝,失去的时间是永远无法追回的。真正的价值在于我们利用它做什幺事。 我们只有176个小时来完成每个月的目标,只有2112个小时来完成每年的目标,只要时间一流逝,我们就一无所获。 让某个人损失了时间就等于是偷了他的金钱,你损失了你的时间就等于是抵押了你的未来。 时间是最有价值的资源,而且是最难以有效利用、最经不起浪费的资源。 分析时间的重要性 数职业经理都很忙,经常加班加点,没有周末,没有休息时间,简直就是“忙多 碌”二字的化身。 由于职业经理的多维角色,他们在工作中表现出来的忙乱与普通员工有很大的差异。 有没有方法提高时间的利用率,有尽可能多的时间去陪陪家人下面就来分析职业经理之所以忙乱的原因。 无计划或计划不周 由于职业经理经常碰到突发情况,所以,很多职业经理觉得计划对于他们没有作用。总认为计划不如变化快,所以干脆不定计划。计划是时间管理的前提,没有计划,也就谈不上有效的时间管理。 工作无主次 工作总有主要与次要的差别,作为职业经理,由于他的很多工作会影响到其它人,因而在工作中,必须分清楚哪些事情是必须做的,哪些事情可以慢一点处理,哪些事情不必亲力亲为。对于必须做的事情,不但要优先处理,还要规定一个时限。不要让不重要的事情影响到整个部门、团队的工作。 有很多人按照先后顺序来安排工作,这种方法的本身就没有主次之分,弊病是在次要工作上浪费很多时间,因为时间是有限的,必然用在重要工作上的时间就要相对减少。这是优秀职业经理要避免的。 不对下属授权 职业经理的主要角色是管理者,管理就要向下属进行有效的授权,通过下属去实现目标。不向下属授权,很多工作都得由自己去完成。总认为这个工作下属做不了,那个工作下属做不了,所有的工作都由自己做,而下属无事可做。这种情况实际上是你在替下属工作,而作为职业经理需要做的很多工作反而没有时间去完成,原因就在于把时间用错了地方,用在根本不需要亲自去做的事情上。自己忙得不可开交,结果不但家人报怨,上司和下属也不觉得你好。上司认为你的工作效率低,员工认为你不认可他的工作能力。总之,不向下授权往往会吃力不讨好。 沟通不善

特种设备安全问题的解决办法(通用版)

( 安全管理 ) 单位:_________________________ 姓名:_________________________ 日期:_________________________ 精品文档 / Word文档 / 文字可改 特种设备安全问题的解决办法 (通用版) Safety management is an important part of production management. Safety and production are in the implementation process

特种设备安全问题的解决办法(通用版) (1)各级政府领导要重视特种设备安全工作,支持新闻媒体对特种设备安全的舆论宣传,加大对《中华人民共和国安全生产法》、《特种设备安全监察条例》法规宣传力度,提高使用单位或个人乃至全社会公民的法律责任意识、质量安全意识、安全发展意识,营造一个依法使用特种设备安全,非法使用特种设备危险的舆论氛围,使设备使用单位负责人、安全管理、作业人员,做到知法、懂法、守法,自觉接受监管,依法安全使用。 (2)监察机构加大监管力度,把好“三关”,即:严把设备准入关、安装质量关、设备使用关。对没达到“三关”要求的设备,不签发验收合格证明,设备禁止使用。从根本上改变非法制造、安装、使用、管理混乱的局面,堵塞一切祸源、不留死角。对造成特种设备安全事故的渎职者、造事者,依法行政、严加惩处,做到”事故原因没查清不放过,事故责任人没处理不放过,职工没受到教育不

放过”,以达到警示教育的目的。 (3)建立监察机关与基层检验机构联网互动的特种设备安全管理动态监管网络,建立和完善特种设备档案及数据库,搞好“三个确认”,即确认特种设备数量和安全状况、确认企业作业人员的数量和持证情况、确认设备使用单位制度建立和实施情况,做到全地区特种设备底数清、情况明、数据新,保证安全,提高工效。充分发挥社会力量,共同监管设备的安全使用,聘请监督管理安全员、信息员、协管员等,协助安全监察和检验机构及时发现、排除违法违规现象及各种事故隐患。 (4)检验机构在强调企业主动报检的同时,按照区域覆盖的原则严把设备制造安装改造维修过程中安全质量关,严把设备投入使用后的安全性能关,为设备安全使用提供科学的技术支撑。做到科学检测、记录真实、数据准确,保证检验报告的科学性、公正性、权威性,杜绝因检验把关不严而导致的责任事故。 (5)加强企业安全管理、作业人员的安全教育和专业知识培训、考核,使其了解特种设备的范围、特性及国家对这类设备使用的规

Spring定时器的使用

定时执行任务,这是项目中常用的东西,今天我们来做一个使用Spring定时器进行任务定制的小例子,仅供学习! 1首先要增加相应的JAR。 因为这是一个小例子,使用的JAR包不是很多,用到了spring.jar, quartz-all-1.6.5.jar,quartz-1.5.2.jar,commons-logging.jar, log4j-1.2.14.jar!不用关心版本,从你下载到的Spring中找即可。 定义web.xml配置文件 要在配置文件中定义Spring和Log4j的使用。具体看工程即可。重点关注的是如果你做例子时使用了web-app_2_5.xsd,那么在部分服务器上是跑不起 来的。 Xml代码 1 1 1 1 1 1index.jsp 1 1

1 1 1contextConfigLocation 1/WEB-INF/spring.xml 1 1 1 1log4jConfigLocation 1/WEB-INF/classes/log4j.properties 1 1 1 1 1 1org.springframework.web.util.Log4jConfigListener 1 1 1 1 1 1org.springframework.web.context.ContextLoaderListener 1

quartz定时格式配置

一个Cron-表达式是一个由六至七个字段组成由空格分隔的字符串,其中6个字段是必须的而一个是可选的,如下: -------------------------------------------------------------------------------- 字段名允许的值允许的特殊字符 -------------------------------------------------------------------------------- 秒0-59 , - * / 分0-59 , - * / 小时0-23 , - * / 日1-31 , - * ? / L W C 月1-12 or JAN-DEC , - * / 周几1-7 or SUN-SAT , - * ? / L C # 年(可选字段) empty, 1970-2099 , - * / -------------------------------------------------------------------------------- 写时从左到右分别表示秒分时日月周年 '*' 字符可以用于所有字段,在“分”字段中设为"*"表示"每一分钟"的含义。 '?' 字符可以用在“日”和“周几”字段. 它用来指定'不明确的值'. 这在你需要指定这两个字段中的某一个值而不是另外一个的时候会被用到。在后面的例子中可以看到其含义。 '-' 字符被用来指定一个值的范围,比如在“小时”字段中设为"10-12"表示"10点到12点". ',' 字符指定数个值。比如在“周几”字段中设为"MON,WED,FRI"表示"the days Monday, Wednesday, and Friday". '/' 字符用来指定一个值的的增加幅度. 比如在“秒”字段中设置为"0/15"表示"第0, 15, 30, 和45秒"。而"5/15"则表示"第5, 20, 35, 和50". 在'/'前加"*"字符相当于指定从0秒开始.每个字段都有一系列可以开始或结束的数值。对于“秒”和“分”字段来说,其数值范围为0到59,对于“小时”字段来说其为0到23, 对于“日”字段来说为0到31, 而对于“月”字段来说为1到12。"/"字段仅仅只是帮助你在允许的数值范围内从开始"第n"的值。因此对于“月”字段来说"7/6"只是表示7月被开启而不是“每六个月”, 请注意其中微妙的差别。 'L'字符可用在“日”和“周几”这两个字段。它是"last"的缩写, 但是在这两个字段中有不同的含义。例如,“日”字段中的"L"表示"一个月中的最后一天" ——对于一月就是31号对于二月来说就是28号(非闰年)。而在“周几”字段中, 它简单的表示"7" or "SAT",但是如果在“周几”字段中使用时跟在某个数字之后, 它表示"该月最后一个星期×" ——比如"6L"表示"该月最后一个周五"。当使用'L'选项时,指定确定的列表或者范围非常重要,否则你会被结果搞糊涂的。 'W'字符可用于“日”字段。用来指定离给定日期最近的工作日(周一到周五)。比如你将“日”字段设为"15W",意为: "离该月15号最近的工作日"。因此如果15号为周六,触发器会在14号即周五调用。如果15号为周日, 触发器会在16号也就是周一触发。如果15号为周二,那么当天就会触发。然而如果你将“日”字段设为"1W", 而一号又是周六, 触发器会于下周一也就是当月的3号触发,因为它不会越过当月的值的范围边界。'W'字符只能用于“日”字段的值为单独的一天而不是一系列值的时候。 'L'和'W'可以组合用于“日”字段表示为'LW',意为"该月最后一个工作日"。 '#' 字符可用于“周几”字段。该字符表示“该月第几个周×”,比如"6#3"表示该月第三个周五( 6表示周五而"#3"该月第三个)。再比如: "2#1" = 表示该月第一个周一而"4#5" = 该月第五个周三。注意如果你指定"#5"该月没有第五个“周×”,该月是不会触发的。 'C' 字符可用于“日”和“周几”字段,它是"calendar"的缩写。它表示为基于相关的日历所计算出的值(如果有的话)。如果没有关联的日历, 那它等同于包含全部日历。“日”字段值为"5C"表示"日历中的第一天或者5号以后",“周几”字段值为"1C"则表示"日历中的第一天或者周日以后"。 对于“月份”字段和“周几”字段来说合法的字符都不是大小写敏感的。

特种设备安全操作规程

特种设备操作规程 一、压力容器安全操作规程 1.凡操作容器的人员必须熟知所操作容器的性能和有关安全知识,持证上岗。非本岗人员严禁操作。值班人员应严格按照规定认真做好运行记录和交接班记录,交接班应将设备及运行的安全情况进行交底。交接班时要检查容器是否完好。 2.压力容器及安全附件应检验合格,并在有效期内。 3.压力容器本体上的安全附件应齐全,并且是灵敏可靠,计量,仪表应经质监部门进行检验合格在有效期内。 4.需要抽真空的设备应按工作程序进行操作,当抽真空工作完成后,再进行下一步的工作。 5.压力容器在运行过程中,要时刻观察运行状态,随时做好运行记录。注意液位、压力、温度是否在允许范围内,是否存在介质泄漏现象,设备的本体是否有肉眼可见的变形等,发现异常情况立即采取措施并报告。 6.对盛装易燃易爆有毒有害介质的压力容器更要注意防火、防毒,不得靠近火源。操作人员要穿戴好工作服,防护镜及防腐胶鞋和防护手套。 7.有下列情况之一时,要进行水压试验。水压测试为设计压力的1.5倍: (1)新装容器在投入运行前。 (2)大修后重新投入使用前。 (3)更换人孔,手孔,安全阀门及第一道阀门。

(4)未到期检修而提前停止运行检修的。 (5)其他可疑处必须做强度试验的。 8.水压试验前的准备工作: (1)压力容器与其他运行的工艺管线断开加装盲板。 (2)准备好试压泵检查试压泵是否处在良好的工作状态。 (3)在压力容器上安装好经检验合格并在有效期内的压力表,表的读数为水压试验压力的1.5倍—2倍。 (4)泵的试压泵出口应有止回阀,泄水阀及压力表。 (5)试压时不得使用低压胶管,可采用高压胶管,或钢管。 步骤: (1)将压力容器内水注满。 (2)上紧螺栓,关严阀门连接试压管检查与水泵相连并详细检查无泄漏。 (3)应有专人观察压力并检查有无泄漏在管口前,不要停留以免物体击伤人。 (4)在试压过程中发现有泄漏现象时,不要紧固,应在泄掉压力容器内压力后,方可紧固,重新试压。严禁带压紧固。 (5)达到试验压力时立即停泵,关闭试压阀门作好记录,记下停泵时间,压力容器压力观测人员签字存档。 (6)保持试验压力30分钟,如无降压,应缓慢降压至规定试验压力的80%,保持足够时间进行检查。 (7)水压试验后,不得打开人孔为气压试验做准备。 9.压力容器气密性试验: 压力容器在下列情况下进行气密性试验。试验压力等同设计压

SpringBoot实现定时任务

SpringBoot 定时任务@Scheduled实现定时任务 在启动项中加入@EnableScheduling 在定时任务中加入@Component交于Spring管理 使用@Scheduled(fixedDelay = 5000) 5秒跑一次任务 支持支持cron表达式

按顺序依次为 秒(0~59) 分钟(0~59) 小时(0~23) 天(月)(0~31,但是你需要考虑你月的天数) 月(0~11) 天(星期)(1~7 1=SUN 或 SUN,MON,TUE,WED,THU,FRI,SAT) 7.年份(1970-2099) 其中每个元素可以是一个值(如6),一个连续区间(9-12),一个间隔时间(8-18/4)(/表示每隔4小时),一个列表(1,3,5),通配符。由于"月份中的日期"和"星期中的日期"这两个元素互斥的,必须要对其中一个设置?. 0 0 10,14,16 * * ? 每天上午10点,下午2点,4点 0 0/30 9-17 * * ? 朝九晚五工作时间内每半小时 0 0 12 ? * WED 表示每个星期三中午12点 "0 0 12 * * ?" 每天中午12点触发 "0 15 10 ? * *" 每天上午10:15触发 "0 15 10 * * ?" 每天上午10:15触发 "0 15 10 * * ? *" 每天上午10:15触发 "0 15 10 * * ? 2005" 2005年的每天上午10:15触发 "0 * 14 * * ?" 在每天下午2点到下午2:59期间的每1分钟触发

"0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发 "0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发 "0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发 "0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44触发 "0 15 10 ? * MON-FRI" 周一至周五的上午10:15触发 "0 15 10 15 * ?" 每月15日上午10:15触发 "0 15 10 L * ?" 每月最后一日的上午10:15触发 "0 15 10 ? * 6L" 每月的最后一个星期五上午10:15触发 "0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一个星期五上午10:15触发 "0 15 10 ? * 6#3" 每月的第三个星期五上午10:15触发 有些子表达式能包含一些范围或列表 例如:子表达式(天(星期))可以为“MON-FRI”,“MON,WED,FRI”,“MON-WED,SAT” “*”字符代表所有可能的值 因此,“*”在子表达式(月)里表示每个月的含义,“*”在子表达式(天(星期))表示星期的每一天 “/”字符用来指定数值的增量 例如:在子表达式(分钟)里的“0/15”表示从第0分钟开始,每15分钟在子表达式(分钟)里的“3/20”表示从第3分钟开始,每20分钟(它和“3,23,43”)的含义一样

Quartz+spring定时器实例用

Spring+Quartz定时器例子如下: 1. javabean类 在Test.QuartzJob中 1.package Test; 2. 3.public class QuartzJob { 4.public void work() 5. { 6. System.out.println("Quartz的任务调度!!!"); 7. } 8. } 1. 2. 7. 8. 9. 10. 11. 13. 14. 15. 16. 17. 18. 19.work 20. 21. 22. 23. 25. 26.

读《用好时间做对事》后感

读《用好时间做对事》后感管理自己的时间,也就是运用自己时间的过程。如何管理自己的时间,我想这是让我们每个人都困惑的问题。生活中的我们,往往很少有自己做事情的时间计划,每天都是模模糊糊地度日,甚至只是消遣性地打发自己的时间,于是,日子就这样如流水般过去了。等到年老时,回忆往事,留下的只是满腔的后悔和遗憾!所以,如何合理安排和运用自己的时间,把时间都用在做对的事情上,这对每一个人都很重要。 1、明确价值观。其实我们不是在管理时间,而是在管理生命,管理价值观。因为价值观是决定我们如何做出选择和行动的关键因素,所以如果你不知道自己的价值观,就会像无头苍蝇一样乱冲乱撞,这是对时间的最大浪费。我们熟知的时间的三大“杀手”——拖延、犹豫不决、目标不明确,归根结底就是因为不知道自己的价值观是什么或者价值观冲突所致。所有能够成功把握自己时间的人都始于明确自己的价值观。如果你不清楚自己的价值观是什么,那么其他所有的时间管理技巧都属多余。因为,如果你走错了路,就算拼命跑又有什么用? 2、目标设定。没有清晰的目标,任何时间管理都只是在浪费时间。成功的关键在于有目标,其他一切都是次要的。目标最基本的意义是为你指明生活所要遵循的方向,并保证你不会偏离该方向。这就是目标的主要力量所在——极大地平衡你的时间。几乎每个人都清楚地知道制定目标的重要性,但很少有人认真考虑并制定自己的目标。为什么呢,其中最常见的原因是——惰性。我们已经习惯于做一些紧急但并不重要的事,习惯于做一些不紧急也不重要的事,却很少花时间在诸如制定目标这样的一些重要但并不紧急的事情上。毕竟思考是最艰难的工作,所以只有很少人愿意为这个人生中最重要的事情花些时间。 3、心理状态的管理。对状态的管理在时间管理的成功上是一种非常强大的力量,是时间管理最好的工具之一。如果没有良好的状态,知道做什么、用什么方式去做都会变得毫无意义。书中介绍了一种能够帮助我们快速有效改变状态的方法——假装法。当你觉得筋疲力尽时,你的思绪就跟着停滞;当你觉得活跃有劲时,你的思绪就开始飞扬。生理状态是心理状态改变的杠杆。每一种生理状态都有一个对应的心理状态。例如,对于沮丧这种心理状态,我们完全可以从生理状态上看出来。沮丧的人一般是肩膀下垂,呼吸微弱,目光无神呆滞。假期设你现在做出这个样子,看看自己是否觉得有些沮丧呢?沮丧只不过是个结果,那需要身体做出相应的样子才会如此。如果你挺直腰,挺胸抬头,昂首阔步,面带微笑,你就是想沮丧都很难,因为你把自己的生理状态调整成生龙活虎的状态。这种方法就叫“假装”,当你在生理状态上假装拥有某种心理状态,你就能得到那种状态。 4、持续改善。大家都明白一个道理,那就是哪怕再微小的进步,只要坚持下去长久累积就必然会带来水滴石穿般的成就。可遗憾的是,我们中的很多人并没有坚定不移地去做。许多人常常为很多事担忧,担心工作没了,担心万一没钱怎么办,担心目标达不到,几乎没有不担心的事,其实,有无数的例子可以证明,人生真正的保障在于每天在各方面都要有改进。有人计算过,如果每天用5分钟,每天进步0.5%,每周5天,只需一年,与一开始相比,你就会取得300%的进步。

相关文档
最新文档