You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在集成Spring Data JDBC的Spring Boot项目中配置JaVers

Spring Boot + Spring Data JDBC 整合 JaVers 配置方案

步骤1:排除默认自动配置

在启动类上排除JaVers默认适配JPA的自动配置类:

@SpringBootApplication(exclude = {
    JaversSqlAutoConfiguration.class,
    JaversSpringDataAutoConfiguration.class
})
public class YourApplication {
    public static void main(String[] args) {
        SpringApplication.run(YourApplication.class, args);
    }
}

步骤2:调整依赖配置

如果使用JaVers官方SQL启动器,需要排除JPA/Hibernate相关的依赖项,Maven配置示例:

<dependency>
    <groupId>org.javers</groupId>
    <artifactId>javers-spring-boot-starter-sql</artifactId>
    <version>7.3.5</version> <!-- 替换为最新稳定版本 -->
    <exclusions>
        <exclusion>
            <groupId>org.javers</groupId>
            <artifactId>javers-hibernate</artifactId>
        </exclusion>
    </exclusions>
</dependency>

步骤3:手动注册JaVers核心Bean

创建自定义配置类,基于Spring Data JDBC的数据源和事务管理器构造JaVers实例:

import org.javers.core.Javers;
import org.javers.core.JaversBuilder;
import org.javers.repository.sql.DialectName;
import org.javers.repository.sql.SqlRepositoryBuilder;
import org.javers.spring.auditable.aspect.SpringTransactionAspect;
import org.javers.spring.transaction.SpringConnectionProvider;
import org.javers.spring.transaction.SpringJdbcTransactionManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
import org.springframework.transaction.PlatformTransactionManager;

@Configuration
public class JaversConfig {

    private final DataSource dataSource;
    private final PlatformTransactionManager transactionManager;

    public JaversConfig(DataSource dataSource, PlatformTransactionManager transactionManager) {
        this.dataSource = dataSource;
        this.transactionManager = transactionManager;
    }

    @Bean
    public Javers javers() {
        return JaversBuilder.javers()
                // 配置SQL存储库
                .registerJaversRepository(SqlRepositoryBuilder.sqlRepository()
                        .withConnectionProvider(new SpringConnectionProvider(dataSource))
                        .withTransactionManager(new SpringJdbcTransactionManager(transactionManager))
                        // 替换为实际使用的数据库方言,可选值:MYSQL、POSTGRESQL、H2、ORACLE、SQL_SERVER等
                        .withDialect(DialectName.MYSQL)
                        .build())
                // 可根据需求添加自定义配置,比如忽略指定字段、自定义类型适配器等
                .build();
    }

    // 注册事务切面,支持自动审计
    @Bean
    public SpringTransactionAspect springTransactionAspect(Javers javers) {
        return new SpringTransactionAspect(javers);
    }
}

步骤4:开启实体自动审计

需要审计的Spring Data JDBC实体类添加@JaversSpringDataAuditable注解即可:

import org.javers.spring.annotation.JaversSpringDataAuditable;
import org.springframework.data.annotation.Id;
import org.springframework.data.relational.core.mapping.Table;

@Table("user")
@JaversSpringDataAuditable
public class User {
    @Id
    private Long id;
    private String username;
    private Integer age;
    // 省略getter、setter
}

注意事项

  • 首次启动时JaVers会自动在数据库中创建jv_commit、jv_commit_property、jv_global_id、jv_snapshot四张审计表,若数据库账号无建表权限,可提前手动执行JaVers官方对应方言的DDL语句
  • 实体类无需添加JPA相关注解,适配Spring Data JDBC的标准注解即可
  • 如果需要自定义审计逻辑,可通过JaVers的API手动提交变更记录,无需依赖自动切面

内容的提问来源于stack exchange,提问作者Vasyl Viazovykov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 17:12:03