在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中的定时任务调度用例的更多相关文章

  1. Spring中实现定时调度

    1,   内容简介 所谓的定时调度,是指在无人值守的时候系统可以在某一时刻执行某些特定的功能采用的一种机制,对于传统的开发而言,定时调度的操作分为两种形式: 定时触发:到某一时间点上执行某些处理操作: ...

  2. 基于Spring Task的定时任务调度器实现

    在很多时候,我们会需要执行一些定时任务 ,Spring团队提供了Spring Task模块对定时任务的调度提供了支持,基于注解式的任务使用也非常方便. 只要跟需要定时执行的方法加上类似 @Schedu ...

  3. spring中如何向一个单例bean中注入非单例bean

    看到这个题目相信很多小伙伴都是懵懵的,平时我们的做法大都是下面的操作 @Component public class People{ @Autowired private Man man; } 这里如 ...

  4. Spring中的单例模式和多例模式的应用

    在Spring的配置中,Bean的scope属性中存在两种模式:singleton(单例模式).prototype(多例模式) singleton 单例模式:对象在整个系统中只有一份,所有的请求都用一 ...

  5. spring中的定时调度实现TimerFactoryBean引起的隐患

    手中的一个老项目,其中使用的TimerFactoryBean实现的调度任务.一般都是spring quartz实现,这种的着实少见.正因为少见资料比较少,当初为了确认这个会不会2个调度任务同时并行执行 ...

  6. Spring中的定时调度(Scheduling)和线程池(Thread Pooling)

    使用triggers和SchedulerFactoryBean来包装任务 我们已经创建了job details,jobs.我们同时回顾了允许你调用特定对象上某一个方法的便捷的bean. 当然我们仍需要 ...

  7. C#/.NET/.NET Core定时任务调度的方法或者组件有哪些--Timer,FluentScheduler,TaskScheduler,Gofer.NET,Coravel,Quartz.NET还是Hangfire?

    原文由Rector首发于 码友网 之 <C#/.NET/.NET Core应用程序编程中实现定时任务调度的方法或者组件有哪些,Timer,FluentScheduler,TaskSchedule ...

  8. C#/.NET/.NET Core定时任务调度的方法或者组件有哪些--Timer,FluentScheduler还是...

    原文:C#/.NET/.NET Core定时任务调度的方法或者组件有哪些--Timer,FluentScheduler还是... 原文由Rector首发于 码友网 之 <C#/.NET/.NET ...

  9. 项目一:第十四天 1.在realm中动态授权 2.Shiro整合ehcache 缓存realm中授权信息 3.动态展示菜单数据 4.Quartz定时任务调度框架—Spring整合javamail发送邮件 5.基于poi实现分区导出

    1 Shiro整合ehCache缓存授权信息 当需要进行权限校验时候:四种方式url拦截.注解.页面标签.代码级别,当需要验证权限会调用realm中的授权方法   Shiro框架内部整合好缓存管理器, ...

随机推荐

  1. OC学习中遇到的问题总结

    1.不要在初始化的时候用self.方法,因为在初始化的时候self.,此时系统还没有alloc开辟空间,这样做违背了系统流程. 2.善于运用宏定义来控制程序中的变量,这样程序可修改性高. 3.obje ...

  2. Win7如何添加局域网内的网络打印机

    win+R或开始找到运行,在运行框中输入打印机所在的局域网内的IP地址. 这时会打开一个界面.如图 右键要选择的打印机.连接.这时会显示正在安装打印机驱动.如图 开始菜单->设备和打印机 找到刚 ...

  3. mysql单表大小的限制

    mysql单表大小的限制一.MySQL数据库的MyISAM存储 引擎单表大小限制已经不是有MySQL数据库本身来决定(限制扩大到64pb),而是由所在主机的OS上面的文件系统来决定了.在mysql5. ...

  4. 一个完整的SSL连接建立过程

    客户端浏览器连接到Web服务器,发出建立安全连接通道的请求. 服务器接受客户端请求,发送服务器证书做为响应. 客户端验证服务器证书的有效性,如果验证通过,则用服务器证书中包含的服务器公钥加密一个会话密 ...

  5. 配置managed server

    managed server往往是部署应用程序的server,所以最好在weblgoic上配置上managed server,不要把应用程序直接部署到admin server上. 一.受管服务器的创建 ...

  6. 日志管理-将Log4net的配置配置到的独立文件中

    转自:http://www.cnblogs.com/zfanlong1314/p/3662679.html使用log4net已经很久了.但从来没有详情了解log4的参数,及具体使用方法.看了周公的博客 ...

  7. maven命令/依赖/聚合

    一,编写pom.xml   首先我们看一下pom.xml   <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns ...

  8. 修改ecshop模板体会

    在上一篇中给大家带来了ecshop的总体的框架.从总体上看ecshop,相信大家的思路应该很清楚.作为一个对开源项目修改者你来说,能对ecshop有个初步的了解就行了,下面我会给大家带来我在修改ecs ...

  9. Nginx 配置指令的执行顺序(十)

    运行在 post-rewrite 阶段之后的是所谓的 preaccess 阶段.该阶段在 access 阶段之前执行,故名preaccess. 标准模块 ngx_limit_req 和 ngx_lim ...

  10. ac命令根据/var/log/wtmp文件登录退出时间计算用户连接时间

    ac命令根据/var/log/wtmp文件登录退出时间计算用户连接时间