Как сделать метод хранилища данных REST асинхронным - PullRequest
0 голосов
/ 14 ноября 2018

Можно ли сделать хранилище доступным как ресурс отдыха с помощью аннотации @RepositoryRestResource 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);
}

1 Ответ

0 голосов
/ 29 ноября 2018

Единственный способ, который я нашел, - это придерживаться Spring Data JPA и писать свои собственные контроллеры HATEOAS, возвращающие CompletableFutrues, которые вызывают службы, которые собирают ресурсы HATEAOS из значений, возвращаемых репозиторием JPA.Тогда вызовы контроллера в сервис и сервис репозитория JPA могут быть асинхронными с использованием исполнителя пула потоков или параллельного исполнителя и т. Д.

...