我在Spring boot中创建了一个类来建立一个全局的javers对象,可供所有类使用。这是我的代码。
@Component
public class JaversInstance {
public static final Javers javers;
static
{
ConnectionProvider connectionProvider = new ConnectionProvider() {
@Override
public Connection getConnection() throws SQLException {
String url = "any_url";
Properties props = new Properties();
props.setProperty("user", "test");
props.setProperty("password", "test");
DriverManager.getConnection(url, props);
System.out.println("CONNECTION PROVIDER invoked");
return DriverManager.getConnection(url, props);
}
};
JaversSqlRepository sqlRepository = SqlRepositoryBuilder
.sqlRepository()
.withConnectionProvider(connectionProvider)
.withDialect(DialectName.MYSQL).build();
System.out.println("JAVERS instance creation");
javers = JaversBuilder.javers().registerJaversRepository(sqlRepository).build();
}
private JaversInstance() {
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
JAVERS instance creation
CONNECTION PROVIDER invoked
CONNECTION PROVIDER invoked
CONNECTION …Run Code Online (Sandbox Code Playgroud) 我正在尝试为我的 Spring Boot 应用程序实现审计层。到目前为止,我尝试了两种方法。
1) 创建了 1 个审计表,其中包含字段 user_name、table_name、column_name、old_value、new_value、uuid、event_type。
每当保存任何更改时,填充审核实体并保存它。
快的
由于只有 1 个审核表,易于管理
有时它涉及太多从业务实体到审计实体的映射
必须从数据库获取旧值以填充审计实体
2)使用javers进行审计
自动创建和更新审计实体
需要管理的表数量更少
不需要旧值检索
处理具有 20 列(字段)的表(实体)中的 10 行,
使用方法 1 所花费的时间:24328 ms => 24 s
使用方法 2 所花费的时间:311292 ms => 311 s(近 12 倍)
3)没有使用Hibernate envers,因为创建的表数量会很高
考虑到上述优点和缺点,有人可以提出更好的审计想法吗?我们的目标是,
需要管理的表数量更少
更少的响应时间
模块化审计层,自动化程度高于手动程度
每个表中有 10 到 25 列。