postgresql - Spring Data R2dbc 审计无法按预期工作
问题描述
我的示例代码基于 Spring Boot 2.4.0-M2(spring-data-r2dbc 1.2.0-M2)、Java 11、Postgres。
在 Spring 博客和更改日志中,它声明 Spring Data R2dbc 获得了审计支持。
我启用了这样的审核。
@Configuration
@EnableR2dbcAuditing
class DataConfig {
@Bean
ReactiveAuditorAware<String> auditorAware() {
return () -> Mono.just("hantsy");
}
}
以及实体类和存储库。
interface PersonRepository extends R2dbcRepository<Person, UUID> {
}
@Data
@ToString
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table(value = "persons")
class Person {
@Id
@Column("id")
private UUID id;
@Column("first_name")
private String firstName;
@Column("last_name")
private String lastName;
@Column("created_at")
@CreatedDate
private LocalDateTime createdAt;
@Column("updated_at")
@LastModifiedDate
private LocalDateTime updatedAt;
@Column("version")
@Version
private Long version;
}
架构脚本。(不用担心 UUID,在 docker init 脚本中初始化的扩展)
CREATE TABLE IF NOT EXISTS persons (
-- id SERIAL PRIMARY KEY,
id UUID DEFAULT uuid_generate_v4(),
first_name VARCHAR(255),
last_name VARCHAR(255),
created_at TIMESTAMP ,
updated_at TIMESTAMP,
version INTEGER,
PRIMARY KEY (id)
);
当我在中添加以下代码片段ApplicationRunner
来体验审计时,没有一个@createdDate
和@lastModifiedDate
被填充。
persons
.save(
Person.builder()
.firstName("hantsy")
.lastName("bai")
.build()
)
.log()
.map(person -> {
person.setFirstName("new Hantsy");
return person;
})
.flatMap(persons::save)
.log()
.then()
.thenMany(persons.findAll())
.subscribe(
data -> log.info("saved data: {}", data),
err -> log.error("err: {}", err)
);
控制台打印:
2020-09-07 22:12:30.734 INFO 8800 --- [actor-tcp-nio-2] reactor.Mono.UsingWhen.1 : onNext(Person(id=8814e87c-c6d3-4dca-a095-fb5f41696b49, firstName=hantsy, lastName=bai, createdAt=null, updatedAt=null, version=0))
2020-09-07 22:12:30.779 INFO 8800 --- [actor-tcp-nio-2] reactor.Mono.UsingWhen.1 : onComplete()
2020-09-07 22:12:30.801 INFO 8800 --- [actor-tcp-nio-2] reactor.Mono.FlatMap.2 : | onNext(Person(id=8814e87c-c6d3-4dca-a095-fb5f41696b49, firstName=new Hantsy, lastName=bai, createdAt=null, updatedAt=null, version=1))
2020-09-07 22:12:30.801 INFO 8800 --- [actor-tcp-nio-2] reactor.Mono.FlatMap.2 : | onComplete()
2020-09-07 22:12:30.823 INFO 8800 --- [actor-tcp-nio-2] com.example.demo.DemoApplication : saved data: Person(id=981741c3-4468-474d-9e92-b4d396f004d9, firstName=hantsy, lastName=bai, createdAt=null, updatedAt=null, version=0)
2020-09-07 22:12:30.824 INFO 8800 --- [actor-tcp-nio-2] com.example.demo.DemoApplication : saved data: Person(id=8814e87c-c6d3-4dca-a095-fb5f41696b49, firstName=new Hantsy, lastName=bai, createdAt=null, updatedAt=null, version=1)
更新:为 r2dbc 审计创建了另一个简单的示例(基于 H2)以重现它,测试代码有效,但应用程序仍然存在问题。不确定我的原始示例(基于 Postgres,并使用 Pg 特定的 JSON、Enum 等)是否需要其他配置,应用程序和测试代码都没有按预期工作。
更新:在 Github 问题中报告了一个相关问题,请参阅问题#451。更新了我的示例以确保在 1.2.0 snapshot20200910 版本中应用了修复。我认为下一个版本(1.2.0-RC1)将包括修复。
更新:我的示例更新到 Spring Boot 2.4.0-M3,错误已修复。
解决方案
推荐阅读
- python - 将特定键添加到“模板”
- signalr - 如何注册 Webhook?
- php - SQL和PHP中结果之间的utf8_encode区别
- vb.net - 保存图片框中的图像
- javascript - Next.js 应用程序使用 minikube 在本地机器上的 docker 容器中构建,但不构建在使用谷歌云 kubernetes 设置的登台上
- c# - 在 Consul 上注册服务_意外响应
- php - 如何从每个类别中获取 2 个产品
- python - 如何使用 python docx 在 Word 中自定义编号样式?
- css - 有没有办法在不知道父类名的情况下对父悬停做出反应?
- xml - 我需要在 RTF 布局中如下