zoukankan      html  css  js  c++  java
  • Quartz 定时邮件发送多个备份文件


    项目代码

    pom.xml 文件
    Quartz 的包是整个项目不可缺少的

      1 <properties>
      2         <!-- Spring的版本 -->
      3         <springframework.version>4.0.6.RELEASE</springframework.version>
      4         <!-- Quartz的版本 -->
      5         <quartz.version>2.2.1</quartz.version>
      6     </properties>
      7 
      8     <dependencies>
      9         <dependency>
     10             <groupId>junit</groupId>
     11             <artifactId>junit</artifactId>
     12             <version>3.8.1</version>
     13             <scope>test</scope>
     14         </dependency>
     15 
     16         <dependency>
     17             <groupId>javax.servlet</groupId>
     18             <artifactId>javax.servlet-api</artifactId>
     19             <version>3.0.1</version>
     20         </dependency>
     21 
     22         <!-- https://mvnrepository.com/artifact/javax.mail/mail -->
     23         <dependency>
     24             <groupId>javax.mail</groupId>
     25             <artifactId>mail</artifactId>
     26             <version>1.4</version>
     27         </dependency>
     28 
     29         <dependency>
     30             <groupId>org.quartz-scheduler</groupId>
     31             <artifactId>quartz</artifactId>
     32             <version>${quartz.version}</version>
     33         </dependency>
     34 
     35         <!-- spring -->
     36         <dependency>
     37             <groupId>org.springframework</groupId>
     38             <artifactId>spring-context-support</artifactId>
     39             <version>${springframework.version}</version>
     40         </dependency>
     41 
     42         <dependency>
     43             <groupId>org.springframework</groupId>
     44             <artifactId>spring-tx</artifactId>
     45             <version>${springframework.version}</version>
     46         </dependency>
     47 
     48         <dependency>
     49             <groupId>org.springframework</groupId>
     50             <artifactId>spring-web</artifactId>
     51             <version>${springframework.version}</version>
     52         </dependency>
     53 
     54         <dependency>
     55             <groupId>org.springframework</groupId>
     56             <artifactId>spring-webmvc</artifactId>
     57             <version>${springframework.version}</version>
     58         </dependency>
     59     </dependencies>

    MyJob.java 继承 QuartzJobBean 然后 Override
    有钻研精神的可以一点一点扒代码看 QuartzJobBean 。


      1 import org.quartz.JobExecutionContext;
      2 import org.quartz.JobExecutionException;
      3 import org.slf4j.Logger;
      4 import org.slf4j.LoggerFactory;
      5 import org.springframework.scheduling.quartz.QuartzJobBean;
      6 
      7 import java.util.Date;
      8 
      9 /**
     10  * kzyuan Job 参考
     11  * @description black husk
     12  * @description http://www.bhusk.com
     13  */
     14 public class MyJob extends QuartzJobBean {
     15 
     16     private static Logger logger = LoggerFactory.getLogger(DatabaseBackupJob.class);
     17 
     18     @Override
     19     protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
     20 
     21         System.out.println("执行时间:"+new Date());
     22     }
     23 }



    application.xml 可以理解为 quartz 配置文件 注释很齐全

      1 <?xml version="1.0" encoding="UTF-8"?>
      2 <beans xmlns="http://www.springframework.org/schema/beans"
      3        xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
      4        xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
      5        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      6        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
      7     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
      8     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
      9     http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
     10 
     11     <!-- 定义任务bean -->
     12     <bean name="myJobDetail" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
     13         <!-- 指定具体的job类 -->
     14         <property name="jobClass" value="com.bhusk.quartz.Job.MyJob"/>
     15         <!-- 指定job的名称 -->
     16         <property name="name" value="myJob"/>
     17         <!-- 指定job的分组 -->
     18         <property name="group" value="jobs"/>
     19         <!-- 必须设置为true,如果为false,当没有活动的触发器与之关联时会在调度器中删除该任务  -->
     20         <property name="durability" value="true"/>
     21         <!-- 指定spring容器的key,如果不设定在job中的jobmap中是获取不到spring容器的 -->
     22         <property name="applicationContextJobDataKey" value="applicationContext"/>
     23     </bean>
     24 
     25     <!-- 定义触发器 -->
     26     <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
     27         <property name="jobDetail" ref="myJobDetail"/>
     28         <!--执行时间 -->
     29         <property name="cronExpression" value="0 0 3 * * ?"/>
     30     </bean>
     31 
     32     <!-- 定义触发器 -->
     33      <!--演示:一个job可以有多个trigger; -->
     34     <!--<bean id="cronTrigger2" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">-->
     35     <!--<property name="jobDetail" ref="myJobDetail2" />-->
     36     <!--每一分钟执行一次-->
     37     <!--    <property name="cronExpression" value="0 0 3 * * ?"/> -->
     38      <!--</bean>-->
     39 
     40     <!-- 定义调度器 -->
     41     <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
     42         <property name="triggers">
     43             <list>
     44                 <ref bean="cronTrigger"/>
     45      <!--          <ref bean="cronTrigger2"/> -->
     46             </list>
     47         </property>
     48     </bean>
     49 
     50 </beans>

    JavaMail 发送邮件工具类
    java 实现邮件的发送, 抄送及多附件
    这个工具类来源网络,具体精准位置也不清楚了

      1         // 设置发件人
      2 //          mimeMsg.setFrom(new InternetAddress(from));
      3             mimeMsg.setFrom(new InternetAddress(from, nick));
      4             // 设置收件人
      5             if (to != null && to.length() > 0) {
      6                 mimeMsg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
      7             }
      8             // 设置抄送人
      9             if (cc != null && cc.length() > 0) {
     10                 mimeMsg.setRecipients(Message.RecipientType.CC, InternetAddress.parse(cc));
     11             }
     12             // 设置主题
     13             mimeMsg.setSubject(subject);
     14             // 设置正文
     15             BodyPart bp = new MimeBodyPart();
     16             bp.setContent(content, "text/html;charset=utf-8");
     17             mp.addBodyPart(bp);
     18             // 设置附件
     19             if (fileList != null && fileList.length > 0) {
     20                 for (int i = 0; i < fileList.length; i++) {
     21                     bp = new MimeBodyPart();
     22                     FileDataSource fds = new FileDataSource(fileList[i]);
     23                     bp.setDataHandler(new DataHandler(fds));
     24                     bp.setFileName(MimeUtility.encodeText(fds.getName(), "UTF-8", "B"));
     25                     mp.addBodyPart(bp);
     26                 }
     27             }
     28             mimeMsg.setContent(mp);
     29             mimeMsg.saveChanges();
     30             // 发送邮件
     31             if (props.get("mail.smtp.auth").equals("true")) {
     32                 Transport transport = session.getTransport("smtp");
     33                 transport.connect((String) props.get("mail.smtp.host"), (String) props.get("username"), (String) props.get("password"));
     34                 transport.sendMessage(mimeMsg, mimeMsg.getAllRecipients());
     35                 transport.close();
     36             } else {
     37                 Transport.send(mimeMsg);
     38             }
     39             System.out.println("邮件发送成功");
     40         } catch (MessagingException e) {
     41             e.printStackTrace();
     42             success = false;
     43         } catch (UnsupportedEncodingException e) {
     44             e.printStackTrace();
     45             success = false;
     46         }
     47         return success;
     48     }
     49 
     50     public String getMailList(String[] mailArray) {
     51         StringBuffer toList = new StringBuffer();
     52         int length = mailArray.length;
     53         if (mailArray != null && length < 2) {
     54             toList.append(mailArray[0]);
     55         } else {
     56             for (int i = 0; i < length; i++) {
     57                 toList.append(mailArray[i]);
     58                 if (i != (length - 1)) {
     59                     toList.append(",");
     60                 }
     61 
     62             }
     63         }
     64         return toList.toString();
     65     }
     66 
     67     public static void main(String[] args) {
     68         String from = username;
     69         String[] to = {"keshu@bhusk.com", "1520812121@qq.com"};
     70         String[] copyto = {"lu12121@qq.com"};
     71         String subject = "黑壳网数据库备份";
     72         String content = "没有数据就没有一切,数据库备份就是一种防范灾难于未然的强力手段,没有了数据,应用再花哨也是镜中花水中月。";
     73         String[] fileList = new String[2];
     74         fileList[0] = "~/solo_h2/db.mv.db";
     75         fileList[1] = "~/solo_h2/db.trace.db";
     76 
     77         EmailManager.getInstance().sendMail(from, to, copyto, subject, content, fileList);
     78     }
     79 }


    参考项目 GitHub:https://github.com/ykz200/Quartz_DatabaseBackup




    本文出自于:ykz200

  • 相关阅读:
    Spring依赖注入servlet会话监听器
    Maven常用命令
    页面获取Spring Security登录用户
    spring security:ajax请求的session超时处理
    前端用Request Payload方式请求后台
    记一次网易前端实习面试【转载】
    JavaScript函数内部修改全局变量的问题【一道面试题】
    Js作用域与作用域链详解
    js测试
    JavaScript 中对变量和函数声明的“提前(hoist)”
  • 原文地址:https://www.cnblogs.com/ios9/p/7473608.html
Copyright © 2011-2022 走看看