您的位置 首页 java

springBoot定时备份数据库邮件通知

springBoot定时备份数据库邮件通知

编辑搜图

请点击输入图片描述

前言:

以前在项目中实现定时任务,大多使用第三方插件Quartz,本文主要介绍springBoot中如何使用注解的方式更简单的实现定时任务,并且结合以前所讲解的springBoot中发送邮件,实际运用到项目中对数据库进行备份且邮件通知管理员。

环境准备:

Java 框架:springBoot2.1.4RELEASE

定时任务:spring注解

项目构建工具:Maven

邮件:spring组件

数据库: Mysql

1、构建springBoot基础工程

springBoot定时备份数据库邮件通知

编辑搜图

请点击输入图片描述

依赖:

<!–邮件依赖–>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-mail</artifactId>

</dependency>

我们先来了解spring中的@Scheduled注解,该注解主要注在方法上,该注解有几个属性:

springBoot定时备份数据库邮件通知

编辑搜图

请点击输入图片描述

具体的就不一一介绍了下面了解一个重要的属性

cron:

指定一个cron表达式,该表达式是个字符串,以5或6个空格隔开,总共6个或7个域,每个域都代表一个时间单位,例@Scheduled(“5 * * * * ?”)则代表每过5秒中执行一次,每个域分别代表(年非必填)

[秒] [分] [小时] [日] [月] [周] [年]

序号说明必填允许填写的值允许的通配符1秒是0-59, – * /2分是0-59, – * /3时是0-23, – * /4日是1-31, – * ? / L W5月是1-12 / JAN-DEC, – * /6周是1-7 or SUN-SAT, – * ? / L #7年否1970-2099, – * /

通配符:

  • * :表示所有的值
  • ? :表示不指定值
  • – :表示区间
  • , :表示指定多个值
  • / :表示指定值递增触发
  • L :表示月内最后一天(根据月份)或者最后周内最后一天(星期六)
  • W:表示离指定日期最近的一个工作日(周一至周五)
  • # :序号(表示每月的第几个周几)

cron示例

描述表达式每5秒执行一次*/5 * * * * ?每一分钟执行一次0 */1 * * * ?每天23点执行一次0 0 23 * * ?每月1号凌晨1点执行一次0 0 1 1 * ?每月最后一天23点执行一次0 0 23 L * ?每周星期天凌晨1点实行一次0 0 1 ? * L在26分、29分、33分执行一次0 26,29,33 * * * ?

2、创建定时任务类

@ Component //将该类进行注入交给IOC管理

@EnableScheduling // 开启定时任务

public class TestTask {

private static final SimpleDateFormat simpleDateFormat = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);

//添加定时任务:每隔5秒执行

@Scheduled(cron = “0/5 * * * * ?”)

//或直接指定时间间隔,例如:5秒

//@Scheduled(fixedRate=5000)

private void testTasks() {

String currentDate=simpleDateFormat.format(new Date());

System.err.println(“执行定时任务时间: ” + currentDate);

}

}

运行结果:

执行定时任务时间: 2020-01-18 01:10:40

执行定时任务时间: 2020-01-18 01:10:45

执行定时任务时间: 2020-01-18 01:10:50

执行定时任务时间: 2020-01-18 01:10:55

3、检查Mysql环境变量

因为实现备份数据库功能用到了mysql中的my sql dump命令,在Windows环境必须配置环境变量才能使用该命令.

配置步骤:

springBoot定时备份数据库邮件通知

编辑搜图

请点击输入图片描述

4、配置完成后对定时任务类进行改造:

@Component //将该类进行注入交给IOC管理

@EnableScheduling // 开启定时任务

public class TestTask {

//时间格式转换

private static final SimpleDateFormat simpleDateFormat = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);

private String username=”root”;//数据库用户名

private String passord=”root”;//数据库用户密码

private String dbname=”cargills”;//备份数据库名

private String path=”G:VXGZHsql”;//备份文件存储路径

/* 添加定时任务

为了演示每五秒备份一次

正常情况下是每天凌晨进行备份

*/

@Scheduled(cron = “0/5 * * * * ?”)

//或直接指定时间间隔,例如:5秒

//@Scheduled(fixedRate=5000)

private void configureTasks() {

//获取当前时间

String currentDate=simpleDateFormat.format(new Date());

// 数据库备份 命令,使用当前时间+数据库名命名以防文件名重复出错

String cmd=”mysqldump -u{0} -p{1} {2} -r {3}{4}_{5}.sql”;

cmd= message Format.format(cmd,username,passord,dbname,path,currentDate.replaceAll(“-“,””).replaceAll(” “,””).replaceAll(“:”,””),dbname);

try {

/*执行命令*/

Process process = Runtime .getRuntime(). exec (cmd);

} catch (Exception e) {

System.err.println(currentDate+”备份数据库失败,报错:”+e. getMessage ());

e.printStackTrace();

}

System.err.println(currentDate+”备份数据库成功”);

}

}

执行结果:

2020-01-18 02:08:25备份数据库成功

2020-01-18 02:08:30备份数据库成功

