当前位置:首页 > 科技  > 软件

JaVers:一个强大的Java版本控制框架

来源: 责编: 时间:2023-12-17 15:03:53 357观看
导读JaVers:一个强大的Java版本控制框架引言JaVers是一个开源的Java版本控制框架,旨在帮助开发者更轻松地管理和跟踪应用程序中的对象版本。它提供了一种简单且强大的方式来处理对象的创建、修改和删除,以及版本控制和历史记

JaVers:一个强大的Java版本控制框架

引言

JaVers是一个开源的Java版本控制框架,旨在帮助开发者更轻松地管理和跟踪应用程序中的对象版本。它提供了一种简单且强大的方式来处理对象的创建、修改和删除,以及版本控制和历史记录。JaVers适用于各种应用程序,包括但不限于Web应用程序、桌面应用程序和移动应用程序。J6X28资讯网——每日最新资讯28at.com

JaVers使用场景

  • 版本控制:JaVers可以帮助开发者对应用程序中的对象进行版本控制,以便更好地跟踪和管理对象的修改历史。
  • 事务管理:JaVers提供了一个简单的事务管理API,可以帮助开发者在事务中执行操作并处理异常。
  • 合并冲突:当多个开发者同时对同一对象进行修改时,JaVers可以帮助解决合并冲突,确保数据的一致性。
  • 数据库迁移:使用JaVers,开发者可以轻松地将对象从旧版本迁移到新版本,而无需手动处理复杂的数据库迁移过程。

JaVers优缺点

  • 优点:
  1. 简单易用:JaVers框架简单易用,学习曲线平缓,开发者可以快速上手。
  2. 强大功能:JaVers提供了丰富的功能,如版本控制、事务管理、合并冲突和数据库迁移等。
  3. 灵活扩展:JaVers框架具有良好的扩展性,开发者可以根据需要自定义和扩展框架的功能。
  4. 社区活跃:JaVers拥有一个活跃的开源社区,可以为开发者提供支持和帮助。
  • 缺点:
  1. 技术门槛高:JaVers框架相对较复杂,需要一定的学习成本。对于初学者来说,可能需要花费较长时间来理解和掌握框架的使用。
  2. 对数据库性能的影响:JaVers在进行版本控制时需要存储大量的历史数据,这可能会对数据库性能产生一定的影响。在处理大量数据时,需要注意性能优化。
  3. 可能产生大量的数据冗余:由于JaVers需要保存对象的完整历史记录,因此可能会产生大量的数据冗余。对于一些不需要长时间保留历史记录的应用场景,使用JaVers可能会浪费存储资源。

JaVers示例代码

下面是两个个简单的JaVers示例代码,展示了如何使用JaVers实现数据比对以及对对象进行版本控制:J6X28资讯网——每日最新资讯28at.com

首先,需要在项目中引入JaVers的相关依赖,如果需要对结果持久化,还需要额外引入对应的依赖:J6X28资讯网——每日最新资讯28at.com

<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>
  • Compare

通过JaVers我们可以实现两个值对象的比较,通过下面的示例可以看到效果:J6X28资讯网——每日最新资讯28at.com

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可以帮助开发者完美解决了这类问题。J6X28资讯网——每日最新资讯28at.com

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

通过Commit我们可以实现对对象进行版本控制,通过下面的示例可以看到效果:J6X28资讯网——每日最新资讯28at.com

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对对象进行版本控制,并可以获取到对象历史数据。在实体变化时记录历史版本、变更过程以及变化明细。J6X28资讯网——每日最新资讯28at.com

===========================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提供的两种查询方式,通过它们可以获取到实体的历史版本。J6X28资讯网——每日最新资讯28at.com

Snapshot是JaVers提供的一种查询方式,通过它可以获取到实体的历史版本。J6X28资讯网——每日最新资讯28at.com

JaVers还提供了JQL查询语言,可以帮助开发者实现对数据库的各种查询,比如基于变化的属性、提交人、时间等等。J6X28资讯网——每日最新资讯28at.com

JaVers持久化

JaVers提供了两种持久化方式,一种是内存持久化,另一种是数据库持久J6X28资讯网——每日最新资讯28at.com

