gpt4 book ai didi

java - 如何关闭自托管的 Apache CXF Web 服务?

转载 作者:行者123 更新时间:2023-11-29 10:18:22 25 4
gpt4 key购买 nike

我有一个控制台应用程序,可以用这段代码简要描述:

public static void main(String[] args) throws InterruptedException {
JAXRSServerFactoryBean sfb = new JAXRSServerFactoryBean();
sfb.setResourceClasses(DummyService.class);
sfb.setResourceProvider(DummyService.class, new SingletonResourceProvider(new DummyServiceImpl()));
sfb.setProvider(new JacksonJaxbJsonProvider());
sfb.setAddress("http://0.0.0.0:9000/");
BindingFactoryManager manager = sfb.getBus().getExtension(BindingFactoryManager.class);
JAXRSBindingFactory bindingFactory = new JAXRSBindingFactory();
bindingFactory.setBus(sfb.getBus());
manager.registerBindingFactory(JAXRSBindingFactory.JAXRS_BINDING_ID, bindingFactory);
Server server = sfb.create();
server.stop(); // here
}

我从 Eclipse 运行这个程序,我希望它立即完成,因为我有 server.stop() 就在最后。这行代码是由应用程序执行的,所以我必须手动关闭它。这是 CXF 打印到控制台的日志:

Aug 13, 2012 10:51:10 PM org.apache.cxf.endpoint.ServerImpl initDestination
INFO: Setting the server's publish address to be http://0.0.0.0:9000/
2012-08-13 22:51:10.598:INFO:oejs.Server:jetty-7.5.3.v20111011
2012-08-13 22:51:10.646:INFO:oejs.AbstractConnector:Started SelectChannelConnector@0.0.0.0:9000 STARTING
2012-08-13 22:51:10.662:INFO:oejsh.ContextHandler:started o.e.j.s.h.ContextHandler{,null}
2012-08-13 22:51:10.663:INFO:oejsh.ContextHandler:stopped o.e.j.s.h.ContextHandler{,null}

在调用 server.stop() 之后,应用程序仍在运行,但服务器没有响应任何请求,所以我觉得我需要关闭其他东西。

阻止它的正确方法是什么?

更新

server.stop();
server.destroy();

也不起作用。

更新

<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-bundle-jaxrs</artifactId>
<version>2.6.1</version>
</dependency>

最佳答案

修复了

server.stop();
server.destroy();
sfb.getBus().shutdown(true)

感觉像是肮脏的 hack。

关于java - 如何关闭自托管的 Apache CXF Web 服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11940523/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com