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
Quartz 定时邮件发送多个备份文件的更多相关文章
- Java系列--第八篇 基于Maven的SSME之定时邮件发送
关于ssme这个我的小示例项目,想做到麻雀虽小,五脏俱全,看到很多一些web都有定时发送邮件的功能,想我ssme也加入一下这种功能,经查询相关文档,发现spring本身自带了一个调度器quartz,下 ...
- 项目一:第十四天 1.在realm中动态授权 2.Shiro整合ehcache 缓存realm中授权信息 3.动态展示菜单数据 4.Quartz定时任务调度框架—Spring整合javamail发送邮件 5.基于poi实现分区导出
1 Shiro整合ehCache缓存授权信息 当需要进行权限校验时候:四种方式url拦截.注解.页面标签.代码级别,当需要验证权限会调用realm中的授权方法 Shiro框架内部整合好缓存管理器, ...
- [原创] zabbix学习之旅六:如何解决zabbix server在内网,而邮件发送服务器在外网的问题
通过前面的文章,你已经可以快速地搭建一个报警系统,并能正常的收到报警邮件了.不过在很多企业级环境下,邮件发送服务器往往放在外网,而zabbix server放置在内网,在这种情况下,zabbix的报警 ...
- spring利用javamail,quartz定时发送邮件 <转>
原文地址:spring利用javamail,quartz定时发送邮件 <转>作者:物是人非 spring提供的定时发送邮件功能,下面是一个简单的例子以供大家参考,首先从spring配置文件 ...
- 基于javaMail的邮件发送--excel作为附件
基于JavaMail的Java邮件发送 Author xiuhong.chen@hand-china.com Desc 简单邮件发送 Date 2017/12/8 项目中需要根据物料资质的状况实时给用 ...
- IntelliJ IDEA 2017版 spring-boot 2.0.3 邮件发送搭建,概念梳理 (一)
邮件发送功能总结 第一部分 背景 一.使用场景 (1)注册验证 注册各大网站,通常需要输入邮件地址,在注册成功后,会发送一封邮箱验证的邮件,点击确认,证明这个邮箱是用户自己的 ...
- Spring整合Quartz定时发送邮件
功能描述:刚开始接触Quartz,试着用Quartz整合spring实现每隔一分钟发送一封邮件连续发送10次 核心jar: 邮件发送:commons-email-1.2.jar mail.jar(必须 ...
- 【Linux】结合Python 简易实现监控公司网站,邮件发送异常
背景 由于一些原因,博主负责测试的网站的服务器切换到了香港,切换后出现了多次访问超时的情况 于是主动请缨写一个自动监测的脚本,本来准备完全使用shell来写,后来发现shell发送邮件只能在测试机之间 ...
- Java 基于javaMail的邮件发送(支持附件)
基于JavaMail的Java邮件发送Author xiuhong.chen@hand-china.com Desc 简单邮件发送 Date 2017/12/8 项目中需要根据物料资质的状况实时给用户 ...
随机推荐
- python中迭代器和生成器的区别
#!/usr/bin/python def power(values): for value in values: print "powing %s" % value yield ...
- 离线方式部署Ambari2.6.0.0
Hadoop生态圈-离线方式部署Ambari2.6.0.0 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我现在所在的公司用的是CDH管理Hadoop集群,前端时间去面试时发现很多 ...
- Hadoop基础-Hdfs各个组件的运行原理介绍
Hadoop基础-Hdfs各个组件的运行原理介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.NameNode工作原理(默认端口号:50070) 1>.什么是NameN ...
- QT_文本编辑器_源码下载
源码下载: 链接: http://pan.baidu.com/s/1c21EVRy 密码: qub8 实现主要的功能有:新建,打开,保存,另存为,查找(查找的时候需要先将光标放到最下面位置才能查全,不 ...
- SQL语句(二)创建带主键和约束的数据表
内容摘要 创建带主键和约束的表 创建带组合主键和外键的表 1. 创建带主键和约束的表 Student (学生表) CREATE TABLE Student ( sclass ) NOT NULL, - ...
- VSS2005源代码管理
VSS2005使用详细 http://www.docin.com/p-467455948.html 花了差不多一天的时间把vss配置搞明白了~废话不多说,下面简单的介绍下配置的过程:安装VSS2005 ...
- luogu P2900 [USACO08MAR]土地征用Land Acquisition
写这道题时,预处理部分少打了等号,吓得我以为斜率优化错了或者被卡精了 mmp 首先有一个很明显的结论(逃),就是一个土地如果长(\(x\))与宽(\(y\))都比另一个土地小,那么这个土地一定可以跟那 ...
- vue学习一:新建或打开vue项目(vue-cli2)
vue-cli3的操作参考文章:vue/cli 3.0脚手架搭建,浅谈vue-cli 3 和 vue-cli 2的区别 1.前期准备: node.js环境,安装node npm或者cnpm(npm的淘 ...
- python - 类的内置 attr 方法
类的内置 attr 方法 #类的内置 attr 方法: # __getattr__ # __setattr__ # __delattr__ # __getattr__ #到调用一个类不存在数参数时,将 ...
- python - 远程主机执行命令练习(socket UDP + subprocess.Popen()) 练习1
环境是windows 环境. server端: import socket import subprocess ss = socket.socket(socket.AF_INET,socket.SOC ...