如何在集成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
相关产品推荐
相关产品推荐

