项目代码

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

Quartz 定时邮件发送多个备份文件的更多相关文章

  1. Java系列--第八篇 基于Maven的SSME之定时邮件发送

    关于ssme这个我的小示例项目,想做到麻雀虽小,五脏俱全,看到很多一些web都有定时发送邮件的功能,想我ssme也加入一下这种功能,经查询相关文档,发现spring本身自带了一个调度器quartz,下 ...

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

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

  3. [原创] zabbix学习之旅六:如何解决zabbix server在内网,而邮件发送服务器在外网的问题

    通过前面的文章,你已经可以快速地搭建一个报警系统,并能正常的收到报警邮件了.不过在很多企业级环境下,邮件发送服务器往往放在外网,而zabbix server放置在内网,在这种情况下,zabbix的报警 ...

  4. spring利用javamail,quartz定时发送邮件 <转>

    原文地址:spring利用javamail,quartz定时发送邮件 <转>作者:物是人非 spring提供的定时发送邮件功能,下面是一个简单的例子以供大家参考,首先从spring配置文件 ...

  5. 基于javaMail的邮件发送--excel作为附件

    基于JavaMail的Java邮件发送 Author xiuhong.chen@hand-china.com Desc 简单邮件发送 Date 2017/12/8 项目中需要根据物料资质的状况实时给用 ...

  6. IntelliJ IDEA 2017版 spring-boot 2.0.3 邮件发送搭建,概念梳理 (一)

    邮件发送功能总结        第一部分 背景   一.使用场景 (1)注册验证    注册各大网站,通常需要输入邮件地址,在注册成功后,会发送一封邮箱验证的邮件,点击确认,证明这个邮箱是用户自己的 ...

  7. Spring整合Quartz定时发送邮件

    功能描述:刚开始接触Quartz,试着用Quartz整合spring实现每隔一分钟发送一封邮件连续发送10次 核心jar: 邮件发送:commons-email-1.2.jar mail.jar(必须 ...

  8. 【Linux】结合Python 简易实现监控公司网站,邮件发送异常

    背景 由于一些原因,博主负责测试的网站的服务器切换到了香港,切换后出现了多次访问超时的情况 于是主动请缨写一个自动监测的脚本,本来准备完全使用shell来写,后来发现shell发送邮件只能在测试机之间 ...

  9. Java 基于javaMail的邮件发送(支持附件)

    基于JavaMail的Java邮件发送Author xiuhong.chen@hand-china.com Desc 简单邮件发送 Date 2017/12/8 项目中需要根据物料资质的状况实时给用户 ...

随机推荐

  1. 洛谷 P4375 [USACO18OPEN]Out of Sorts G(树状数组求冒泡排序循环次数加强版)

    传送门:Problem 4375 参考资料: [1]:https://www.cnblogs.com/Miracevin/p/9662350.html [2]:https://blog.csdn.ne ...

  2. poj 3683(2-SAT+SCC)

    传送门:Problem 3683 https://www.cnblogs.com/violet-acmer/p/9769406.html 参考资料: [1]:挑战程序设计竞赛 题意: 有n场婚礼,每场 ...

  3. 使用LTP套件对Linux系统进行压力测试

    使用LTP套件对Linux系统进行压力测试 https://www.ubuntukylin.com/ukylin/forum.php?mod=viewthread&tid=6764 https ...

  4. Hadoop基础-HDFS安全管家之Kerberos实战篇

    Hadoop基础-HDFS安全管家之Kerberos实战篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们都知道hadoop有很多不同的发行版,比如:Apache Hadoop ...

  5. 使用htpasswd实现Nginx验证访问

    Nginx是一个高性能的WEB服务器,越来越多的用户使用,如果您的某个站点不希望对外公开(比如PHPMyAdmin),可以使用htpasswd实现Nginx验证访问. 安装htpasswd htpas ...

  6. SqlServer中的临时表

    一.什么是临时表 临时表属于会话级的,会话结束的时候,临时表被释放,其创建.使用.删除都和普通表一样,临时表空间一般利用虚拟内存,不必进行磁盘I/O,因此效率较高..临时表有两种:普通临时表 (#Tb ...

  7. HDU - 5413 CRB and Roads

    CRB and Roads Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) ...

  8. 六道JavaScript测验题

    1.找出数字数组中最大的元素(使用Match.max函数) var a=[123,23432,345,3,34]; console.log(Math.max.apply(null,a)); 2.转化一 ...

  9. Nginx GZIP 压缩

    [ HTTP 开启gzip ] gzip on; // 开启 nginx在线实时压缩数据流: gzip_min_length 1k; // 允许压缩的页面最小字节 gzip_buffers 32k; ...

  10. 第18月第21日 vue cnpm

    1. 首先我们需要下载npm,因为我已经提前安装了node.js,安装包里面集成了npm,然后我们就可以利用npm命令从获取淘宝镜像的cnpm了. 1.打开命令行窗口,输入 npm install - ...