目前可以支持的数据库有:J6X28资讯网——每日最新资讯28at.com

  • H2
  • MySQL
  • PostgreSQL
  • Oracle
  • SQL Server
  • MongoDB

在上面的例子当中,你可以通过配置Repository来实现变更过程的持久化,例如使用Mysql数据库,可以配置如下:J6X28资讯网——每日最新资讯28at.com

JaversRepository javersRepository = SqlRepositoryBuilder.sqlRepository()        .withConnectionProvider(()-> getConnection())        .withDialect(DialectName.MYSQL)        .build();Javers javers = JaversBuilder.javers()        .registerJaversRepository(javersRepository)        .build();

这样我们通过JQL查询就可以按需获取更多的历史数据了。J6X28资讯网——每日最新资讯28at.com

结束语

Javers在做数据对比以及数据变更追踪的过程中,提供了丰富的功能,如版本控制、事务管理、合并冲突和数据库迁移等。同时,JaVers的扩展性也非常好,开发者可以根据需要自定义和扩展框架的功能。J6X28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-47735-0.htmlJaVers:一个强大的Java版本控制框架

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 写作 0.1 秒,画图 2.6 秒,宁畅服务器就是这么丝滑

下一篇: 利用Python的元类自己动手写一个简单的ORM

标签:
  • 热门焦点
  • Redmi Buds 4开箱简评:才199还有降噪 可以无脑入

    在上个月举办的Redmi Note11T Pro系列新机发布会上,除了两款手机新品之外,Redmi还带来了两款TWS真无线蓝牙耳机产品,Redmi Buds 4和Redmi Buds 4 Pro,此前我们在Redmi Note11T
  • 2023年Q2用户偏好榜:12+256G版本成新主流

    3月份的性能榜、性价比榜和好评榜之后,就要轮到2023年的第二季度偏好榜了,上半年的新机潮已经过去,最明显的肯定就是大内存和存储的机型了,另外部分中端机也取消了屏幕塑料支架
  • 6月iOS设备性能榜:M2稳居榜首 A系列只能等一手3nm来救

    没有新品发布,自然iOS设备性能榜的上榜设备就没有什么更替,仅仅只有跑分变化而产生的排名变动,毕竟苹果新品的发布节奏就是这样的,一年下来也就几个移动端新品,不会像安卓厂商,一
  • 5月iOS设备好评榜:iPhone 14仅排第43?

    来到新的一月,安兔兔的各个榜单又重新汇总了数据,像安卓阵营的榜单都有着比较大的变动,不过iOS由于设备的更新换代并没有那么快,所以相对来说变化并不大,特别是iOS好评榜,老款设
  • 如何通过Python线程池实现异步编程?

    线程池的概念和基本原理线程池是一种并发处理机制,它可以在程序启动时创建一组线程,并将它们置于等待任务的状态。当任务到达时,线程池中的某个线程会被唤醒并执行任务,执行完任
  • .NET 程序的 GDI 句柄泄露的再反思

    一、背景1. 讲故事上个月我写过一篇 如何洞察 C# 程序的 GDI 句柄泄露 文章,当时用的是 GDIView + WinDbg 把问题搞定,前者用来定位泄露资源,后者用来定位泄露代码,后面有朋友反
  • 慕岩炮轰抖音,百合网今何在?

    来源:价值研究所 作者:Hernanderz&ldquo;难道就因为自己的一个产品牛逼了,从客服到总裁,都不愿意正视自己产品和运营上的问题,选择逃避了吗?&rdquo;这一番话,出自百合网联合创
  • 消息称小米汽车开始筛选交付中心:需至少120个车位

    IT之家 7 月 7 日消息,日前,有微博简介为“汽车行业从业者、长三角一体化拥护者”的微博用户 @长三角行健者 发文表示,据经销商集团反馈,小米汽车目前
  • 联想小新Pad Pro 12.6将要推出,搭载高通骁龙 870 处理器

    联想小新Pad Pro 12.6将于秋季新品会上推出,官方按照惯例直接在发布会前给出了机型的所有参数。联想小新 Pad Pro 12.6 将搭载高通骁龙 870 处理器,重量为 5
Top