【问题标题】:How to make Data REST repository method Asynchronous如何使数据 REST 存储库方法异步
【发布时间】:2018-11-14 07:08:00
【问题描述】:

是否可以通过@RepositoryRestResource annoation Async 将存储库公开为休息资源?或者换句话说,我希望保存、查找等方法是异步的,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);
}

【问题讨论】:

    标签: java spring-boot spring-data-jpa spring-data spring-data-rest


    【解决方案1】:

    我发现的唯一方法是坚持使用 Spring Data JPA 并编写您自己的 HATEOAS 控制器返回 CompletableFutrues,该控制器调用从 JPA 存储库返回的值中组装 HATEAOS 资源的服务。然后可以使用线程池执行器或并发执行器等异步调用 Service 和 Service 到 JPA 存储库的控制器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-17
      • 2016-01-23
      • 2016-05-20
      • 1970-01-01
      • 2011-12-23
      • 1970-01-01
      • 2021-12-13
      相关资源
      最近更新 更多