spring中的定时任务调度用例
在application-quartz.xml配置文件中添加如下配置信息:
<!-- Quartz -->
<bean id="getSendEmailObject" class="com.luguang.baseinfo.util.SendEmailJob">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<bean id="getSendEmailtask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!-- 调用的类 -->
<property name="targetObject">
<ref bean="getSendEmailObject"/>
</property>
<!-- 调用类中的方法 -->
<property name="targetMethod">
<value>taskjob</value>
</property>
</bean>
<!-- 定义触发时间 -->
<bean id="getSendEmailTime" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="getSendEmailtask"/>
</property>
<!-- cron表达式 -->
<property name="cronExpression">
<value>0 0 9 * * ?</value>
<!-- <value>0 19 45 ? * * </value>-->
</property>
</bean>
对应的调用类如下:
package com.luguang.baseinfo.util;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import javax.persistence.Transient;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.SimpleEmail;
import org.hibernate.SessionFactory;
import org.hibernate.classic.Session;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import com.luguang.model.LgmUser;
import com.luguang.product.service.LgpProductLicenseService;
import com.luguang.project.service.LgpLicenseService;
public class SendEmailJob {
private SessionFactory sessionFactory;
private LgpLicenseService lgpLicenseService;
private LgpProductLicenseService lgpProductLicenseService;
public LgpProductLicenseService getLgpProductLicenseService() {
return lgpProductLicenseService;
}
@Autowired
public void setLgpProductLicenseService(
LgpProductLicenseService lgpProductLicenseService) {
this.lgpProductLicenseService = lgpProductLicenseService;
}
public LgpLicenseService getLgpLicenseService() {
return lgpLicenseService;
}
@Autowired
public void setLgpLicenseService(LgpLicenseService lgpLicenseService) {
this.lgpLicenseService = lgpLicenseService;
}
public SessionFactory getSessionFactory() {
return sessionFactory;
}
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
public SendEmailJob() {
}
@Transient
public void taskjob() throws JobExecutionException {
lgpLicenseService.sendEmail();
lgpProductLicenseService.sendEmail();
}
// 判断传入对象是否是空字符串
public boolean isNullOrEmptyString(Object o) {
if (o == null) {
return true;
}
if (o instanceof String) {
String str = (String) o;
if (str.length() == 0) {
return true;
}
}
return false;
}
/**判断是否是节假日
* @param checkDay
* @param isWeekend 1是周末 0不是周末
* @return true为是 ,否则为否
*/
public boolean checkDayIsHoliday(Session session,Date checkDay)
{
int isWeekend = 0;
Calendar cal = Calendar.getInstance();
cal.setTime(checkDay);
if (cal.get(Calendar.DAY_OF_WEEK) == 1 || cal.get(Calendar.DAY_OF_WEEK) == 7) {
isWeekend = 1;
}
String hql = "SELECT a FROM LgpHoliday a WHERE to_char(a.startDate,'YYYY-MM-DD') <= '" + new SimpleDateFormat("yyyy-MM-dd").format(checkDay) + "' "
+ " and to_char(a.endDate,'YYYY-MM-DD') >= '" + new SimpleDateFormat("yyyy-MM-dd").format(checkDay) + "' and a.isActive = '0' ";
if (isWeekend == 0) {
hql += " and a.holidayType != '2' ";
}
if (isWeekend == 1) {
hql += " and a.holidayType = '2' ";
}
List list = session.createQuery(hql).list();
if (isWeekend == 1 && list.size() > 0) {
return false;
}
if (isWeekend == 0 && list.size() == 0) {
return false;
}
return true;
}
}
service层代码如下:
public String sendEmail(){
return lgpProductLicenseDao.sendEmail();
}
dao层代码如下:
/*
* 发送电子邮件
*/
public String sendEmail(){
Date now=new Date();
EmailForProduct emailForProduct;
String hql="select new com.lg.product.model.EmailForProduct(a.productName,b.lgpLicenseId,c.userAlias,d.mailAddress,b.endDate,b.remindDays) from LgpProduct as a,LgpLicense as b,LgmUser as c,LgmUserIncrement as d where 1=1"
+" and a.lgpProductId=b.lgpProductId"
+" and a.productLeader=c.userId"
+" and c.userId=d.userId";
List list=this.getHibernateTemplate().find(hql);
if(list!=null&&list.size()>0){
for(int i=0;i<list.size();i++){
emailForProduct=(EmailForProduct)list.get(i);
long interval=(emailForProduct.getEndDate().getTime()-now.getTime())/1000;
if(interval<emailForProduct.getRemindDays().longValue()*24*60*60){
this.sendEmail(emailForProduct.getProductName(), emailForProduct.getEmailAddress());
}
}
}
return null;
}
public void sendEmail(String productName ,String emailAddress){
SimpleEmail email=new SimpleEmail();
email.setHostName("smtp.126.com");
email.setAuthentication("name", "password");
email.setCharset("UTF-8");
try {
email.addTo(emailAddress);
email.setFrom(name@server.com);
email.setSubject("subject");
email.setMsg("msg");
email.send();
} catch (EmailException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
实现邮件的定时发送,通过在程序中判断邮件发送时间来控制邮件发送,避免在配置文件中设定动态的邮件发送时间(配置文件中获得动态参数是非常麻烦的,尽量在程序中实现)。
spring中的定时任务调度用例的更多相关文章
- Spring中实现定时调度
1, 内容简介 所谓的定时调度,是指在无人值守的时候系统可以在某一时刻执行某些特定的功能采用的一种机制,对于传统的开发而言,定时调度的操作分为两种形式: 定时触发:到某一时间点上执行某些处理操作: ...
- 基于Spring Task的定时任务调度器实现
在很多时候,我们会需要执行一些定时任务 ,Spring团队提供了Spring Task模块对定时任务的调度提供了支持,基于注解式的任务使用也非常方便. 只要跟需要定时执行的方法加上类似 @Schedu ...
- spring中如何向一个单例bean中注入非单例bean
看到这个题目相信很多小伙伴都是懵懵的,平时我们的做法大都是下面的操作 @Component public class People{ @Autowired private Man man; } 这里如 ...
- Spring中的单例模式和多例模式的应用
在Spring的配置中,Bean的scope属性中存在两种模式:singleton(单例模式).prototype(多例模式) singleton 单例模式:对象在整个系统中只有一份,所有的请求都用一 ...
- spring中的定时调度实现TimerFactoryBean引起的隐患
手中的一个老项目,其中使用的TimerFactoryBean实现的调度任务.一般都是spring quartz实现,这种的着实少见.正因为少见资料比较少,当初为了确认这个会不会2个调度任务同时并行执行 ...
- Spring中的定时调度(Scheduling)和线程池(Thread Pooling)
使用triggers和SchedulerFactoryBean来包装任务 我们已经创建了job details,jobs.我们同时回顾了允许你调用特定对象上某一个方法的便捷的bean. 当然我们仍需要 ...
- C#/.NET/.NET Core定时任务调度的方法或者组件有哪些--Timer,FluentScheduler,TaskScheduler,Gofer.NET,Coravel,Quartz.NET还是Hangfire?
原文由Rector首发于 码友网 之 <C#/.NET/.NET Core应用程序编程中实现定时任务调度的方法或者组件有哪些,Timer,FluentScheduler,TaskSchedule ...
- C#/.NET/.NET Core定时任务调度的方法或者组件有哪些--Timer,FluentScheduler还是...
原文:C#/.NET/.NET Core定时任务调度的方法或者组件有哪些--Timer,FluentScheduler还是... 原文由Rector首发于 码友网 之 <C#/.NET/.NET ...
- 项目一:第十四天 1.在realm中动态授权 2.Shiro整合ehcache 缓存realm中授权信息 3.动态展示菜单数据 4.Quartz定时任务调度框架—Spring整合javamail发送邮件 5.基于poi实现分区导出
1 Shiro整合ehCache缓存授权信息 当需要进行权限校验时候:四种方式url拦截.注解.页面标签.代码级别,当需要验证权限会调用realm中的授权方法 Shiro框架内部整合好缓存管理器, ...
随机推荐
- study notes: high performance linux server programming
1:linux网络API分为:socker地址API,socker基础API,网络信息API 1,socker地址API:包含IP地址和端口(ip, port).表示TCP通信的一端. 2,socke ...
- 2015.4.16-SQL-内连接与外连接
1.内连接 如图: 关键字 inner join 2.外连接 分为左外连接 和右外连接,即如果是左外连接,即使左面没有值,也会显示为null, 右外连接也如此 关键字 left join ; righ ...
- MYSQL分页存储过程及事务处理--转自peace
MYSQL的分页过程,和事务处理的一个测试过程. /* --名称:MYSQL版查询分页存储过程 by peace 2013-8-14 --输入参数:@fields -- 要查询的字段用逗号隔开 --输 ...
- Struts2 校验
Struts2校验格式: actionName-methodName-invalidation.xml 该配置文件必须和action类在同一个包下. <?xml version="1 ...
- Linux下,命令 wget 的使用
wget是一个从网络上自动下载文件的自由工具.它支持HTTP,HTTPS和FTP协议,可以使用HTTP代理. 所谓的自动下载是指,wget可以在用户退出系统的之后在后台执行.这意味这你可以登录系统, ...
- VS2012常用快捷建(必备)
1. 强迫智能感知:Ctrl+J:2.强迫智能感知显示参数信息:Ctrl-Shift-空格:3.格式化整个块:Ctrl+K+F4. 检查括号匹配(在左右括号间切换): Ctrl +]5. 选中从光标起 ...
- Nginx 配置指令的执行顺序(三)
如前文所述,除非像 ngx_set_misc 模块那样使用特殊技术,其他模块的配置指令即使是在 rewrite 阶段运行,也不能和 ngx_rewrite 模块的指令混合使用.不妨来看几个这样的例子. ...
- SpringMVC之数据绑定(转)
到目前为止,请求已经能交给我们的处理器进行处理了,接下来的事情是要进行收集数据啦,接下来我们看看我们能从请求中收集到哪些数据, 1.@RequestParam绑定单个请求参数值: 2.@PathVar ...
- MFC socket网络通讯核心代码
服务器: AfxSocketInit();//初始化,必须执行这个函数socket才能正常执行 server.Create(10086); server.Listen(10); while(1) { ...
- QT:使用“状态模式”绘制界面
QT与很多GUI库不同(如MFC),它不能随时随地地在界面上画图,只能在界面类的painterEvent中画图,如此一来,想在绘制QT界面时使用状态模式(GOF的23种设计模式之一)就有点困难了,作为 ...