如何使数据REST存储库方法异步



是否可以通过@RepositoryRestResource公告异步将存储库公开为rest资源?或者换句话说,我希望save、find等方法是异步的,ResponseEntityController也将它们作为异步调用处理?

如果我只是将存储库标记为同步,我的POST请求将失败,因为ResponseEntityController上的此方法不会处理对存储库的异步持久调用

private ResponseEntity<ResourceSupport> createAndReturn(Object domainObject, RepositoryInvoker invoker,
        PersistentEntityResourceAssembler assembler, boolean returnBody) {
    publisher.publishEvent(new BeforeCreateEvent(domainObject));
    Object savedObject = invoker.invokeSave(domainObject);
    publisher.publishEvent(new AfterCreateEvent(savedObject));
    Optional<PersistentEntityResource> resource = Optional
            .ofNullable(returnBody ? assembler.toFullResource(savedObject) : null);
    HttpHeaders headers = headersPreparer.prepareHeaders(resource);
    addLocationHeader(headers, assembler, savedObject);
    return ControllerUtils.toResponseEntity(HttpStatus.CREATED, headers, resource);
}

这是我的仓库

@RepositoryRestResource(path = "companies", collectionResourceRel = "companies")
public interface CompanyRepository extends CrudRepository<Company, Long> {
    @Override
    @RestResource(exported = false)
    void delete(Company entity);
    @Override
    @RestResource(exported = false)
    void deleteById(Long id);
    @Override
    @RestResource(exported = false)
    void deleteAll();
    @Override
    @RestResource(exported = false)
    void deleteAll(Iterable<? extends Company> entities);
}

我找到的唯一方法是坚持Spring Data JPA,并编写自己的HATEOS控制器,返回CompletableFutrues,调用根据JPA存储库返回的值组装HATEOS资源的服务。控制器到服务和服务到JPA存储库调用可以使用线程池执行器或并发执行器等异步。

最新更新