Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 异步RESTAPI生成警告_Spring_Spring Mvc_Spring Boot_Jhipster_Spring Async - Fatal编程技术网

Spring 异步RESTAPI生成警告

Spring 异步RESTAPI生成警告,spring,spring-mvc,spring-boot,jhipster,spring-async,Spring,Spring Mvc,Spring Boot,Jhipster,Spring Async,我正在使用Spring启动应用程序。我有一个返回Callable的rest控制器 @GetMapping("/fb-roles") @Timed public Callable<List<FbRole>> getAllFbRoles() { log.debug("REST request to get all FbRoles"); return (() -> { return fbRoleRepository.findAll(); }); } }

我正在使用Spring启动应用程序。我有一个返回Callable的rest控制器

@GetMapping("/fb-roles")
@Timed
public Callable<List<FbRole>> getAllFbRoles() {
    log.debug("REST request to get all FbRoles");
    return (() -> { return fbRoleRepository.findAll(); });
}
}

2018-09-19 00:43:58.434警告10104---[XNIO-2任务-28]o.s.w.c.request.async.WebAsyncManager: !!! 需要执行器来处理java.util.concurrent.Callable返回值。 请在MVC配置中的“异步支持”下配置TaskExecutor。 当前使用的SimpleAsyncTaskExecutor不适合在负载下使用

但是,当访问api服务器时,您的警告“请在MVC配置中的“异步支持”下配置TaskExecutor。当前使用的SimpleAsyncTaskExecutor在负载下不适用”会产生以下警告

我想知道你是否使用spring mvc

对于MVC,以下几个链接可能会有所帮助:


给出了警告和可调用的
方法

Spring似乎无法识别您刚刚设置的
Executor
bean 在您的配置类中

您可能需要注释您的方法并指定执行器bean名称,因此

@GetMapping("/fb-roles")
@Timed
@Async("taskExecutor")
public Callable<List<FbRole>> getAllFbRoles() {
    log.debug("REST request to get all FbRoles");
    return (() -> { return fbRoleRepository.findAll(); });
}
@GetMapping(“/fb角色”)
@定时
@异步(“任务执行器”)
公共可调用的getAllFbRoles(){
debug(“获取所有FBRole的REST请求”);
return(()->{return fbRoleRepository.findAll();});
}
希望这有帮助


可以在这里找到指南:

Spring配置在这方面有点混乱,因为它需要对MVC异步支持进行单独的配置,即使用返回可调用的
的控制器处理程序方法,以及使用
@Async
注释的任何Springbean方法。要正确配置这两种配置,您可以应用如下配置,请记住,
AsyncTaskExecutor
config可能需要修改:

@Configuration
@EnableAsync
public class AsyncConfig  implements AsyncConfigurer {

    @Bean
    protected WebMvcConfigurer webMvcConfigurer() {
        return new WebMvcConfigurerAdapter() {
            @Override
            public void configureAsyncSupport(AsyncSupportConfigurer configurer) {
                configurer.setTaskExecutor(getTaskExecutor());
            }
        };
    }

    @Bean
    protected ConcurrentTaskExecutor getTaskExecutor() {
        return new ConcurrentTaskExecutor(Executors.newFixedThreadPool(5));
    }
}

另一方面,您可能想简单地用
@Async
注释控制器处理程序方法。这只会产生预期的效果-释放web服务器线程-启动并忘记操作(此观察基于SpringBoot2.1.2,可能他们将来会解决此问题)。如果您想利用Servlet 3.0异步处理的强大功能,您确实必须使用
可调用项
,并使用
WebMVCConfiguer

对它们进行配置,我已经组合了mvc配置(xml+注释),而对于我来说,以下配置有助于修复该警告:

mvc-servlet.xml:

<mvc:annotation-driven> 
  <mvc:async-support default-timeout="30000" task-executor="taskExecutor"
</mvc:annotation-driven>

我正在使用JHipster generatori配置它。但是现在api返回时没有任何结果。如果您尝试删除
@Timed
注释,我认为将两者结合起来会迫使api在异步结果出现之前停止更新我,如果仍然不起作用,请尝试先删除Callable和lambda表达式,然后直接返回列表。这样我们就可以知道异步是否真的工作了,希望这个帮助也可以这样尝试:
@GetMapping(/fb roles”)@Async(“taskExecutor”)public List getAllFbRoles(){log.debug(“REST request to get all FbRoles”);return fbRoleRepository.findAll();}
@ArifRabbani有错误消息吗?还是只返回空结果?您确定存储库实现正确且数据存在吗?只需返回null即可。我查过存储库了,没问题。数据也存在。当我将其用作同步时,数据将成功返回。这将创建2个实例ConcurrentTaskExecutor
<mvc:annotation-driven> 
  <mvc:async-support default-timeout="30000" task-executor="taskExecutor"
</mvc:annotation-driven>
@Configuration
@EnableAsync
public class AsyncConfig implements AsyncConfigurer {
  @Bean
  public AsyncTaskExecutor taskExecutor() {
    return new ConcurrentTaskExecutor(Executors.newCachedThreadPool());
  }
}