由于@EnableJpaAuditing注释,AuditorAware正在调用自定义类getCurrentAuditor()以填充审核字段lastCreatedBy和lastModifiedBy。
@Component
@RequiredArgsConstructor
public class AuditorAwareImpl implements AuditorAware<User> {
private final UserRepository userRepository;
@Override
public Optional<User> getCurrentAuditor() {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
return Optional.of(authentication)
.map(Authentication::getName)
.flatMap(userRepository::findByUsername);
}
}
Run Code Online (Sandbox Code Playgroud)
此类需要调用存储库才能获取该信息(从安全上下文中提取用户名/主体并获取用户)。
这在一次保存一个实体的情况下工作得很好,但是当使用 进行批量插入时saveAll(),该操作会变成一个循环以调用getCurrentAuditor()每个实体/行。
在拥有审计数据的同时实现高性能批量插入的最佳方法是什么?就我而言,我正在处理来自同一用户的批量导入,因此所有记录都将具有相同的审核值。
我可能错过了一些东西,但我无法弄清楚它是什么.
以下代码什么都不做:
webClient.get().uri("/some/path/here").retrieve()
.bodyToMono(GetLocationsResponse.class)
.doOnNext(System.out::println)
.subscribe();
Run Code Online (Sandbox Code Playgroud)
如果我试图阻止呼叫它工作正常:
webClient.get().uri("/some/path/here").retrieve()
.bodyToMono(GetLocationsResponse.class)
.doOnNext(System.out::println)
.block();
Run Code Online (Sandbox Code Playgroud)
奇怪的是,如果我"手动"创建一个Flux(即不是来自spring webClient),这很好用:
Flux.just("1", "2", "3")
.filter(s -> !s.equals("2"))
.doOnNext(System.out::println)
.subscribe();
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下我做错了什么吗?是不是.subscribe()应该在第一种情况下执行操作,就像它在最后一样?
谢谢!
我正在使用带有 JdbcTemplate 的 Spring MVC 和 MySQL 数据库。
假设我有以下 2 个表:
表_学校
ID NAME
Run Code Online (Sandbox Code Playgroud)
表_学生
ID NAME ADDRESS SCHOOL_ID
Run Code Online (Sandbox Code Playgroud)
我有一个 School POJO,它具有以下类变量:
int id, String name, List<Student> students
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以在一个查询中使用 JdbcTemplate 检索每个 School 对象的列表,其中包含相应的 Student 对象列表?我知道使用 Hibernate 可以轻松实现这一点,但我想使用 JdbcTemplate ..
非常感谢 !