1. 程式人生 > >Java之——基於java開發的功能強大、配置靈活的資料庫之間的同步工具

Java之——基於java開發的功能強大、配置靈活的資料庫之間的同步工具

一、專案背景

基於java開發的功能強大、配置靈活的資料庫之間的同步工具,和資料產生器一樣,均是前段時間因為專案需要編寫的小工具,在實際應用場景中,我們經常需要定期將一個數據庫的資料同步到另外一個數據庫中,常見的一種做法是將源資料庫的資料dump為sql檔案,然後到目標資料庫執行sql檔案完成資料庫的匯入,但是這種方法至少存在以下問題:

  • 需要手工操作,效率低
  • 當涉及資料表較多時,容易遺漏、出錯
  • 如果要定期同步,操作人容易忘記
  • 難以應付頻繁變更資料表或者欄位

針對以上存在的問題,將珍貴人力從這種重複、無意義的工作中解脫出來,特意開發這個小工具,其中主要配置主要在jobs.xml中完成。

二、專案結構

專案整體結構如下圖:


三、專案功能

  • MySQL——>MySQL
  • SQLServer——>SQLServer
  • MySQL——>SQLServer
  • SQLServer——>MySQL

注:——>左邊的程式碼源資料庫,——>右邊代表的是目標資料庫,具體解釋如下:

  • 支援MySQL向MySQL同步資料
  • 支援SQLServer向SQLServer同步資料
  • 支援MySQL向SQLServer同步資料
  • 支援SQLServer向MySQL同步資料

四、具體功能實現

1、建立資料庫資訊類DBInfo

這個類主要是儲存一些資料庫相關的資訊,比如資料庫驅動、資料庫連線、使用者名稱和密碼等,具體見如下程式碼:

  1. package io.mykit.db.sync.provider.entity;  
  2. /** 
  3.  * 資料庫資訊 
  4.  * @author liuyazhuang 
  5.  * 
  6.  */
  7. publicclass DBInfo {  
  8.     //資料庫連線
  9.     private String url;  
  10.     //資料庫使用者名稱
  11.     private String username;  
  12.     //資料庫密碼
  13.     private String password;  
  14.     //資料庫型別(對應mysql還是sqlserver)
  15.     private String dbtype;  
  16.     //資料庫驅動
  17.     private String driver;  
  18.     public String getUrl() {  
  19.         return url;  
  20.     }  
  21.     publicvoid setUrl(String url) {  
  22.         this.url = url;  
  23.     }  
  24.     public String getUsername() {  
  25.         return username;  
  26.     }  
  27.     publicvoid setUsername(String username) {  
  28.         this.username = username;  
  29.     }  
  30.     public String getPassword() {  
  31.         return password;  
  32.     }  
  33.     publicvoid setPassword(String password) {  
  34.         this.password = password;  
  35.     }  
  36.     public String getDbtype() {  
  37.         return dbtype;  
  38.     }  
  39.     publicvoid setDbtype(String dbtype) {  
  40.         this.dbtype = dbtype;  
  41.     }  
  42.     public String getDriver() {  
  43.         return driver;  
  44.     }  
  45.     publicvoid setDriver(String driver) {  
  46.         this.driver = driver;  
  47.     }  
  48. }  

2、建立定時同步任務資訊類JobInfo

