JaVers

一、JaVers简介

  • JaVers是一个审核日志框架,可帮助跟踪应用程序中实体的更改。

  • Javers会使用四张表来记录数据的变更

    1.jv_snapshot

    主要用来存储对象的每次变更操作以及变更的属性值。

    2.jv_global_id

    存储每次变更的id

    3.jv_commit

    存储每次变更的时间、变更人

    (支持自动从SpringSecurity获取auditor)

    4.jv_commit_property

    用来存储额外的信息,比如存储了用户id,顺带存储一下用户名等

这四张表可以指定创建的数据库位置,但是无法进行其它的定制化

二、javers使用

引入依赖

<!--JaVers-->
<dependency>
    <groupId>org.javers</groupId>
    <artifactId>javers-spring-boot-starter-sql</artifactId>
    <version>6.8.0</version>
</dependency>

指定日志表的创建位置(默认创建在当前服务所指定的数据库中)

@Component
public class JaverSqlConncetConfig  extends JpaHibernateConnectionProvider {
    final Connection dbConnection;

    {
        try {
            dbConnection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/my_data?characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2b8&rewriteBatchedStatements=true", "root", "123456");
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    @Override
    public Connection getConnection() {
        return dbConnection;
    }
}

结合SpringSecurity可以记录下数据变更的操作人员

@Component
public class CustomAuthProvider implements AuthorProvider {
    @Override
    public String provide() {
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
        if (Objects.isNull(authentication)){
            return "unauthenticated";
        }
        SecurityUserInfo userInfo = (SecurityUserInfo) authentication.getPrincipal();
        return userInfo.getNickName();
    }
}

记录操作人员的额外一些信息

@Component
public class CustomCommitPropertiesProvider implements CommitPropertiesProvider {
    @Override
    public Map<String, String> provide() {
        Map<String, String> map = new HashMap<>();
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
        if (Objects.isNull(authentication)){
            return null;
        }
        SecurityUserInfo userInfo = (SecurityUserInfo) authentication.getPrincipal();
        map.put(userInfo.getRealName(),userInfo.getPhone());
        return map;
    }
}

注解的使用

@Id

该注解加在Entity实体的属性上,

@Id表明了当前属性是唯一标识,javers通过该唯一标识判断是否为同一个对象

@DiffIgnore

该注解加在Entity实体的属性上,

在entity中忽略指定字段的变更

@JaverSpringDataAuditable

该注解加载实体类对应的Repository上,

通过Repository中的方法变更数据,变更记录就会保存在javers创建的表格中

@JaversAuditabe

该注解加在Repository的中的方法上

通过该方法变更数据,变更记录就会保存在javers创建的表格中

三、javers总结

javers可以方便的记录数据变更的时间和操作人员信息

但是数据记录在javers指定的表格中,表格无法进行额外的定制化

而且javers只能记录通过Repository进行数据变更记录,当前项目中使用的JpaQueryFactory变更的记录javers无法识别

网上关于javers的使用用例也比较少

所以javers用在某一个服务中记录某些特定数据的变更还是比较方便的

但是整合出一个服务出来记录所有数据的变更可能不是很好用

行额外的定制化

而且javers只能记录通过Repository进行数据变更记录,当前项目中使用的JpaQueryFactory变更的记录javers无法识别

网上关于javers的使用用例也比较少

所以javers用在某一个服务中记录某些特定数据的变更还是比较方便的

但是整合出一个服务出来记录所有数据的变更可能不是很好用

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Spring Boot中整合Javers,你可以按照以下步骤进行操作: 1. 添加依赖:在`pom.xml`文件中添加Javers的依赖。 ```xml <dependency> <groupId>org.javers</groupId> <artifactId>javers-spring-boot-starter-sql</artifactId> <version>5.5.2</version> </dependency> ``` 2. 配置数据库:在`application.properties`或`application.yml`文件中配置数据库连接信息。 ```properties spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase spring.datasource.username=username spring.datasource.password=password spring.datasource.driver-class-name=com.mysql.jdbc.Driver ``` 3. 创建实体类:创建需要进行版本控制的实体类,并使用Javers注解进行标记。 ```java @Entity @DiffIgnore // 标记该字段忽略版本控制 public class Person { @Id private Long id; @DiffInclude // 标记该字段包含版本控制 private String name; // getters and setters } ``` 4. 使用Javers:在需要使用Javers的地方注入`Javers`实例,并进行相应的操作。 ```java @Service public class PersonService { private final Javers javers; public PersonService(Javers javers) { this.javers = javers; } public void savePerson(Person person) { javers.commit("user", person); } public List<Change> getPersonChanges(Long personId) { QueryBuilder jqlQuery = QueryBuilder.byInstanceId(personId, Person.class) .withNewObjectChanges(true) .limit(10); return javers.findChanges(jqlQuery.build()); } // 其他操作 } ``` 在上述示例中,我们在`PersonService`服务类中注入了`Javers`实例,并使用它进行保存和查询实体类的版本变更。 这样,你就可以在Spring Boot应用程序中使用Javers进行版本控制了。根据你的需求,你可以进一步自定义Javers的配置,如数据库方言、持久化方式等。 请记得在Spring Boot应用程序中配置数据库连接信息,并根据自己的实体类进行相应的注解标记。更多详细信息和配置选项,请参考Javers官方文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值