java实现的MySQL自动备份和还原(struts2+Hibernate)---兼容 wi_MySQL
HibernateStruts2
相信很多朋友都经历过数据库出问题的情况,我也同样(见我的上一篇博文:phpmyadmin误删表后的恢复过程(心惊胆跳啊) )。如果数据很大或者很重要,那么恢复起来是相当困难的,所以我们在做一个相对完善的系统时,数据库的备份/还原功能是必不可少的。本文将在javaEE环境下实现MySQL的自动备份/还原,使用了struts2和hibernate框架,MySQL版本是5.1.16。
下图展示的是web application的执行流程,
Timer是在一个随着application启动而启动的servlet中初始化,并接受一个名叫‘BACKUP_DEPLY'的参数,它告诉Timer多久去备份一次数据库(单位为小时):
1 <servlet> 2 <servlet-name>StartupServlet</servlet-name> 3 <servlet-class>com.nerve.web.servlet.StartupServlet</servlet-class> 4 5 <load-on-startup>1</load-on-startup> 6 7 <init-param> 8 <param-name>BACKUP_DELAY</param-name> 9 <param-value>24</param-value><!--自动备份程序执行间隔,单位为小时-->10 </init-param>11 </servlet>
每次备份数据库后,会将备份信息保存到数据库中,为此我们定义了一个PO,如下:
1 public class Backup{2 private int id;3 private String name;4 private long size;5 private Date addDate;6 7 //setter and getter8 }
上图是备份过程中主要用到的类,大概过程为:
1.当Timer开始执行备份操作时,会调用BackupService(BackupServiceImpl为其实现类)中的backup()方法
2.BackupService会实例化一个BackWorker(MySQLBackupWorker为其实现类),并调用它的backup(boolean isRestore)throws Excetion方法来完成备份
3.当BackupWorker的isDone()方法返回true时,则表示备份成功(这时可以通过BackupWorker的getFileName()方法获取保存的文件名),否则是失败
BackupWorker接口定义如下:
1 public interface BackupWorker { 2 3 public void backup(boolean isRestore) throws Exception; 4 5 public void reload(String path) throws Exception; 6 7 /** 8 * 是否备份成功 9 * @method name: isDone10 * @return type: boolean11 *@return12*/13 public boolean isDone();14 15 /**16 * 获取备份后文件的名称(不包括目录)17 * @method name: getFileName18 * @return type: String19 *@return20*/21 public String getFileName();22 23 /**24 * 获取备份后文件的大小25 * @method name: getFileSize26 * @return type: long27 *@return28*/29 public long getFileSize();30 31 /**32 * 获取配置文件中自动备份的时间间隔,单位为小时33 * @method name: getHours34 * @return type: int35 *@return36*/37 public int getHours();38 39 /**40 * 更新自动备份的时间间隔41 * @method name: setHours42 * @return type: void43 *@param hours44*/45 public void setHours(int hours);46 47 /**48 * 删除备份文件49 * @method name: delete50 * @return type: void51 *@param fileName52*/53 public void delete(String fileName);54 }
MySQLBackupWorker是MySQL的备份/还原类,实现了BackupWorker接口,在构造函数被执行时,会读取我们预设的MySQL相关设置(即上面类图中的MySQLBackup.properties),配置文件中包含如下内容:
(使用时,请将这些配置修改为本机的实际值,当OS为Linux是,mysqlpath可以不用设置,前提是 mysqldump 命令有效)
下面是MySQLBackupWorker中在window环境下的备份实现(默认的编码是utf-8,可以改为本机值):
1 public void backup(boolean isRe) throws Exception { 2 boolean isWindow = isWindowsOS(); 3 isRestore = isRe; 4 if(isWindow){ 5 this.backupWindow(); 6 }else{ 7 this.backupLinux(); 8 } 9 }10 11 /**12 * window下的mysql备份13 * @method name: backupWindow14 * @return type: void15*/16 private void backupWindow(){17 try {18 String sqlPath = bkPath + getBackupName();19 mkDir(sqlPath);20 21 StringBuffer sb = new StringBuffer();22 sb.append(mysqlPath);23 sb.append("mysqldump ");24 sb.append("--opt ");25 sb.append("-h ");26 sb.append(host);27 sb.append(" ");28 sb.append("--user=");29 sb.append(loginName);30 sb.append(" ");31 sb.append("--password=");32 sb.append(loginPass);33 sb.append(" ");34 sb.append("--lock-all-tables=true ");35 sb.append("--result-file=");36 sb.append(sqlPath);37 sb.append(" ");38 sb.append("--default-character-set=utf8 ");39 sb.append(dbName);40 41 System.out.println(sb.toString());42 Runtime cmd = Runtime.getRuntime();43 try {44 Process p = cmd.exec(sb.toString());45 int tag = p.waitFor();46 System.out.println("result::: "+tag);47 if(tag == 0)48 done = true;49 } catch (IOException e) {50 e.printStackTrace();51 }52 } catch (Exception e) {53 e.printStackTrace();54 }55 }
获取更多源代码:源代码
【本文为小弟原创文章,引用请注明出处,谢谢】

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Deepseek est un puissant outil de recherche et d'analyse intelligent qui fournit deux méthodes d'accès: la version Web et le site officiel. La version Web est pratique et efficace et peut être utilisée sans installation; Que ce soit des individus ou des utilisateurs d'entreprise, ils peuvent facilement obtenir et analyser des données massives via Deepseek pour améliorer l'efficacité du travail, aider la prise de décision et promouvoir l'innovation.

Il existe de nombreuses façons d'installer Deepseek, notamment: Compiler à partir de Source (pour les développeurs expérimentés) en utilisant des packages précompilés (pour les utilisateurs de Windows) à l'aide de conteneurs Docker (pour le plus pratique, pas besoin de s'inquiéter de la compatibilité), quelle que soit la méthode que vous choisissez, veuillez lire Les documents officiels documentent soigneusement et les préparent pleinement à éviter des problèmes inutiles.

Java 8 présente l'API Stream, fournissant un moyen puissant et expressif de traiter les collections de données. Cependant, une question courante lors de l'utilisation du flux est: comment se casser ou revenir d'une opération FOREAK? Les boucles traditionnelles permettent une interruption ou un retour précoce, mais la méthode Foreach de Stream ne prend pas directement en charge cette méthode. Cet article expliquera les raisons et explorera des méthodes alternatives pour la mise en œuvre de terminaison prématurée dans les systèmes de traitement de flux. Lire plus approfondie: Améliorations de l'API Java Stream Comprendre le flux Forach La méthode foreach est une opération terminale qui effectue une opération sur chaque élément du flux. Son intention de conception est

OUYI OKX, le premier échange mondial d'actifs numériques, a maintenant lancé un package d'installation officiel pour offrir une expérience de trading sûre et pratique. Le package d'installation OKX de OUYI n'a pas besoin d'être accessible via un navigateur. Le processus d'installation est simple et facile à comprendre.

Bitget est un échange de crypto-monnaie qui fournit une variété de services de trading, notamment le trading au comptant, le trading de contrats et les dérivés. Fondée en 2018, l'échange est basée à Singapour et s'engage à fournir aux utilisateurs une plate-forme de trading sûre et fiable. Bitget propose une variété de paires de trading, notamment BTC / USDT, ETH / USDT et XRP / USDT. De plus, l'échange a une réputation de sécurité et de liquidité et offre une variété de fonctionnalités telles que les types de commandes premium, le trading à effet de levier et le support client 24/7.

Gate.io est un échange de crypto-monnaie populaire que les utilisateurs peuvent utiliser en téléchargeant son package d'installation et en l'installant sur leurs appareils. Les étapes pour obtenir le package d'installation sont les suivantes: Visitez le site officiel de Gate.io, cliquez sur "Télécharger", sélectionnez le système d'exploitation correspondant (Windows, Mac ou Linux) et téléchargez le package d'installation sur votre ordinateur. Il est recommandé de désactiver temporairement les logiciels antivirus ou le pare-feu pendant l'installation pour assurer une installation fluide. Une fois terminé, l'utilisateur doit créer un compte Gate.io pour commencer à l'utiliser.

Ouyi, également connu sous le nom d'OKX, est une plate-forme de trading de crypto-monnaie de pointe. L'article fournit un portail de téléchargement pour le package d'installation officiel d'Ouyi, qui facilite les utilisateurs pour installer le client Ouyi sur différents appareils. Ce package d'installation prend en charge les systèmes Windows, Mac, Android et iOS. Une fois l'installation terminée, les utilisateurs peuvent s'inscrire ou se connecter au compte OUYI, commencer à négocier des crypto-monnaies et profiter d'autres services fournis par la plate-forme.

Les capsules sont des figures géométriques tridimensionnelles, composées d'un cylindre et d'un hémisphère aux deux extrémités. Le volume de la capsule peut être calculé en ajoutant le volume du cylindre et le volume de l'hémisphère aux deux extrémités. Ce tutoriel discutera de la façon de calculer le volume d'une capsule donnée en Java en utilisant différentes méthodes. Formule de volume de capsule La formule du volume de la capsule est la suivante: Volume de capsule = volume cylindrique volume de deux hémisphères volume dans, R: Le rayon de l'hémisphère. H: La hauteur du cylindre (à l'exclusion de l'hémisphère). Exemple 1 entrer Rayon = 5 unités Hauteur = 10 unités Sortir Volume = 1570,8 unités cubes expliquer Calculer le volume à l'aide de la formule: Volume = π × r2 × h (4
