URL类的setURLStreamHandlerFactory支持多个factory的方法

本文介绍了一种通过反射和装饰器模式来扩展Java中URLStreamHandlerFactory的方法,以支持Hadoop URL。该方法首先将已存在的工厂设为null,然后创建一个新工厂,能根据需求选择使用原始工厂或特定于HDFS的处理程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前碰到一个问题,需要支持hadoop的url,而java的URL类的setURLStreamHandlerFactory方法只能set一个factory

    public static void setURLStreamHandlerFactory(URLStreamHandlerFactory fac) {
        synchronized (streamHandlerLock) {
            if (factory != null) {
                throw new Error("factory already defined");
            }
            SecurityManager security = System.getSecurityManager();
            if (security != null) {
                security.checkSetFactory();
            }
            handlers.clear();
            factory = fac;
        }
    }

为了能够支持,网上搜了一下(https://stackoverflow.com/questions/41696088/register-custom-urlstreamhandler-in-spring-web-application-tomcat),可以使用反射的方式将原有的factory设置成null,然后再用装饰器模式设置一个新的factory,用于兼容新的url类型,示例如下:

/**
     * 如果已经存在factory,则加一个装饰器,将原来的factory和用来读取hdfs的factory都封装进去,按需使用
     *
     * @param fsUrlStreamHandlerFactory
     * @throws Exception
     */
    private static void registerFactory(final FsUrlStreamHandlerFactory fsUrlStreamHandlerFactory)
            throws Exception {
        log.info("registerFactory : " + fsUrlStreamHandlerFactory.getClass().getName());
        final Field factoryField = URL.class.getDeclaredField("factory");
        factoryField.setAccessible(true);
        final Field lockField = URL.class.getDeclaredField("streamHandlerLock");
        lockField.setAccessible(true);
        // use same lock as in java.net.URL.setURLStreamHandlerFactory
        synchronized (lockField.get(null)) {
            final URLStreamHandlerFactory originalUrlStreamHandlerFactory = (URLStreamHandlerFactory) factoryField.get(null);
            // Reset the value to prevent Error due to a factory already defined
            factoryField.set(null, null);
            URL.setURLStreamHandlerFactory(protocol -> {
                if (protocol.equals("hdfs")) {
                    return fsUrlStreamHandlerFactory.createURLStreamHandler(protocol);
                } else {
                    return originalUrlStreamHandlerFactory.createURLStreamHandler(protocol);
                }
            });
        }
    }

 

at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFa ctory.getTomcatWebServer(TomcatServletWebServerFactory.java:440) [jar:rsrc:sprin g-boot-2.3.12.RELEASE.jar!/:na] at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFa ctory.getWebServer(TomcatServletWebServerFactory.java:193) [jar:rsrc:spring-boot -2.3.12.RELEASE.jar!/:na] at org.springframework.boot.web.servlet.context.ServletWebServerApplicat ionContext.createWebServer(ServletWebServerApplicationContext.java:178) [jar:rsr c:spring-boot-2.3.12.RELEASE.jar!/:na] at org.springframework.boot.web.servlet.context.ServletWebServerApplicat ionContext.onRefresh(ServletWebServerApplicationContext.java:158) [jar:rsrc:spri ng-boot-2.3.12.RELEASE.jar!/:na] at org.springframework.context.support.AbstractApplicationContext.refres h(AbstractApplicationContext.java:545) [jar:rsrc:spring-context-5.2.15.RELEASE.j ar!/:na] at org.springframework.boot.web.servlet.context.ServletWebServerApplicat ionContext.refresh(ServletWebServerApplicationContext.java:143) [jar:rsrc:spring -boot-2.3.12.RELEASE.jar!/:na] at org.springframework.boot.SpringApplication.refresh(SpringApplication. java:755) [jar:rsrc:spring-boot-2.3.12.RELEASE.jar!/:na] at org.springframework.boot.SpringApplication.refresh(SpringApplication. java:747) [jar:rsrc:spring-boot-2.3.12.RELEASE.jar!/:na] at org.springframework.boot.SpringApplication.refreshContext(SpringAppli cation.java:402) [jar:rsrc:spring-boot-2.3.12.RELEASE.jar!/:na] at org.springframework.boot.SpringApplication.run(SpringApplication.java :312) [jar:rsrc:spring-boot-2.3.12.RELEASE.jar!/:na] at org.springframework.boot.SpringApplication.run(SpringApplication.java :1247) [jar:rsrc:spring-boot-2.3.12.RELEASE.jar!/:na] at org.springframework.boot.SpringApplication.run(SpringApplication.java :1236) [jar:rsrc:spring-boot-2.3.12.RELEASE.jar!/:na] at com.kucun.DemoApplication.main(DemoApplication.java:41) [rsrc:./:na] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8. 0_31] at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8. 0_31] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na: 1.8.0_31] at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_31] at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoa der.java:58) [kucun2.jar:na] Caused by: org.apache.catalina.LifecycleException: A child container failed duri ng start at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.ja va:928) ~[jar:rsrc:tomcat-embed-core-9.0.46.jar!/:na] at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java :829) ~[jar:rsrc:tomcat-embed-core-9.0.46.jar!/:na] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) [jar:rsrc:tomcat-embed-core-9.0.46.jar!/:na] at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase. java:1384) ~[jar:rsrc:tomcat-embed-core-9.0.46.jar!/:na] at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase. java:1374) ~[jar:rsrc:tomcat-embed-core-9.0.46.jar!/:na] at java.util.concurrent.FutureTask.run(Unknown Source) ~[na:1.8.0_31] at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineEx ecutorService.java:75) ~[jar:rsrc:tomcat-embed-core-9.0.46.jar!/:na] at java.util.concurrent.AbstractExecutorService.submit(Unknown Source) ~ [na:1.8.0_31] at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.ja va:909) ~[jar:rsrc:tomcat-embed-core-9.0.46.jar!/:na] ... 27 common frames omitted Caused by: java.util.concurrent.ExecutionException: org.apache.catalina.Lifecycl eException: Failed to initialize component [org.apache.catalina.webresources.Sta ndardRoot@b9f698] at java.util.concurrent.FutureTask.report(Unknown Source) ~[na:1.8.0_31] at java.util.concurrent.FutureTask.get(Unknown Source) ~[na:1.8.0_31] at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.ja va:916) ~[jar:rsrc:tomcat-embed-core-9.0.46.jar!/:na] ... 35 common frames omitted Caused by: org.apache.catalina.LifecycleException: Failed to initialize componen t [org.apache.catalina.webresources.StandardRoot@b9f698] at org.apache.catalina.util.LifecycleBase.handleSubClassException(Lifecy cleBase.java:440) [jar:rsrc:tomcat-embed-core-9.0.46.jar!/:na] at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:139) [ jar:rsrc:tomcat-embed-core-9.0.46.jar!/:na] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:173) [jar:rsrc:tomcat-embed-core-9.0.46.jar!/:na] at org.apache.catalina.core.StandardContext.resourcesStart(StandardConte xt.java:4830) ~[jar:rsrc:tomcat-embed-core-9.0.46.jar!/:na] at org.apache.catalina.core.StandardContext.startInternal(StandardContex t.java:4966) ~[jar:rsrc:tomcat-embed-core-9.0.46.jar!/:na] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) [jar:rsrc:tomcat-embed-core-9.0.46.jar!/:na] at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase. java:1384) ~[jar:rsrc:tomcat-embed-core-9.0.46.jar!/:na] at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase. java:1374) ~[jar:rsrc:tomcat-embed-core-9.0.46.jar!/:na] at java.util.concurrent.FutureTask.run(Unknown Source) ~[na:1.8.0_31] at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineEx ecutorService.java:75) ~[jar:rsrc:tomcat-embed-core-9.0.46.jar!/:na] at java.util.concurrent.AbstractExecutorService.submit(Unknown Source) ~ [na:1.8.0_31] at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.ja va:909) ~[jar:rsrc:tomcat-embed-core-9.0.46.jar!/:na] ... 35 common frames omitted Caused by: java.lang.Error: factory already defined at java.net.URL.setURLStreamHandlerFactory(Unknown Source) ~[na:1.8.0_31 ] at org.apache.catalina.webresources.TomcatURLStreamHandlerFactory.<init> (TomcatURLStreamHandlerFactory.java:130) ~[jar:rsrc:tomcat-embed-core-9.0.46.jar !/:na] at org.apache.catalina.webresources.TomcatURLStreamHandlerFactory.getIns tanceInternal(TomcatURLStreamHandlerFactory.java:53) ~[jar:rsrc:tomcat-embed-cor e-9.0.46.jar!/:na] at org.apache.catalina.webresources.TomcatURLStreamHandlerFactory.regist er(TomcatURLStreamHandlerFactory.java:77) ~[jar:rsrc:tomcat-embed-core-9.0.46.ja r!/:na] at org.apache.catalina.webresources.StandardRoot.registerURLStreamHandle rFactory(StandardRoot.java:700) ~[jar:rsrc:tomcat-embed-core-9.0.46.jar!/:na] at org.apache.catalina.webresources.StandardRoot.initInternal(StandardRo ot.java:682) ~[jar:rsrc:tomcat-embed-core-9.0.46.jar!/:na] at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136) [ jar:rsrc:tomcat-embed-core-9.0.46.jar!/:na] ... 45 common frames omitted 2025-06-20 10:58:03.399 INFO 15168 --- [ main] o.apache.catalina.core .StandardService : Stopping service [Tomcat] 2025-06-20 10:58:09.641 WARN 15168 --- [ main] ConfigServletWebServer ApplicationContext : Exception encountered during context initialization - cance lling refresh attempt: org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is org.springframework.boot.web.ser ver.WebServerException: Unable to start embedded Tomcat 2025-06-20 10:58:09.656 INFO 15168 --- [ main] ConditionEvaluationRep ortLoggingListener : Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. 2025-06-20 10:58:11.076 ERROR 15168 --- [ main] o.s.boot.SpringApplica tion : Application run failed org.springframework.context.ApplicationContextException: Unable to start web ser ver; nested exception is org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat at org.springframework.boot.web.servlet.context.ServletWebServerApplicat ionContext.onRefresh(ServletWebServerApplicationContext.java:161) ~[jar:rsrc:spr ing-boot-2.3.12.RELEASE.jar!/:na] at org.springframework.context.support.AbstractApplicationContext.refres h(AbstractApplicationContext.java:545) ~[jar:rsrc:spring-context-5.2.15.RELEASE. jar!/:na] at org.springframework.boot.web.servlet.context.ServletWebServerApplicat ionContext.refresh(ServletWebServerApplicationContext.java:143) ~[jar:rsrc:sprin g-boot-2.3.12.RELEASE.jar!/:na] at org.springframework.boot.SpringApplication.refresh(SpringApplication. java:755) [jar:rsrc:spring-boot-2.3.12.RELEASE.jar!/:na] at org.springframework.boot.SpringApplication.refresh(SpringApplication. java:747) [jar:rsrc:spring-boot-2.3.12.RELEASE.jar!/:na] at org.springframework.boot.SpringApplication.refreshContext(SpringAppli cation.java:402) [jar:rsrc:spring-boot-2.3.12.RELEASE.jar!/:na] at org.springframework.boot.SpringApplication.run(SpringApplication.java :312) [jar:rsrc:spring-boot-2.3.12.RELEASE.jar!/:na] at org.springframework.boot.SpringApplication.run(SpringApplication.java :1247) [jar:rsrc:spring-boot-2.3.12.RELEASE.jar!/:na] at org.springframework.boot.SpringApplication.run(SpringApplication.java :1236) [jar:rsrc:spring-boot-2.3.12.RELEASE.jar!/:na] at com.kucun.DemoApplication.main(DemoApplication.java:41) [rsrc:./:na] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8. 0_31] at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8. 0_31] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na: 1.8.0_31] at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_31] at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoa der.java:58) [kucun2.jar:na] Caused by: org.springframework.boot.web.server.WebServerException: Unable to sta rt embedded Tomcat at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.initiali ze(TomcatWebServer.java:142) ~[jar:rsrc:spring-boot-2.3.12.RELEASE.jar!/:na] at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.<init>(T omcatWebServer.java:104) ~[jar:rsrc:spring-boot-2.3.12.RELEASE.jar!/:na] at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFa ctory.getTomcatWebServer(TomcatServletWebServerFactory.java:440) ~[jar:rsrc:spri ng-boot-2.3.12.RELEASE.jar!/:na] at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFa ctory.getWebServer(TomcatServletWebServerFactory.java:193) ~[jar:rsrc:spring-boo t-2.3.12.RELEASE.jar!/:na] at org.springframework.boot.web.servlet.context.ServletWebServerApplicat ionContext.createWebServer(ServletWebServerApplicationContext.java:178) ~[jar:rs rc:spring-boot-2.3.12.RELEASE.jar!/:na] at org.springframework.boot.web.servlet.context.ServletWebServerApplicat ionContext.onRefresh(ServletWebServerApplicationContext.java:158) ~[jar:rsrc:spr ing-boot-2.3.12.RELEASE.jar!/:na] ... 14 common frames omitted Caused by: org.apache.catalina.LifecycleException: A child container failed duri ng start at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.ja va:928) ~[jar:rsrc:tomcat-embed-core-9.0.46.jar!/:na] at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine. java:262) ~[jar:rsrc:tomcat-embed-core-9.0.46.jar!/:na] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ~[jar:rsrc:tomcat-embed-core-9.0.46.jar!/:na] at org.apache.catalina.core.StandardService.startInternal(StandardServic e.java:433) ~[jar:rsrc:tomcat-embed-core-9.0.46.jar!/:na] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ~[jar:rsrc:tomcat-embed-core-9.0.46.jar!/:na] at org.apache.catalina.core.StandardServer.startInternal(StandardServer. java:930) ~[jar:rsrc:tomcat-embed-core-9.0.46.jar!/:na] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ~[jar:rsrc:tomcat-embed-core-9.0.46.jar!/:na] at org.apache.catalina.startup.Tomcat.start(Tomcat.java:486) ~[jar:rsrc: tomcat-embed-core-9.0.46.jar!/:na] at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.initiali ze(TomcatWebServer.java:123) ~[jar:rsrc:spring-boot-2.3.12.RELEASE.jar!/:na] ... 19 common frames omitted Caused by: java.util.concurrent.ExecutionException: org.apache.catalina.Lifecycl eException: A child container failed during start at java.util.concurrent.FutureTask.report(Unknown Source) ~[na:1.8.0_31] at java.util.concurrent.FutureTask.get(Unknown Source) ~[na:1.8.0_31] at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.ja va:916) ~[jar:rsrc:tomcat-embed-core-9.0.46.jar!/:na] ... 27 common frames omitted Caused by: org.apache.catalina.LifecycleException: A child container failed duri ng start at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.ja va:928) ~[jar:rsrc:tomcat-embed-core-9.0.46.jar!/:na] at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java :829) ~[jar:rsrc:tomcat-embed-core-9.0.46.jar!/:na] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ~[jar:rsrc:tomcat-embed-core-9.0.46.jar!/:na] at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase. java:1384) ~[jar:rsrc:tomcat-embed-core-9.0.46.jar!/:na] at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase. java:1374) ~[jar:rsrc:tomcat-embed-core-9.0.46.jar!/:na] at java.util.concurrent.FutureTask.run(Unknown Source) ~[na:1.8.0_31] at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineEx ecutorService.java:75) ~[jar:rsrc:tomcat-embed-core-9.0.46.jar!/:na] at java.util.concurrent.AbstractExecutorService.submit(Unknown Source) ~ [na:1.8.0_31] at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.ja va:909) ~[jar:rsrc:tomcat-embed-core-9.0.46.jar!/:na] ... 27 common frames omitted Caused by: java.util.concurrent.ExecutionException: org.apache.catalina.Lifecycl eException: Failed to initialize component [org.apache.catalina.webresources.Sta ndardRoot@b9f698] at java.util.concurrent.FutureTask.report(Unknown Source) ~[na:1.8.0_31] at java.util.concurrent.FutureTask.get(Unknown Source) ~[na:1.8.0_31] at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.ja va:916) ~[jar:rsrc:tomcat-embed-core-9.0.46.jar!/:na] ... 35 common frames omitted Caused by: org.apache.catalina.LifecycleException: Failed to initialize componen t [org.apache.catalina.webresources.StandardRoot@b9f698] at org.apache.catalina.util.LifecycleBase.handleSubClassException(Lifecy cleBase.java:440) ~[jar:rsrc:tomcat-embed-core-9.0.46.jar!/:na] at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:139) ~ [jar:rsrc:tomcat-embed-core-9.0.46.jar!/:na] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:173) ~[jar:rsrc:tomcat-embed-core-9.0.46.jar!/:na] at org.apache.catalina.core.StandardContext.resourcesStart(StandardConte xt.java:4830) ~[jar:rsrc:tomcat-embed-core-9.0.46.jar!/:na] at org.apache.catalina.core.StandardContext.startInternal(StandardContex t.java:4966) ~[jar:rsrc:tomcat-embed-core-9.0.46.jar!/:na] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ~[jar:rsrc:tomcat-embed-core-9.0.46.jar!/:na] at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase. java:1384) ~[jar:rsrc:tomcat-embed-core-9.0.46.jar!/:na] at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase. java:1374) ~[jar:rsrc:tomcat-embed-core-9.0.46.jar!/:na] at java.util.concurrent.FutureTask.run(Unknown Source) ~[na:1.8.0_31] at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineEx ecutorService.java:75) ~[jar:rsrc:tomcat-embed-core-9.0.46.jar!/:na] at java.util.concurrent.AbstractExecutorService.submit(Unknown Source) ~ [na:1.8.0_31] at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.ja va:909) ~[jar:rsrc:tomcat-embed-core-9.0.46.jar!/:na] ... 35 common frames omitted Caused by: java.lang.Error: factory already defined at java.net.URL.setURLStreamHandlerFactory(Unknown Source) ~[na:1.8.0_31 ] at org.apache.catalina.webresources.TomcatURLStreamHandlerFactory.<init> (TomcatURLStreamHandlerFactory.java:130) ~[jar:rsrc:tomcat-embed-core-9.0.46.jar !/:na] at org.apache.catalina.webresources.TomcatURLStreamHandlerFactory.getIns tanceInternal(TomcatURLStreamHandlerFactory.java:53) ~[jar:rsrc:tomcat-embed-cor e-9.0.46.jar!/:na] at org.apache.catalina.webresources.TomcatURLStreamHandlerFactory.regist er(TomcatURLStreamHandlerFactory.java:77) ~[jar:rsrc:tomcat-embed-core-9.0.46.ja r!/:na] at org.apache.catalina.webresources.StandardRoot.registerURLStreamHandle rFactory(StandardRoot.java:700) ~[jar:rsrc:tomcat-embed-core-9.0.46.jar!/:na] at org.apache.catalina.webresources.StandardRoot.initInternal(StandardRo ot.java:682) ~[jar:rsrc:tomcat-embed-core-9.0.46.jar!/:na] at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136) ~ [jar:rsrc:tomcat-embed-core-9.0.46.jar!/:na] ... 45 common frames omitted C:\Users\Administrator\Desktop>
06-21
at org.apache.catalina.core.StandardServer.startInternal(StandardServer. java:930) ~[null:9.0.46] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ~[null:9.0.46] at org.apache.catalina.startup.Tomcat.start(Tomcat.java:486) ~[null:9.0. 46] at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.initiali ze(TomcatWebServer.java:123) ~[null:2.3.12.RELEASE] at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.<init>(T omcatWebServer.java:104) ~[null:2.3.12.RELEASE] at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFa ctory.getTomcatWebServer(TomcatServletWebServerFactory.java:440) ~[null:2.3.12.R ELEASE] at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFa ctory.getWebServer(TomcatServletWebServerFactory.java:193) ~[null:2.3.12.RELEASE ] at org.springframework.boot.web.servlet.context.ServletWebServerApplicat ionContext.createWebServer(ServletWebServerApplicationContext.java:178) ~[null:2 .3.12.RELEASE] at org.springframework.boot.web.servlet.context.ServletWebServerApplicat ionContext.onRefresh(ServletWebServerApplicationContext.java:158) ~[null:2.3.12. RELEASE] at org.springframework.context.support.AbstractApplicationContext.refres h(AbstractApplicationContext.java:545) ~[null:5.2.15.RELEASE] at org.springframework.boot.web.servlet.context.ServletWebServerApplicat ionContext.refresh(ServletWebServerApplicationContext.java:143) ~[null:2.3.12.RE LEASE] at org.springframework.boot.SpringApplication.refresh(SpringApplication. java:755) ~[null:2.3.12.RELEASE] at org.springframework.boot.SpringApplication.refresh(SpringApplication. java:747) ~[null:2.3.12.RELEASE] at org.springframework.boot.SpringApplication.refreshContext(SpringAppli cation.java:402) ~[null:2.3.12.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java :312) ~[null:2.3.12.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java :1247) ~[null:2.3.12.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java :1236) ~[null:2.3.12.RELEASE] at com.kucun.DemoApplication.main(DemoApplication.java:41) ~[rsrc:./:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Nativ e Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Native MethodAccessorImpl.java:62) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(De legatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoa der.java:58) ~[rsrc:./:na] Caused by: org.apache.catalina.LifecycleException: A child container failed duri ng start at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.ja va:928) ~[null:9.0.46] at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java :829) ~[null:9.0.46] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ~[null:9.0.46] at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase. java:1384) ~[null:9.0.46] at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase. java:1374) ~[null:9.0.46] at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[ na:na] at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineEx ecutorService.java:75) ~[null:9.0.46] at java.base/java.util.concurrent.AbstractExecutorService.submit(Abstrac tExecutorService.java:140) ~[na:na] at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.ja va:909) ~[null:9.0.46] ... 27 common frames omitted Caused by: java.util.concurrent.ExecutionException: org.apache.catalina.Lifecycl eException: Failed to initialize component [org.apache.catalina.webresources.Sta ndardRoot@6c3659be] at java.base/java.util.concurrent.FutureTask.report(FutureTask.java:122) ~[na:na] at java.base/java.util.concurrent.FutureTask.get(FutureTask.java:191) ~[ na:na] at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.ja va:916) ~[null:9.0.46] ... 35 common frames omitted Caused by: org.apache.catalina.LifecycleException: Failed to initialize componen t [org.apache.catalina.webresources.StandardRoot@6c3659be] at org.apache.catalina.util.LifecycleBase.handleSubClassException(Lifecy cleBase.java:440) ~[null:9.0.46] at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:139) ~ [null:9.0.46] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:173) ~[null:9.0.46] at org.apache.catalina.core.StandardContext.resourcesStart(StandardConte xt.java:4830) ~[null:9.0.46] at org.apache.catalina.core.StandardContext.startInternal(StandardContex t.java:4966) ~[null:9.0.46] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ~[null:9.0.46] at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase. java:1384) ~[null:9.0.46] at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase. java:1374) ~[null:9.0.46] at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[ na:na] at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineEx ecutorService.java:75) ~[null:9.0.46] at java.base/java.util.concurrent.AbstractExecutorService.submit(Abstrac tExecutorService.java:140) ~[na:na] at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.ja va:909) ~[null:9.0.46] ... 35 common frames omitted Caused by: java.lang.Error: factory already defined at java.base/java.net.URL.setURLStreamHandlerFactory(URL.java:1184) ~[na :na] at org.apache.catalina.webresources.TomcatURLStreamHandlerFactory.<init> (TomcatURLStreamHandlerFactory.java:130) ~[null:9.0.46] at org.apache.catalina.webresources.TomcatURLStreamHandlerFactory.getIns tanceInternal(TomcatURLStreamHandlerFactory.java:53) ~[null:9.0.46] at org.apache.catalina.webresources.TomcatURLStreamHandlerFactory.regist er(TomcatURLStreamHandlerFactory.java:77) ~[null:9.0.46] at org.apache.catalina.webresources.StandardRoot.registerURLStreamHandle rFactory(StandardRoot.java:700) ~[null:9.0.46] at org.apache.catalina.webresources.StandardRoot.initInternal(StandardRo ot.java:682) ~[null:9.0.46] at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136) ~ [null:9.0.46] ... 45 common frames omitted 2012-08-04 20:52:28.378 INFO 3416 --- [ main] o.apache.catalina.core. StandardService : Stopping service [Tomcat] 2012-08-04 20:52:28.394 WARN 3416 --- [ main] ConfigServletWebServerA pplicationContext : Exception encountered during context initialization - cancel ling refresh attempt: org.springframework.context.ApplicationContextException: U nable to start web server; nested exception is org.springframework.boot.web.serv er.WebServerException: Unable to start embedded Tomcat 2012-08-04 20:52:28.425 INFO 3416 --- [ main] ConditionEvaluationRepo rtLoggingListener : Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. 2012-08-04 20:52:28.456 ERROR 3416 --- [ main] o.s.boot.SpringApplicat ion : Application run failed org.springframework.context.ApplicationContextException: Unable to start web ser ver; nested exception is org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat at org.springframework.boot.web.servlet.context.ServletWebServerApplicat ionContext.onRefresh(ServletWebServerApplicationContext.java:161) ~[null:2.3.12. RELEASE] at org.springframework.context.support.AbstractApplicationContext.refres h(AbstractApplicationContext.java:545) ~[null:5.2.15.RELEASE] at org.springframework.boot.web.servlet.context.ServletWebServerApplicat ionContext.refresh(ServletWebServerApplicationContext.java:143) ~[null:2.3.12.RE LEASE] at org.springframework.boot.SpringApplication.refresh(SpringApplication. java:755) ~[null:2.3.12.RELEASE] at org.springframework.boot.SpringApplication.refresh(SpringApplication. java:747) ~[null:2.3.12.RELEASE] at org.springframework.boot.SpringApplication.refreshContext(SpringAppli cation.java:402) ~[null:2.3.12.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java :312) ~[null:2.3.12.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java :1247) ~[null:2.3.12.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java :1236) ~[null:2.3.12.RELEASE] at com.kucun.DemoApplication.main(DemoApplication.java:41) ~[rsrc:./:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Nativ e Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Native MethodAccessorImpl.java:62) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(De legatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoa der.java:58) ~[rsrc:./:na] Caused by: org.springframework.boot.web.server.WebServerException: Unable to sta rt embedded Tomcat at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.initiali ze(TomcatWebServer.java:142) ~[null:2.3.12.RELEASE] at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.<init>(T omcatWebServer.java:104) ~[null:2.3.12.RELEASE] at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFa ctory.getTomcatWebServer(TomcatServletWebServerFactory.java:440) ~[null:2.3.12.R ELEASE] at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFa ctory.getWebServer(TomcatServletWebServerFactory.java:193) ~[null:2.3.12.RELEASE ] at org.springframework.boot.web.servlet.context.ServletWebServerApplicat ionContext.createWebServer(ServletWebServerApplicationContext.java:178) ~[null:2 .3.12.RELEASE] at org.springframework.boot.web.servlet.context.ServletWebServerApplicat ionContext.onRefresh(ServletWebServerApplicationContext.java:158) ~[null:2.3.12. RELEASE] ... 14 common frames omitted Caused by: org.apache.catalina.LifecycleException: A child container failed duri ng start at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.ja va:928) ~[null:9.0.46] at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine. java:262) ~[null:9.0.46] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ~[null:9.0.46] at org.apache.catalina.core.StandardService.startInternal(StandardServic e.java:433) ~[null:9.0.46] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ~[null:9.0.46] at org.apache.catalina.core.StandardServer.startInternal(StandardServer. java:930) ~[null:9.0.46] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ~[null:9.0.46] at org.apache.catalina.startup.Tomcat.start(Tomcat.java:486) ~[null:9.0. 46] at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.initiali ze(TomcatWebServer.java:123) ~[null:2.3.12.RELEASE] ... 19 common frames omitted Caused by: java.util.concurrent.ExecutionException: org.apache.catalina.Lifecycl eException: A child container failed during start at java.base/java.util.concurrent.FutureTask.report(FutureTask.java:122) ~[na:na] at java.base/java.util.concurrent.FutureTask.get(FutureTask.java:191) ~[ na:na] at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.ja va:916) ~[null:9.0.46] ... 27 common frames omitted Caused by: org.apache.catalina.LifecycleException: A child container failed duri ng start at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.ja va:928) ~[null:9.0.46] at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java :829) ~[null:9.0.46] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ~[null:9.0.46] at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase. java:1384) ~[null:9.0.46] at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase. java:1374) ~[null:9.0.46] at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[ na:na] at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineEx ecutorService.java:75) ~[null:9.0.46] at java.base/java.util.concurrent.AbstractExecutorService.submit(Abstrac tExecutorService.java:140) ~[na:na] at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.ja va:909) ~[null:9.0.46] ... 27 common frames omitted Caused by: java.util.concurrent.ExecutionException: org.apache.catalina.Lifecycl eException: Failed to initialize component [org.apache.catalina.webresources.Sta ndardRoot@6c3659be] at java.base/java.util.concurrent.FutureTask.report(FutureTask.java:122) ~[na:na] at java.base/java.util.concurrent.FutureTask.get(FutureTask.java:191) ~[ na:na] at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.ja va:916) ~[null:9.0.46] ... 35 common frames omitted Caused by: org.apache.catalina.LifecycleException: Failed to initialize componen t [org.apache.catalina.webresources.StandardRoot@6c3659be] at org.apache.catalina.util.LifecycleBase.handleSubClassException(Lifecy cleBase.java:440) ~[null:9.0.46] at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:139) ~ [null:9.0.46] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:173) ~[null:9.0.46] at org.apache.catalina.core.StandardContext.resourcesStart(StandardConte xt.java:4830) ~[null:9.0.46] at org.apache.catalina.core.StandardContext.startInternal(StandardContex t.java:4966) ~[null:9.0.46] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ~[null:9.0.46] at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase. java:1384) ~[null:9.0.46] at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase. java:1374) ~[null:9.0.46] at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[ na:na] at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineEx ecutorService.java:75) ~[null:9.0.46] at java.base/java.util.concurrent.AbstractExecutorService.submit(Abstrac tExecutorService.java:140) ~[na:na] at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.ja va:909) ~[null:9.0.46] ... 35 common frames omitted Caused by: java.lang.Error: factory already defined at java.base/java.net.URL.setURLStreamHandlerFactory(URL.java:1184) ~[na :na] at org.apache.catalina.webresources.TomcatURLStreamHandlerFactory.<init> (TomcatURLStreamHandlerFactory.java:130) ~[null:9.0.46] at org.apache.catalina.webresources.TomcatURLStreamHandlerFactory.getIns tanceInternal(TomcatURLStreamHandlerFactory.java:53) ~[null:9.0.46] at org.apache.catalina.webresources.TomcatURLStreamHandlerFactory.regist er(TomcatURLStreamHandlerFactory.java:77) ~[null:9.0.46] at org.apache.catalina.webresources.StandardRoot.registerURLStreamHandle rFactory(StandardRoot.java:700) ~[null:9.0.46] at org.apache.catalina.webresources.StandardRoot.initInternal(StandardRo ot.java:682) ~[null:9.0.46] at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136) ~ [null:9.0.46] ... 45 common frames omitted
06-27
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值