From 3487f5d6cb7f2d6f3681128740b2746824193b2f Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Sat, 18 Jan 2020 21:51:29 +0800 Subject: [PATCH] =?UTF-8?q?feat[litemall-core]:=20=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93=E5=A4=87=E4=BB=BD=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker/docker-compose.yml | 1 + .../linlinjava/litemall/db/util/DbUtil.java | 51 +++++++++++++++++++ .../linlinjava/litemall/db/DbUtilTest.java | 21 ++++++++ 3 files changed, 73 insertions(+) create mode 100644 litemall-db/src/main/java/org/linlinjava/litemall/db/util/DbUtil.java create mode 100644 litemall-db/src/test/java/org/linlinjava/litemall/db/DbUtilTest.java diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 6a6d85c9..2d90320a 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -26,6 +26,7 @@ services: volumes: - ./litemall/storage:/storage - ./litemall/logs:/logs + - ./litemall/backup:/backup - /etc/localtime:/etc/localtime depends_on: - mysql57 diff --git a/litemall-db/src/main/java/org/linlinjava/litemall/db/util/DbUtil.java b/litemall-db/src/main/java/org/linlinjava/litemall/db/util/DbUtil.java new file mode 100644 index 00000000..bf2d031c --- /dev/null +++ b/litemall-db/src/main/java/org/linlinjava/litemall/db/util/DbUtil.java @@ -0,0 +1,51 @@ +package org.linlinjava.litemall.db.util; + +import java.io.*; +import java.nio.charset.StandardCharsets; +import java.text.SimpleDateFormat; +import java.util.Date; + +public class DbUtil { + + public static void backup(File file, String user, String password, String db) { + try { + Runtime rt = Runtime.getRuntime(); + String command = "mysqldump -u" + user + " -p" + password + " --set-charset=utf8 " + db; + Process child = rt.exec(command); + InputStream inputStream = child.getInputStream(); + BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8)); + OutputStreamWriter outputStreamWriter = new OutputStreamWriter( new FileOutputStream(file), StandardCharsets.UTF_8); + String str; + while ((str = bufferedReader.readLine()) != null) { + outputStreamWriter.write(str + "\r\n"); + } + outputStreamWriter.flush(); + inputStream.close(); + bufferedReader.close(); + outputStreamWriter.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public static void load(File file, String user, String password, String db) { + try { + Runtime rt = Runtime.getRuntime(); + String command = "mysql -u" + user + " -p" + password + " --default-character-set=utf8 " + db; + Process child = rt.exec(command); + OutputStream outputStream = child.getOutputStream(); + BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(file), StandardCharsets.UTF_8)); + OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream, StandardCharsets.UTF_8); + String str; + while ((str = bufferedReader.readLine()) != null) { + outputStreamWriter.write(str + "\r\n"); + } + outputStreamWriter.flush(); + outputStream.close(); + bufferedReader.close(); + outputStreamWriter.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } +} \ No newline at end of file diff --git a/litemall-db/src/test/java/org/linlinjava/litemall/db/DbUtilTest.java b/litemall-db/src/test/java/org/linlinjava/litemall/db/DbUtilTest.java new file mode 100644 index 00000000..0904369d --- /dev/null +++ b/litemall-db/src/test/java/org/linlinjava/litemall/db/DbUtilTest.java @@ -0,0 +1,21 @@ +package org.linlinjava.litemall.db; + +import org.junit.Test; +import org.linlinjava.litemall.db.util.DbUtil; + +import java.io.File; + +public class DbUtilTest { + @Test + public void testBackup() { + File file = new File("test.sql"); + DbUtil.backup(file, "litemall", "litemall123456", "litemall"); + } + +// 这个测试用例会重置litemall数据库,所以比较危险,请开发者注意 +// @Test + public void testLoad() { + File file = new File("test.sql"); + DbUtil.load(file, "litemall", "litemall123456", "litemall"); + } +}