Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.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
Java 使用Spring引导的异步服务_Java_Spring Boot_Jax Rs_Jersey 2.0_Sendasynchronousrequest - Fatal编程技术网

Java 使用Spring引导的异步服务

Java 使用Spring引导的异步服务,java,spring-boot,jax-rs,jersey-2.0,sendasynchronousrequest,Java,Spring Boot,Jax Rs,Jersey 2.0,Sendasynchronousrequest,我正在尝试使用springboot运行基本异步服务。 我在调用请求时遇到异常。我不知道为什么会这样,我使用了oracle网站和jersey网站上的所有说明和代码片段。这里有我遗漏的东西吗? 如果您需要更多信息,请询问我,我将相应地更新问题。多谢各位 org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.ws.rs.container.AsyncResponse]: Specified

我正在尝试使用springboot运行基本异步服务。
我在调用请求时遇到异常。我不知道为什么会这样,我使用了oracle网站和jersey网站上的所有说明和代码片段。这里有我遗漏的东西吗? 如果您需要更多信息,请询问我,我将相应地更新问题。多谢各位

org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.ws.rs.container.AsyncResponse]: Specified class is an interface
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:101)
at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.createAttribute(ModelAttributeMethodProcessor.java:137)
at org.springframework.web.servlet.mvc.method.annotation.ServletModelAttributeMethodProcessor.createAttribute(ServletModelAttributeMethodProcessor.java:80)
at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:106)
at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:78)
at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:162)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:129)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:775)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:705)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:967)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:858)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:843)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:85)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:217)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:673)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
pom中的依赖关系

    <dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>info.cukes</groupId>
        <artifactId>cucumber-junit</artifactId>
        <version>1.1.7</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.bundles.repackaged</groupId>
        <artifactId>jersey-guava</artifactId>
        <version>2.22.1</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-common</artifactId>
        <version>2.22.1</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-client</artifactId>
        <version>2.22.1</version>
    </dependency>
    <dependency>
        <groupId>info.cukes</groupId>
        <artifactId>cucumber-picocontainer</artifactId>
        <version>1.1.7</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>info.cukes</groupId>
        <artifactId>cucumber-spring</artifactId>
        <version>1.2.4</version>
    </dependency>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-chrome-driver</artifactId>
        <version>2.42.2</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>commons-dbcp</groupId>
        <artifactId>commons-dbcp</artifactId>
        <version>1.4</version>
    </dependency>
    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>9.3-1100-jdbc41</version>
    </dependency>
    <dependency>
        <groupId>org.dbunit</groupId>
        <artifactId>dbunit</artifactId>
        <version>2.4.8</version>
        <type>jar</type>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>com.github.springtestdbunit</groupId>
        <artifactId>spring-test-dbunit</artifactId>
        <version>1.1.0</version>
    </dependency>
    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-core-asl</artifactId>
        <version>1.9.13</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>javax.ws.rs</groupId>
        <artifactId>javax.ws.rs-api</artifactId>
        <version>2.0</version>
    </dependency>

SpringBoot默认情况下使用SpringMVC提供服务(您已经配置好使用),但是您正试图混用Jax-RS,因为这种混用,我只想回答如何用SpringMVC的方式来实现这一点

我是凭记忆写这封信的,所以如果我手指发胖,请告诉我

您的配置类应具有@enablesync

@SpringBootApplication
@EnableAsync
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
} 
这是你的控制器

@RestController
public class MyController {
    @Autowired
    MyService myService;

    //DeferredResult does not send a response until .setResult or setErrorResult is called
    public DeferredResult<String> myService() {
        DeferredResult<String> result = new DeferredResult<>();
        //I'm using Java8 lambda for brevity use an anonymous class instead if using less than java8
        myService.asyncLongOperation((operationResult) -> result.setResult(operationResult))
        return result;
    }
}
@RestController
公共类MyController{
@自动连线
我的服务我的服务;
//在调用.setResult或setErrorResult之前,DeferredResult不会发送响应
公共延迟结果myService(){
DeferredResult=新的DeferredResult();
//为了简洁起见,我使用Java8 lambda,如果使用少于Java8,则使用匿名类
myService.asyncLongOperation((operationResult)->result.setResult(operationResult))
返回结果;
}
}
我认为@Async需要在另一个类中才能正常工作,但请随意挑战我的假设,并将此方法保留在MyController中

@Service
public class MyService {
    @Async //This annotation replaces building your own thread
    public void asyncLongOperation(Consumer<String> consumer) {
        String pie = calculatePieWhichIsShorterThanPi();
        consumer.accept(pie);
    }
}
@服务
公共类MyService{
@Async//此注释替换构建自己的线程
公共void操作(使用者){
字符串pie=CalculatePie,其长度短于Pi();
消费者接受(馅饼);
}
}
参考文献 异步-


DeferredResult-

Spring Boot默认使用SpringMVC提供服务(您已配置使用),但由于这种混淆,您试图混用Jax RS,我将回答如何用Spring MVC的方式实现这一点

我是凭记忆写这封信的,所以如果我手指发胖,请告诉我

您的配置类应具有@enablesync

@SpringBootApplication
@EnableAsync
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
} 
这是你的控制器

@RestController
public class MyController {
    @Autowired
    MyService myService;

    //DeferredResult does not send a response until .setResult or setErrorResult is called
    public DeferredResult<String> myService() {
        DeferredResult<String> result = new DeferredResult<>();
        //I'm using Java8 lambda for brevity use an anonymous class instead if using less than java8
        myService.asyncLongOperation((operationResult) -> result.setResult(operationResult))
        return result;
    }
}
@RestController
公共类MyController{
@自动连线
我的服务我的服务;
//在调用.setResult或setErrorResult之前,DeferredResult不会发送响应
公共延迟结果myService(){
DeferredResult=新的DeferredResult();
//为了简洁起见,我使用Java8 lambda,如果使用少于Java8,则使用匿名类
myService.asyncLongOperation((operationResult)->result.setResult(operationResult))
返回结果;
}
}
我认为@Async需要在另一个类中才能正常工作,但请随意挑战我的假设,并将此方法保留在MyController中

@Service
public class MyService {
    @Async //This annotation replaces building your own thread
    public void asyncLongOperation(Consumer<String> consumer) {
        String pie = calculatePieWhichIsShorterThanPi();
        consumer.accept(pie);
    }
}
@服务
公共类MyService{
@Async//此注释替换构建自己的线程
公共void操作(使用者){
字符串pie=CalculatePie,其长度短于Pi();
消费者接受(馅饼);
}
}
参考文献 异步-


延迟结果-

您说过要使用JAX-RS,但您有一个带有Spring注释的Spring RestController。您必须选择是否要对REST端点使用Spring MVC或JAX-RS。您说过要使用JAX-RS,但您有一个带有Spring注释的Spring RestController。您必须选择是否要对REST端点使用SpringMVC或JAX-RS。