小编cyb*_*ion的帖子

Springboot嵌入式Tomcat类加载器速度慢

我在CentOS 7.2上构建了一个使用SpringBoot v1.3.6.RELEASE Tomcat 8.0.36 Java 1.8u101的Web应用程序

Web应用程序也是一个调用另一个Web应用程序的SOAP客户端.(JAX-WS RI 2.2.9)如果应用程序保持空闲状态15秒,则第一个Web服务调用将停止近2秒.似乎停顿发生在oacloader.WebappClassLoaderBase中.

闲置15秒后

16:02:36.165:委托父类加载器org.springframework.boot.loader.LaunchedURLClassLoader@45283ce2

16:02:36.170:搜索本地存储库

16:02:36.170:findResource(META-INF/services/javax.xml.soap.MetaFactory)

16:02:38.533: - >找不到资源,返回null

16:02:38.533: - >找不到资源,返回null

下一个请求没有空闲时间

16:07:09.981:委托父类装配器org.springframework.boot.loader.LaunchedURLClassLoader@45283ce2

16:07:09.984:搜索本地存储库

16:07:09.985:findResource(META-INF/services/javax.xml.soap.MetaFactory)

16:07:09.986: - >找不到资源,返回null

16:07:09.986: - >找不到资源,返回null

16:07:09.988:findResources(META-INF/services

oacloader.WebappClassLoaderBase生成的所有上述消息,它们显然是由来自JAX-WS RI的ClientSOAPHandlerTube.processRequest引起的.

你会注意到第一次调用需要2秒以上,但后续调用只需要几毫秒.我想知道是否有人经历过这种行为?

可能的解决方案:是否可以在springboot中更改tomcat使用的类加载器以使用ParallelWebappClassLoader

或者这可能是类加载器上的可重载标志的产物,但我没有看到如何在springboot中更改该标志.

当使用Jetty作为容器运行时,不会发生这种情况.

最终解决方案:(感谢Gergely Bacso)

    @Bean
public EmbeddedServletContainerCustomizer servletContainerCustomizer() {
    return new EmbeddedServletContainerCustomizer() {

        @Override
        public void customize(ConfigurableEmbeddedServletContainer container) {
             if (container instanceof TomcatEmbeddedServletContainerFactory) {
                customizeTomcat((TomcatEmbeddedServletContainerFactory) container);
            }
        }
        private void customizeTomcat(TomcatEmbeddedServletContainerFactory tomcatEmbeddedServletContainerFactory) {
            tomcatEmbeddedServletContainerFactory.addContextCustomizers(new TomcatContextCustomizer() {
                @Override
                public void customize(Context cntxt) {
                    cntxt.setReloadable(false);
                } …
Run Code Online (Sandbox Code Playgroud)

java spring tomcat jax-ws spring-boot

12
推荐指数
1
解决办法
1745
查看次数

防止在jsf 2中从包含的jar安装阶段监听器

我有一个JSF 2应用程序,其中包含一个jar文件,该文件又在其META-INF目录中包含faces-config.xml.faces-config.xml包含阶段侦听器的声明.我想在不修改jar文件本身的情况下阻止安装此阶段侦听器.这可能吗?

jsf jsf-2

6
推荐指数
1
解决办法
188
查看次数

是否可以使用 javassist 代理或替换静态方法

我尝试了各种方法,但一直无法让它发挥作用。我也一直无法找到明确的答案。

如果这是可能的,一个简单的例子将不胜感激

java javassist

2
推荐指数
1
解决办法
1131
查看次数

标签 统计

java ×2

javassist ×1

jax-ws ×1

jsf ×1

jsf-2 ×1

spring ×1

spring-boot ×1

tomcat ×1