這個類主要是儲存一些與定時任務相關的基本資訊,具體見如下程式碼:

  1. package io.mykit.db.sync.provider.entity;  
  2. /** 
  3.  * 任務資訊 
  4.  * @author liuyazhuang 
  5.  * 
  6.  */
  7. publicclass JobInfo {  
  8.     //任務名稱
  9.     private String name;  
  10.     //任務表示式
  11.     private String cron;  
  12.     //源資料來源sql
  13.     private String srcSql;  
  14.     //目標資料表
  15.     private String destTable;  
  16.     //目標表資料欄位
  17.     private String destTableFields;  
  18.     //目標表主鍵
  19.     private String destTableKey;  
  20.     //目標表可更新的欄位
  21.     private String destTableUpdate;  
  22.     public String getName() {  
  23.         return name;  
  24.     }  
  25.     publicvoid setName(String name) {  
  26.         this.name = name;  
  27.     }      
  28.     public String getCron() {  
  29.         return cron;  
  30.     }  
  31.     publicvoid setCron(String cron) {  
  32.         this.cron = cron;  
  33.     }  
  34.     public String getSrcSql() {  
  35.         return srcSql;  
  36.     }  
  37.     publicvoid setSrcSql(String srcSql) {  
  38.         this.srcSql = srcSql;  
  39.     }  
  40.     public String getDestTable() {  
  41.         return destTable;  
  42.     }  
  43.     publicvoid setDestTable(String destTable) {  
  44.         this.destTable = destTable;  
  45.     }  
  46.     public String getDestTableFields() {  
  47.         return destTableFields;  
  48.     }  
  49.     publicvoid setDestTableFields(String destTableFields) {  
  50.         this.destTableFields = destTableFields;  
  51.     }  
  52.     public String getDestTableKey() {  
  53.         return destTableKey;  
  54.     }  
  55.     publicvoid setDestTableKey(String destTableKey) {  
  56.         this.destTableKey = destTableKey;  
  57.     }  
  58.     public String getDestTableUpdate() {  
  59.         return destTableUpdate;  
  60.     }  
  61.     publicvoid setDestTableUpdate(String destTableUpdate) {  
  62.         this.destTableUpdate = destTableUpdate;  
  63.     }  
  64. }  

3、建立字串工具類SpringUtils

