当我尝试在Spring Data Repository方法上使用@Async时,我收到以下错误:
{"原因":null,"消息":" PersistentEntity不能为空!"}
好像它试图序列化CompletableFuture<>。
存储库代码:
@Query("SELECT p FROM Produto p where descricao LIKE CONCAT(UPPER(:like),'%')")
@Async
CompletableFuture<List<Produto>> findByLikeAsync(@Param("like") String like);
配置:
@SpringBootApplication
@EntityScan(basePackages = {"..."})
@EnableJpaRepositories(basePackages = {"..."})
@EnableAsync
@Configuration
public class Application implements AsyncConfigurer {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Override
public Executor getAsyncExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(7);
executor.setMaxPoolSize(42);
executor.setQueueCapacity(11);
executor.setThreadNamePrefix("MyExecutor-");
executor.initialize();
return executor;
}
@Override
public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
return new CustomAsyncExceptionHandler();
}
}
我尝试过使用Future&lt;&gt;而不是CompletableFuture&lt;&gt;,但它会抛出相同的错误。
任何想法?
感谢。
答案 0 :(得分:0)
假设您正在使用CrudRepository
,则存储库中的方法只能返回它们注册的类(或它们的集合)。在这种情况下,如果您已将存储库定义为:
public interface ProdutoRepository extends CrudRepository<Produto, Long>
您必须返回List<Produto>
。您可以创建一个调用此内容的@Service
,并在其中添加一个使用@Async
注释的公共方法。