JaVers是一個開源的Java版本控制框架,旨在幫助開發者更輕松地管理和跟蹤應用程序中的對象版本。它提供了一種簡單且強大的方式來處理對象的創建、修改和刪除,以及版本控制和歷史記錄。JaVers適用于各種應用程序,包括但不限于Web應用程序、桌面應用程序和移動應用程序。
下面是兩個個簡單的JaVers示例代碼,展示了如何使用JaVers實現數據比對以及對對象進行版本控制:
首先,需要在項目中引入JaVers的相關依賴,如果需要對結果持久化,還需要額外引入對應的依賴:
<dependency> <groupId>org.javers</groupId> <artifactId>javers-core</artifactId> <version>7.3.6</version></dependency><dependency> <groupId>org.javers</groupId> <artifactId>javers-persistence-sql</artifactId> <version>7.3.6</version></dependency>
通過JaVers我們可以實現兩個值對象的比較,通過下面的示例可以看到效果:
Person p1 = new Person("1","junly",22); Person p2 = new Person("2","rose",22); Javers javers = JaversBuilder.javers().build(); Diff diff = javers.compare(p1, p2); if (diff.hasChanges()) { Changes changes = diff.getChanges(); changes.forEach(change->{ System.out.println(change.toString()); }); } System.out.println( diff.prettyPrint() );
執行上面的代碼,會得到如下的輸出,反映了一個對象修改前后具體屬性進行了怎樣的變化,之前做的數據采集的項目中,用戶提交的數據是一個大json對象, 由于用戶可以進行多次修改,但又需要記錄每次修改的明細,如果自己寫功能則需要寫大量的代碼來處理,而JaVers可以幫助開發者完美解決了這類問題。
ValueChange{ property: 'id', left:'1', right:'2' }ValueChange{ property: 'name', left:'junly', right:'rose' }Diff:* changes on com.sucl.blog.tool.javers.entity.Person/ : - 'id' changed: '1' -> '2' - 'name' changed: 'junly' -> 'rose'
通過Commit我們可以實現對對象進行版本控制,通過下面的示例可以看到效果:
public static void main(String[] args) { Javers javers = JaversBuilder.javers().build(); Person p1 = new Person("1","junly",22); javers.commit("u1", p1); Person p2 = new Person("1","junly",20); javers.commit("u1", p2); Person p3 = new Person("1","tom",22); javers.commit("u1", p3); JqlQuery query = QueryBuilder.byInstanceId("1", Person.class).build(); System.out.println("==========================="); // List<Shadow<Object>> shadows = javers.findShadows(query); shadows.forEach(shadow-> System.out.println( shadow.get() )); System.out.println("==========================="); // List<CdoSnapshot> snapshots = javers.findSnapshots(query); snapshots.forEach(snapshot-> System.out.println( snapshot.getChanged() )); System.out.println("==========================="); // Changes changes = javers.findChanges(query); changes.forEach(change-> System.out.println( change.toString() ));}
通過上面的例子,我們可以借用JaVers對對象進行版本控制,并可以獲取到對象歷史數據。在實體變化時記錄歷史版本、變更過程以及變化明細。
===========================Person(id=1, name=tom, age=22)Person(id=1, name=junly, age=20)Person(id=1, name=junly, age=22)===========================[name, age][age][name, id, age]===========================ValueChange{ property: 'name', left:'junly', right:'tom' }ValueChange{ property: 'age', left:'20', right:'22' }ValueChange{ property: 'age', left:'22', right:'20' }NewObject{ new object: com.sucl.blog.tool.javers.entity.Person/1 }InitialValueChange{ property: 'id', left:'', right:'1' }InitialValueChange{ property: 'name', left:'', right:'junly' }InitialValueChange{ property: 'age', left:'', right:'22' }Process finished with exit code 0
Shadow和Changes是JaVers提供的兩種查詢方式,通過它們可以獲取到實體的歷史版本。
Snapshot是JaVers提供的一種查詢方式,通過它可以獲取到實體的歷史版本。
JaVers還提供了JQL查詢語言,可以幫助開發者實現對數據庫的各種查詢,比如基于變化的屬性、提交人、時間等等。
JaVers提供了兩種持久化方式,一種是內存持久化,另一種是數據庫持久
目前可以支持的數據庫有:
在上面的例子當中,你可以通過配置Repository來實現變更過程的持久化,例如使用Mysql數據庫,可以配置如下:
JaversRepository javersRepository = SqlRepositoryBuilder.sqlRepository() .withConnectionProvider(()-> getConnection()) .withDialect(DialectName.MYSQL) .build();Javers javers = JaversBuilder.javers() .registerJaversRepository(javersRepository) .build();
這樣我們通過JQL查詢就可以按需獲取更多的歷史數據了。
Javers在做數據對比以及數據變更追蹤的過程中,提供了豐富的功能,如版本控制、事務管理、合并沖突和數據庫遷移等。同時,JaVers的擴展性也非常好,開發者可以根據需要自定義和擴展框架的功能。
本文鏈接:http://www.www897cc.com/showinfo-26-47735-0.htmlJaVers:一個強大的Java版本控制框架
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com