【问题标题】:Why is Spring-Data-JPA Async not working?为什么 Spring-Data-JPA 异步不起作用?
【发布时间】:2016-01-24 07:36:01
【问题描述】:

我正在尝试使用 Spring Boot 和 Spring data JPA 创建一个非阻塞休息服务。

如何使用 Spring Data JPA @Async 支持异步保存实体。下面的代码对我不起作用,尽管其他选择似乎在同一个实体上工作。

我正在尝试在 JPA 存储库中执行此操作。这是完整的存储库:除了保存。这些方法运行良好,我可以测试它们

public interface LoanRepository extends JpaRepository<Loan,Long> {

@Query("select distinct loan from Loan loan left join fetch loan.collaterals left join fetch loan.partys")
@Async
CompletableFuture<List<Loan>> findAllWithEagerRelationships();

@Query("select loan from Loan loan left join fetch loan.collaterals left join fetch loan.partys where loan.id =:id")
@Async
CompletableFuture<Loan> findOneWithEagerRelationships(@Param("id") Long id);

@Async
void delete(Long id);

}

但是,当我尝试添加以下保存方法时:

    @Async
    <S extends CompletableFuture<Loan>> S save(Loan loan);

我收到一个明显的编译错误,上面写着"The method save(Loan) is ambiguous for the type LoanRepository"

我尝试将其更改为:

    @Async
    <S extends CompletableFuture<Loan>> S save(S loan);

但我在启动时遇到异常java.lang.UnsupportedOperationException: null,这是由于:

Caused by: java.lang.NullPointerException: null
at org.springframework.data.repository.query.QueryMethod.potentiallyUnwrapReturnTypeFor(QueryMethod.java:244)

关于异步支持的 Spring Data JPA 文档在 Save 部分中并不清楚。 Spring Data JPA Async Support

【问题讨论】:

    标签: asynchronous spring-data-jpa spring-orm


    【解决方案1】:

    您是否尝试只返回CompletableFuture?像这样的东西(未经测试):

    @Async
    <S extends Loan> CompletableFuture<S> save(S loan);
    

    您不能从JpaRepository 扩展,因为这将与它从CrudRepository 继承的相冲突。而是从Repository 扩展并从CrudRepositoryPagingAndSortingRepositoryJpaRepository 复制您需要的任何方法

    【讨论】:

      【解决方案2】:

      只是一个猜测:也许保存需要交易,而查询则不需要。试试@Transactional...

      【讨论】:

        【解决方案3】:

        我自己也遇到过这个问题,在尝试了一些变化之后,这似乎可行:

        @Async
        @Override
        <S extends Loan> CompletableFuture<S> save(S loan);
        

        【讨论】:

        • 这实际上是异步运行的吗?我认为 @Async 只有在返回 Futurevoid 时才有效。
        猜你喜欢
        • 1970-01-01
        • 2018-03-31
        • 1970-01-01
        • 2015-01-20
        • 2017-06-09
        • 2021-12-22
        • 2017-09-21
        • 1970-01-01
        • 2021-12-19
        相关资源
        最近更新 更多