java定时增量同步,一种可配置的定时数据同步方法与流程
本發(fā)明涉及數(shù)據(jù)交換技術,尤其涉及一種可配置的定時數(shù)據(jù)同步方法。解決企業(yè)內部異構系統(tǒng)之間的數(shù)據(jù)同步問題。主要利用計算機多線程技術、XML技術、數(shù)據(jù)庫技術實現(xiàn)。具有簡單配置、快速部署、靈活擴展的特點,并且對于特定系統(tǒng)(比如CRM與ERP系統(tǒng)之間),一次配置后,可重復使用,有利于配置模板的積累。
背景技術:
在企業(yè)中,由于開發(fā)時間或開發(fā)部門的不同,往往有多個異構的、運行在不同的軟硬件平臺上的信息系統(tǒng)同時運行,這些系統(tǒng)的數(shù)據(jù)源彼此獨立、相互封閉,使得數(shù)據(jù)難以在系統(tǒng)之間交流、共享和融合,從而形成了"信息孤島"。隨著信息化應用的不斷深入,企業(yè)內部、企業(yè)與外部信息交互的需求日益強烈,急切需要對已有的信息進行整合,聯(lián)通“信息孤島”,共享信息。
數(shù)據(jù)集成:數(shù)據(jù)集成通過應用間的數(shù)據(jù)交換從而達到集成,主要解決數(shù)據(jù)的分布性和異構性的問題,其前提是被集成應用必須公開數(shù)據(jù)結構,即必須公開表結構,表間關系,編碼的含義等。
對于數(shù)據(jù)集通常的解決辦法,一是我們系統(tǒng)中直接訪問對方系統(tǒng)的數(shù)據(jù)庫的方式。這樣的方式數(shù)據(jù)實時性好,沒有延遲。缺點是安全性比較差、互相影響的風險也比較大,對方系統(tǒng)可能擔心會打亂數(shù)據(jù),影響他們的系統(tǒng),我們系統(tǒng)也因為對方系統(tǒng)數(shù)據(jù)庫是否可用而受影響。第二個是把對方系統(tǒng)的數(shù)據(jù)拿過來,放到我們的系統(tǒng)的數(shù)據(jù)庫里。
技術實現(xiàn)要素:
對于上述第二種情況,本發(fā)明提出了一種可配置的定時數(shù)據(jù)同步方法,它可以將來自某個系統(tǒng)的數(shù)據(jù)定時同步到目標系統(tǒng)中。數(shù)據(jù)同步需要了解5方面信息,數(shù)據(jù)的來源、來源中的數(shù)據(jù)、目標、應該放到目標的什么地方還有同步頻率。
1、同步數(shù)據(jù)信息配置DbCrmJob.config。
在這個文件里需要配置的信息包括數(shù)據(jù)的來源、目的,需要同步的數(shù)據(jù),數(shù)據(jù)同步的方向和步驟。主要節(jié)點如下:
數(shù)據(jù)庫信息配置節(jié)點,配置數(shù)據(jù)的來源和目的數(shù)據(jù)庫連接信息,根據(jù)實際項目的環(huán)境修改配置。
WebService信息配置節(jié)點,配置數(shù)據(jù)的來源和目的為UpdateCrm Interface的連接信息,根據(jù)實際項目的環(huán)境修改配置,一般只需要修改接口服務器的IP地址。
同步數(shù)據(jù)配置節(jié)點,配置需要同步的數(shù)據(jù)。每個InfObject相當于數(shù)據(jù)庫中的一個表,Field相當于表中的字段。如果同步雙方的表結構相同,可以只配置一個,如果雙方的表結構不同都需要配置。
數(shù)據(jù)同步任務配置節(jié)點,配置數(shù)據(jù)同步的方向,同步的步驟,即將來源于某個數(shù)據(jù)庫或UpdateCRM中的什么數(shù)據(jù)同步到目的數(shù)據(jù)庫或UpdateCRM。每一個Task表示一個同步任務,可包含多個同步步驟Item,Item為具體的需要同步的數(shù)據(jù)。
2、數(shù)據(jù)同步任務定時配置文件jobs.xml。
主要對DbCrmJobCfg.xml配置的數(shù)據(jù)同步任務的定時執(zhí)行信息進行配置。配置節(jié)點如下:
主要配置作業(yè)節(jié)點Job和時間觸發(fā)器節(jié)點trigger。Job和DbCrmJobCfg中的任務對應,Job的name需要與DbCrmJob.Config中Task的taskName相同,其他參照注釋說明。
trigger配置作業(yè)的執(zhí)行時間,其中的job-name需要job節(jié)點的name相同。Trigger的定時分為兩種Simple和cron,可以滿足不同的需求。
如果需要讓任務只在某個時刻執(zhí)行一次,或者,在某個時刻開始,然后按照某個時間間隔重復執(zhí)行,簡單地說,如果你想讓觸發(fā)器在2007年8月20日上午11:23:54秒執(zhí)行,然后每個隔10秒鐘重復執(zhí)行一次,并且這樣重復5次。那么Simple就可以滿足你的要求。
如果你需要像日歷那樣按日程來觸發(fā)任務,而不是像Simpler那樣每隔特定的間隔時間觸發(fā),通常使用cron方式配置定時時間。使用cron,你可以指定諸如“每個周五中午”,或者“每個工作日的9:30”或者“從每個周一、周三、周五的上午9:00到上午10:00之間每隔五分鐘”這樣日程安排來觸發(fā)。甚至,象Simple一樣,Cron也有一個StartTime以指定日程從什么時候開始,也有一個(可選的)EndTime以指定何時日程不再繼續(xù)。
Cron表達式舉例
例1–一個簡單的每隔5分鐘觸發(fā)一次的表達式
"0 0/5***?"
例2–在每分鐘的10秒后每隔5分鐘觸發(fā)一次的表達式(例如.10:00:10am,10:05:10等.)。
"10 0/5***?"
例3–在每個周三和周五的10:30,11:30,12:30觸發(fā)的表達式。
"0 30 10-13?*WED,FRI"
例4–在每個月的5號,20號的8點和10點之間每隔半個小時觸發(fā)一次且不包括10點,只是8:30,9:00和9:30的表達式。
"0 0/30 8-9 5,20*?"注意,對于單獨觸發(fā)器來說,有些日程需求可能過于復雜而不能用表達式表述,例如:9:00到10:00之間每隔5分鐘觸發(fā)一次,下午1:00到10點每隔20分鐘觸發(fā)一次。這個解決方案就是創(chuàng)建兩個觸發(fā)器,兩個觸發(fā)器都運行相同的任務。
3、日志配置文件JobScheduler.exe.config。
對程序的運行信息、任務執(zhí)行信息、錯誤信息的日志輸出配置。程序默認配置為錯誤信息輸出到文件(運行目錄下的log目錄)并且將錯誤日志發(fā)送郵件給指定的的維護人員。對于程序的運行日志可運行l(wèi)ogView.bat查看實時日志。
部署時主要修改如下信息:
[測試項目]修改為實際的項目名稱
***@inspur.com修改維護人員的郵件地址
4、SQL Server生成字段配置SQL
本發(fā)明的有益效果是
基于XML配置,配置靈活、使用簡單;
支持全量更新與增量更新;
支持系統(tǒng)之間雙向定時數(shù)據(jù)同步;
靈活的定時策略,包括固定頻次重復執(zhí)行和特定時間點執(zhí)行,支持cron表達式;
預制CRM系統(tǒng)和ERP系統(tǒng)數(shù)據(jù)處理模板,方便特定系統(tǒng)間的快速部署,提高效率;
采用服務部署方式,運行穩(wěn)定,操作系統(tǒng)啟動后自動重啟,無須人為參與;
完備的反饋機制,出現(xiàn)錯誤自動發(fā)送郵件給維護人員,及時解決,調試信息和運行信息可通過配置決定是否輸出。
附圖說明
圖1是DbCrmJob.xml和Jobs.xml各配置節(jié)點關系示意圖。
具體實施方式
下面對本發(fā)明的內容進行更加詳細的闡述:
本發(fā)明提供的一種可配置的定時數(shù)據(jù)同步方法與裝置,實現(xiàn)方式是基于數(shù)據(jù)庫層面來實現(xiàn)系統(tǒng)之間的數(shù)據(jù)交換,對現(xiàn)有業(yè)務系統(tǒng)無影響。支持SqlServer/Oracle與SqlServer/Oracle之間、SqlServer/Oracle與UpdateCRM系統(tǒng)之間雙向定時數(shù)據(jù)同步。
主要實現(xiàn)代碼如下:
本發(fā)明特點
1、在數(shù)據(jù)庫層面完成數(shù)據(jù)同步,支持Oracle、SqlServer兩種數(shù)據(jù)庫,預制數(shù)據(jù)庫訪問層接口,可通過擴展支持其他數(shù)據(jù)庫;
2、部署一套程序,通過配置,可以支持任意多個系統(tǒng)間的數(shù)據(jù)交換;
3、可通過xml配置,Sql和存儲過程三種方式獲取數(shù)據(jù);
4、可根據(jù)不同系統(tǒng)的要求配置字段的時間格式,如20160819、2016-08-19、2016/08/09;
5、可為每次數(shù)據(jù)同步的一批數(shù)據(jù)生成一個批號,以方便導入之后的處理;
6、可為每批數(shù)據(jù)生成記錄序號;
7、對于主從表,可以先導入主表數(shù)據(jù),再導入從表數(shù)據(jù),然后通過本次批次號做后續(xù)處理;
8、對于目標數(shù)據(jù)記錄,可以配置數(shù)據(jù)同步時間信息(何時同步的數(shù)據(jù));
9、可自動判斷每條數(shù)據(jù)是更新或添加;
10、支持全量更新和增量更新;
11、存錯過程支持靈活的時間表達式;
12、支持在同步前調用源數(shù)據(jù)庫的存儲過程,以便對本次同步的數(shù)據(jù)做預處理;
13、在同步后可以調用目標數(shù)據(jù)庫的存儲過程,以便對本次同步的數(shù)據(jù)做后處理,比如對本批次數(shù)據(jù)做數(shù)據(jù)轉換;
14、數(shù)據(jù)同步定時時間,支持Cron表達式,可按固定頻次,如沒5秒執(zhí)行,以及特定時間點循環(huán)執(zhí)行,如表達式“0 0 23**?”表示每天晚上11點執(zhí)行。
15、可以配置日志的輸出,如調試日志、運行日志、錯誤日志等
16、出現(xiàn)錯誤后,將錯誤日志發(fā)送郵件給維護人,以便及時解決問題。
總結
以上是生活随笔為你收集整理的java定时增量同步,一种可配置的定时数据同步方法与流程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab白噪声模块,matlab白噪
- 下一篇: oracle函数中bitand,Orac