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

原文地址:https://www.cnblogs.com/ios9/p/7473608.html