這個類主要是為字串的操作提供統一的工具支援,在這個小工具中,本類主要的作用就是判斷給定的字串是否為空,具體見如下程式碼:

  1. 相關推薦

    Java——基於java開發功能強大配置靈活資料庫之間同步工具

    一、專案背景基於java開發的功能強大、配置靈活的資料庫之間的同步工具,和資料產生器一樣,均是前段時間因為專案需要編寫的小工具,在實際應用場景中,我們經常需要定期將一個數據庫的資料同步到另外一個數據庫中,常見的一種做法是將源資料庫的資料dump為sql檔案,然後到目標資料庫執

    Corba開發基於Java實現Service與Client

    1      概述 CORBA(Common Object Request Broker Architecture,公共物件請求代理體系結構)是由OMG組織制訂的一種標準的面向物件應用程 序體系規範。或者說 CORBA體系結構是OMG為解決分散式處理環境(DCE)中,硬

    四:Java字符串操作StringStringBuffer和StringBuilder

    equal const wstring str asi 有時 string對象 階段 stringbu string是我們經經常使用到的一個類型,事實上有時候認為敲代碼就是在重復的操作字符串,這是C的特點,在java中。jdk非常好的封裝了關於字符串的操

    Appium移動自動化測試基於java的iOS環境搭建

    res .sh 變更 order edev curl 軟件包 comm 簡單的 本文僅供參考,同時感謝幫助我搭建環境的同事 操作系統的名稱:Mac OS X操作系統的版本:10.12.6 接下來我們開始踏上搭建Appium+java+ios之路,本文只說個大概,畢竟本機已經

    javasleep(),join(),yield(),wait(),notify()notifyAll()區別

    zed lang object 數據 不能訪問 tar 值類型 類型 except 1、sleep() 使當前線程(即調用該方法的線程)暫停執行一段時間,讓其他線程有機會繼續執行,但它並不釋放對象鎖。也就是說如果有synchronized同步快,其他線程仍然不能訪問共享數據

    Spring(八)基於Java配置

    onf 需要 rgs ava poi .com class 解釋 mes 基於 Java 的配置 到目前為止,你已經看到如何使用 XML 配置文件來配置 Spring bean。如果你熟悉使用 XML 配置,那麽我會說,不需要再學習如何進行基於 Java 的配置是,因為你要

    Java三大基礎排序(冒泡選擇插入)

    注:以下排序均為從小到大 一、氣泡排序 package com.yunche.testsort; import java.util.Arrays; /** * @ClassName: BubbleSort * @Description: * @author: yunche

    Java路:類的封裝繼承與多型

    面向物件有三大特點:封裝性、繼承性和多型性。 一、封裝 1、封裝的含義 封裝 (Encapsulation)是將描述某類事物的資料與處理這些資料的函式封裝在一起,形成一個有機整體,稱為類。 類所具有的封裝性可使程式模組具有良好的獨立性與可維護性,這對大型程式的開發是特別重要的

    Java四大內建註解@Override@Deprecated@SuppressWarnings@SafeVarargs

    Java中的四大內建註解:          ==> 標記程式  給予特殊意義 1.@Override : 驗證方法是否在覆寫 2.@Deprecated : 標記方法、類...等是否過時 

    java微信開發回覆圖片訊息

    微信開發文件見:詳見 具體實現見:詳見 public class WxController { public static final Logger LOGGER= LoggerFactory.getLogger(WxController.

    JAVA各種排序演算法(冒泡選擇快排二分法詳細過程)

    掌握演算法是作為程式設計師的基本必備素質,而排序也是各種演算法的基礎,雖說java幫我們封裝好了各種資料型別的排序方法,可是我們還是要知道他的原理,下面我就說幾種常用的演算法及原理; 氣泡排序: 原理:相鄰元素兩兩比較,大的往後放,每一次完畢,最大值出現在了最大索引處; 下面我們

    Java 路 (十三) -- 字串(String正則表示式)

    個人吐槽:對於這章,第一遍讀和重讀之後果然看法不同:第一次讀時覺得,文章用了大篇幅來介紹 API,這樣我可以比較容易理解這個方法是幹嘛的,以此理解這個類是幹嘛的;但是重讀之後覺得,文章居然用了這麼大篇幅在講 API(尤其是正則表示式),如果我需要知道具體某

    從零配置雲伺服器(Java web執行環境)(二配置JAVA開發環境)

    二、配置JAVA開發環境 先進入我們的實力列表,右邊進入遠端連線。 這裡遠端連線1 輸入遠端連線密碼後連線成功,接著輸入系統登陸賬號密碼。(Unix系統輸入密碼都是不顯示在螢幕上的,是連小星星都沒有的。) 登陸成功後我們先新建一個目錄

    Java基於Eclipse搭建SSH框架(下)

    在上篇部落格裡,我簡單介紹了Tomcat滴配置與Struts2滴搭建,如果對這個還不會滴童鞋去看一下我滴上篇部落格《Java之基於Eclipse搭建SSH框架(上)》。今天我們接著上篇部落格滴內容,繼續搭建我們滴SSH框架。 (一)在上篇部落格滴基礎上整合Sp

    Java——基於Luhn演算法的銀行卡卡號的格式校驗

    一、檢驗規則 Luhn演算法被用於最後一位為校驗碼的一串數字的校驗,通過如下規則計算校驗碼的正確性:     按照從右往左的順序,從這串數字的右邊開始,包含校驗碼,將偶數位數字乘以2,如果每次乘二操作的結果大於9(如 8 × 2 = 16),然後計算個位和十位數字的和(如

    java接口開發-初級篇-http和https

    tps str java之接口 url地址 head http 初級 type charset http協議util address(url地址),str(數據參數) private static HttpMethod getPostJsonMethodInReques

    Spring MVC基於java config無xml配置的web應用構建

    開發十年,就只剩下這套架構體系了! >>>   

    Java~ 上傳 圖片壓縮,圖片壓縮,圖片旋轉方法工具

    package com.javajy.util; import java.awt.Dimension; import java.awt.Graphics2D; import java.awt.Image; import java.awt.Point; import jav

    Spring CloudGateway(四):TLS/SSL配置跨域訪問配置執行器API開發人員指南及MVC或Webflux搭建Gateway

    版本:2.0.2.RELEASE 連結:http://spring.io/projects/spring-cloud-gateway#overview   本章主要目錄如下: Spring Cloud GatewayTLS/SSL是什麼? Spring Cloud

    java對JDBC的完整封裝(相容多種資料庫

    目前此程式碼我只用過mysql和oracle資料庫測試過,但相信其它資料庫都是可以的,只要匯入你需要操作的資料庫jar包,驅動等就可,下面上程式碼: import java.sql.CallableStatement; import java.sql.Connection