浏览代码

feat[litemall-admin-api]: 定时任务备份数据库文件

Junling Bu 6 年之前
父节点
当前提交
c07c01a444

+ 63 - 0
litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/job/DbJob.java

@@ -0,0 +1,63 @@
+package org.linlinjava.litemall.admin.job;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.linlinjava.litemall.core.system.SystemConfig;
+import org.linlinjava.litemall.db.domain.LitemallOrder;
+import org.linlinjava.litemall.db.domain.LitemallOrderGoods;
+import org.linlinjava.litemall.db.service.*;
+import org.linlinjava.litemall.db.util.DbUtil;
+import org.linlinjava.litemall.db.util.OrderUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.env.Environment;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.io.File;
+import java.io.IOException;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * 数据库定时备份任务
+ * 在backup文件夹中备份最近七日的数据库文件
+ */
+@Component
+public class DbJob {
+    private final Log logger = LogFactory.getLog(DbJob.class);
+
+    @Autowired
+    private Environment environment;
+
+    /*
+     * 定时时间是每天凌晨5点。
+     */
+    @Scheduled(cron = "0 0 5 * * ?")
+    public void backup() throws IOException {
+        logger.info("系统开启定时任务数据库备份");
+
+        String user = environment.getProperty("spring.datasource.druid.username");
+        String password = environment.getProperty("spring.datasource.druid.password");
+        String url = environment.getProperty("spring.datasource.druid.url");
+        int index1 = url.indexOf("3306/");
+        int index2 = url.indexOf("?");
+        String db = url.substring(index1+5, index2);
+
+        LocalDate localDate = LocalDate.now();
+        String fileName = localDate.toString();
+        File file = new File("backup", fileName);
+        file.getParentFile().mkdirs();
+        file.createNewFile();
+
+        // 备份今天数据库
+        DbUtil.backup(file, user, password, db);
+        // 删除七天前数据库备份文件
+        LocalDate before = localDate.minusDays(7);
+        File fileBefore = new File("backup", fileName);
+        fileBefore.deleteOnExit();
+
+        logger.info("系统结束定时任务数据库备份");
+    }
+
+}

+ 55 - 0
litemall-admin-api/src/test/java/org/linlinjava/litemall/admin/DbTest.java

@@ -0,0 +1,55 @@
+package org.linlinjava.litemall.admin;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.core.env.Environment;
+import org.springframework.test.context.junit4.SpringRunner;
+import org.springframework.test.context.web.WebAppConfiguration;
+
+import java.io.File;
+import java.io.IOException;
+import java.time.LocalDate;
+
+@WebAppConfiguration
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class DbTest {
+    @Autowired
+    private Environment environment;
+
+    @Test
+    public void test() {
+        String user = environment.getProperty("spring.datasource.druid.username");
+        String password = environment.getProperty("spring.datasource.druid.password");
+        String url = environment.getProperty("spring.datasource.druid.url");
+        int index1 = url.indexOf("3306/");
+        int index2 = url.indexOf("?");
+        String db = url.substring(index1+5, index2);
+        System.out.println(user);
+        System.out.println(password);
+        System.out.println(db);
+    }
+
+    @Test
+    public void testFileCreate() throws IOException {
+        LocalDate localDate = LocalDate.now();
+        String fileName = localDate.toString() + ".sql";
+        System.out.println(fileName);
+
+        File file = new File("backup", fileName);
+        file.getParentFile().mkdirs();
+        file.createNewFile();
+    }
+
+    @Test
+    public void testFileDelete() throws IOException {
+        LocalDate localDate = LocalDate.now();
+        String fileName = localDate.toString() + ".sql";
+        System.out.println(fileName);
+
+        File file = new File("backup", fileName);
+        file.deleteOnExit();
+    }
+}