当前位置: 首页 > 知识库问答 >
问题:

@Async在spring boot应用程序中给我错误

姬康平
2023-03-14
@EnableAsync(proxyTargetClass = true)
@EnableDiscoveryClient
@SpringBootApplication
public class ProductApplication {

    public static void main(final String[] args) {
        SpringApplication.run(ProductApplication.class, args);
    }

    @Bean("threadPoolTaskExecutor")
    public TaskExecutor getAsyncExecutor() {
        final ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(20);
        executor.setMaxPoolSize(1000);
        executor.setWaitForTasksToCompleteOnShutdown(true);
        executor.setThreadNamePrefix("Async-");
        return executor;
    }

}
@Component
public class ProductServiceImpl implements ProductService {

    @Autowired
    ProductRepository productRepository;

    @Autowired
    private ProductHandler productHandler;

    @Async
    @Override
    public List<String> getAllCategories() {
        final List<String> finalList = new ArrayList<>();
        return finalList;
    }

}
@RestController
public class ProductResource {

    @Autowired
    private ProductServiceImpl productServiceImpl;

    @GetMapping("/categories")
    public ResponseEntity<List<String>> getAllCategories() {
        return new ResponseEntity<>(this.productServiceImpl.getAllCategories(), HttpStatus.OK);
    }
}

考虑注入bean作为其接口之一,或者通过在@enableAsync和/或@enablecaching上设置ProxyTargetClass=true强制使用基于CGLIB的代理。

如果我尝试注释控制器,我得到的get请求的响应是空的。我尝试了每一件事,包括将ProxyTargetClass设置为true。

共有1个答案

宰父存
2023-03-14

只要使用@async注释,就必须熟悉在使用它的同时必须遵守的规则:

  • 方法必须是publiconly
  • 不能从同一类中的方法调用它(自调用)
  • 如果使用返回类型,则必须将其包装在future 中,例如。completablefuture

所以你得到:

CompletableFuture<List<String>> categories = this.productServiceImpl.getAllCategories();
 类似资料:
  • 我试图在SpringMVC中运行SpringBoot应用程序,在SpringMVCPOM中添加SpringBoot应用程序依赖项,并扫描SpringBoot包,但我面临以下问题

  • 我对@Async和Rest模板调用有问题;下面是我的主要应用程序类,带有一个任务执行器Bean和EnableAsync注释 这是我在Rest控制器中调用的带有异步注释的my测试服务: 此服务在rest模板上返回一个nullPointer;这是stacktrace 但是如果我删除@enableAsync和@Async,那么简单的Rest模板可以很好地工作。 当我传递HttpServlet请求时,Ec

  • 我在stackoverflow上发现了类似的问题,并试图用这种方式(LINK)解决这个问题,但在我的项目中没有起作用。谁能给我一些建议吗? pom.xml 应用属性

  • 我是kubernetes的新手,需要在openshift平台上使用k8s confimap将springboot应用程序的属性文件外部化。我已将属性文件保存在git repo中,作为“greeter.message=Spring Bootmyapplication.properties已在库伯内特斯上挂载为卷!”并使用“oc create confimap myconfig--from-file=

  • 我有Kafka Streams java应用程序启动并运行。我试图使用KSQL创建简单的查询,并使用Kafka流来实现复杂的解决方案。我希望将KSQL和Kafka流作为Java应用程序运行。 我打算通过https://github.com/confluentinc/ksql/blob/master/ksqldb-examples/src/main/java/io/confluent/ksql/em

  • 我已经为Postgresql启用了复制,并且正在使用PGPool进行负载平衡。 我在使用HikariCP甚至Apache DBCP连接到Postgres时遇到了问题。 在SpringBoot应用程序中有没有使用PGPool的方法? 请查找堆栈跟踪: 2018-08-10 10:20:19.124信息37879----[main]com.zaxxer.hikari.hikaridatasource: