小编ale*_*leh的帖子

使用 Spring Security 和 Auditing 时如何提高 JPA 批量插入的性能?

由于@EnableJpaAuditing注释,AuditorAware正在调用自定义类getCurrentAuditor()以填充审核字段lastCreatedBylastModifiedBy

@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()每个实体/行。

在拥有审计数据的同时实现高性能批量插入的最佳方法是什么?就我而言,我正在处理来自同一用户的批量导入,因此所有记录都将具有相同的审核值。

java audit spring spring-security

5
推荐指数
1
解决办法
422
查看次数

Flux未在Spring 5反应堆中订购

我可能错过了一些东西,但我无法弄清楚它是什么.

以下代码什么都不做:

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()应该在第一种情况下执行操作,就像它在最后一样?

谢谢!

java reactive-programming project-reactor

4
推荐指数
1
解决办法
1103
查看次数

使用 JdbcTemplate 将关系 DB 映射到每个包含一个 List&lt;Object&gt; 的 List&lt;Object&gt;

我正在使用带有 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 ..

非常感谢 !

java mysql spring jdbc jdbctemplate

1
推荐指数
1
解决办法
2065
查看次数