2020-01-18 02:08:35备份数据库成功

2020-01-18 02:08:40备份数据库成功

2020-01-18 02:08:45备份数据库成功

springBoot定时备份数据库邮件通知

编辑搜图

请点击输入图片描述

5、实现邮件通知管理员

实现此功能建议先了解此文:springBoot发送邮件

这里只实现发送带附件文件的邮件通知,更多的邮件类型就不一一赘述了,想了解的可以点击上方链接阅读该文章.

5.1、邮件配置application.properties:

#邮箱服务地址

spring.mail.host=smtp.qq.com

#邮箱账号

spring.mail.username=526277249@qq.com

#邮箱授权码

spring.mail.password=synxiqnkrptnbgeg

#邮箱默认编码

spring.mail.default-encoding=UTF-8

5.2、实现发送邮件工具类

springBoot定时备份数据库邮件通知

编辑搜图

图片模糊,建议替换或删除×

请点击输入图片描述

@Service

public class SendEmailUtil {

@Value(“${spring.mail.username}”)

private String sendUser;

@Autowired

private JavaMailSender javaMailSender;

/*发送普通邮件

* Param

* to:接收用户

* subject :邮件主题

* context:邮件正文内容*/

public void sendMail(String to,String subject,String context){

try {

SimpleMailMessage message = new SimpleMailMessage();

message.setTo(to);

message.setSubject(subject);

message.setText(context);

message.setFrom(sendUser);

javaMailSender.send(message);

System.out.println(“—-邮件发送成功—-“);

}catch (Exception e){

System.out.println(“邮件发送失败…”);

}

}

/*带附件

* Param

* to:接收用户

* subject:邮件主题

* context:邮件正文内容

* filePath:文件路径*/

public void sendAttachmentsMail(String to,String subject,String context,String filePath) {

MimeMessage message=javaMailSender.createMimeMessage();

try {

MimeMessageHelper helper=new MimeMessageHelper(message,true);

helper.setFrom(sendUser);

helper.setTo(to);

helper.setSubject(subject);

helper.setText(context,true);

FileSystemResource file=new FileSystemResource(new File(filePath));

String fileName=file.getFilename();

helper.addAttachment(fileName,file);

javaMailSender.send(message);

System.out.println(“—-邮件发送成功—-“);

}catch (Exception e){

System.out.println(“邮件发送失败…”);

}

}

}

5.3、改动定时任务类

@Component //将该类进行注入交给IOC管理

@EnableScheduling // 开启定时任务

public class TestTask {

@Autowired

public SendEmailUtil sendEmail;

private static final SimpleDateFormat simpleDateFormat = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);

private String username=”root”;//数据库用户名

private String passord=”root”;//数据库用户密码

private String dbname=”cargills”;//备份数据库名

private String path=”G:VXGZHsql”;//备份文件存储路径

private String adminEmail=”24698171@qq.com”;//管理员邮件

private String emailSubject=”数据库备份结果通知”;//邮件标题

/* 添加定时任务

为了演示每五秒备份一次

正常情况下是每天凌晨进行备份

*/

@Scheduled(cron = “0/5 * * * * ?”)

//或直接指定时间间隔,例如:5秒

//@Scheduled(fixedRate=5000)

private void configureTasks() {

//获取当前时间

String currentDate=simpleDateFormat.format(new Date());

//数据库备份命令

String cmd=”mysqldump -u{0} -p{1} {2} -r {3}{4}_{5}.sql”;

//sql文件位置

String sqlPath=path+currentDate.replaceAll(“-“,””).replaceAll(” “,””).replaceAll(“:”,””)+”_”+dbname+”.sql”;

cmd=MessageFormat.format(cmd,username,passord,dbname,path,currentDate.replaceAll(“-“,””).replaceAll(” “,””).replaceAll(“:”,””),dbname);

try {

/*执行命令*/

Process process = Runtime.getRuntime().exec(cmd);

} catch (Exception e) {

System.err.println(currentDate+”备份数据库失败,报错:”+e.getMessage());

sendEmail.sendMail(adminEmail,emailSubject,currentDate+”备份数据库失败,原因:”+e.getMessage());

e.printStackTrace();

}

System.err.println(currentDate+”备份数据库成功”);

sendEmail.sendAttachmentsMail(adminEmail,emailSubject,currentDate+”备份数据库成功”,sqlPath);

}

}

5.4、测试

springBoot定时备份数据库邮件通知

编辑搜图

图片模糊,建议替换或删除×

请点击输入图片描述

springBoot定时备份数据库邮件通知

编辑搜图

请点击输入图片描述

大功告成!

源码:在后台输入( 1001 )自行提取

不知不觉写到深夜三点,如果认为写的还行那就留下一个关注呗

欢迎转发让更多朋友看到,如有不足欢迎指导!

有任何问题也欢迎在后台留言,或者加入交流群跟大家一起交流!

文章来源:智云一二三科技

文章标题:springBoot定时备份数据库邮件通知

文章地址:https://www.zhihuclub.com/181741.shtml

关于作者: 智云科技

热门文章

网站地图