一、简介
quartz:http://www.quartz-scheduler.org/
是一个定时任务调度框架。
Quartz是要做定时任务的调度,设置好触发时间规则,以及相应的任务(Job)即可。
二、使用
Scheduler:调度器。所有的调度都是由它控制,是Quartz的大脑,所有任务都是由它来管理
Job:任务,想定时执行的事情(定义业务逻辑)
JobDetail:基于Job,进一步包装。其中关联一个Job,并为Job指定更详细的属性,比如标识等
Trigger:触发器。可以指定给某个任务,指定任务的触发机制。
1. Cron表达式组成
year:从1900年开始 month:从0开始 星期:从周天开始
2. Cron表达式符号
3. Cron表达式示例
//秒 分 时 日 月 星期 年
三、配置式
<bean id="jobDetail" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<property name="jobClass" value="com.qianfeng.quartz.MyJob"/>
</bean>
配置调度规则
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="cronExpression" value="* * * * * ?"></property>
<property name="jobDetail" ref="jobDetail"/>
</bean>
配置调度器
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cronTrigger"></ref>
</list>
</property>
</bean>
四、注解式
xmlns:task="http://www.springframework.org/schema/task"
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task.xsd
<!--spring扫描类-->
<context:component-scan base-package="com.qianfeng.quartz"/>
<!--开启注解式定时任务-->
<task:annotation-driven/>
在方法上加上注解
@Component
public class MyJob3 {
@Scheduled(cron = "* * * ? * *")
public void job() {
System.out.println("注解式任务启动了");
}
}
五、发邮件
导包: activation.jar mail.jar
public static void sendMail(String from,String to,String subject,String content) throws MessagingException {
//1. 邮件服务器
//2. 注册账号
//3. 发到哪里 标题 内容
String host = "smtp.sina.com";
String auth = "5266709b295d8dfc";
//获取系统本地参数
Properties properties = System.getProperties();
//设置邮件服务器地址
properties.setProperty("mail.smtp.host", host);
//告诉有家客户端, 本次请求是需要认证授权的
properties.put("mail.smtp.auth", "true");
//获取连接
Session session = Session.getDefaultInstance(properties, new Authenticator() {
@Override
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("spring_47@sina.com",auth);
}
});
//组装发送的内容
MimeMessage message = new MimeMessage(session);
//设置发送人
message.setFrom(new InternetAddress("spring_47@sina.com"));
//设置收件人
message.addRecipient(MimeMessage.RecipientType.TO,new InternetAddress(to));
//设置主题
message.setSubject(subject);
//设置内容
message.setText(content);
Transport.send(message);
System.out.println("发送成功..........");
}
1.日期映射
mybatis 3.5.x 以上不支持 java8的日期类
mybatis 3.5.x 以上支持java8的日志类和数据的日期类型映射, 但是, druid的包必须要在1.1.2x以上
六、任务的暂停和启动
注解式太过于麻烦, 暂时先不用
配置式 , 要求job和trigger要有 任务名称和组名
在controller接收客户单的请求, 根据请求内容暂停和启动任务
@Controller
public class QuartzController {
@Autowired
private Scheduler scheduler;
@RequestMapping("/quartz/stop")
public void shopQ(String jobName,String groupName) throws SchedulerException {
//暂停
scheduler.pauseJob(JobKey.jobKey(jobName, groupName));
}
@RequestMapping("/quartz/start")
public void startQ(String jobName,String groupName) throws SchedulerException {
//重新启动
scheduler.resumeJob(JobKey.jobKey(jobName, groupName));
}
}