混淆代码,spring 升级到5.2.7后,停止tomcat8.5.51长时间无响应,查看后台日志报如下错误:

14-Jul-2020 11:00:04.300 严重 [Catalina-startStop-2] org.apache.catalina.core.ContainerBase.stopInternal A child container failed during stop
    java.util.concurrent.ExecutionException: java.lang.InternalError: Malformed class name
        at java.util.concurrent.FutureTask.report(FutureTask.java:122)
        at java.util.concurrent.FutureTask.get(FutureTask.java:192)
        at org.apache.catalina.core.ContainerBase.stopInternal(ContainerBase.java:990)
        at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:257)
        at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1428)
        at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1417)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
    Caused by: java.lang.InternalError: Malformed class name
        at java.lang.Class.getSimpleBinaryName(Class.java:1450)
        at java.lang.Class.getSimpleName(Class.java:1309)
        at java.lang.Class.getCanonicalName(Class.java:1399)
        at org.apache.catalina.loader.WebappClassLoaderBase.getPrettyClassName(WebappClassLoaderBase.java:2049)
        at org.apache.catalina.loader.WebappClassLoaderBase.checkThreadLocalMapForLeaks(WebappClassLoaderBase.java:2013)
        at org.apache.catalina.loader.WebappClassLoaderBase.checkThreadLocalsForLeaks(WebappClassLoaderBase.java:1941)
        at org.apache.catalina.loader.WebappClassLoaderBase.clearReferences(WebappClassLoaderBase.java:1608)
        at org.apache.catalina.loader.WebappClassLoaderBase.stop(WebappClassLoaderBase.java:1548)
        at org.apache.catalina.loader.WebappLoader.stopInternal(WebappLoader.java:446)
        at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:257)
        at org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:5439)
        ... 7 more
    Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range: -14
        at java.lang.String.substring(String.java:1931)
        at java.lang.Class.getSimpleBinaryName(Class.java:1448)
        ... 17 more
14-Jul-2020 11:00:04.313 严重 [Thread-13] org.apache.catalina.core.ContainerBase.stopInternal A child container failed during stop
    java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: A child container failed during stop
        at java.util.concurrent.FutureTask.report(FutureTask.java:122)
        at java.util.concurrent.FutureTask.get(FutureTask.java:192)
        at org.apache.catalina.core.ContainerBase.stopInternal(ContainerBase.java:990)
        at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:257)
        at org.apache.catalina.core.StandardService.stopInternal(StandardService.java:486)
        at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:257)
        at org.apache.catalina.core.StandardServer.stopInternal(StandardServer.java:787)
        at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:257)
        at org.apache.catalina.startup.Catalina.stopServer(Catalina.java:493)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.catalina.startup.Bootstrap.stopServer(Bootstrap.java:389)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:479)
    Caused by: org.apache.catalina.LifecycleException: A child container failed during stop
        at org.apache.catalina.core.ContainerBase.stopInternal(ContainerBase.java:997)
        at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:257)
        at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1428)
        at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1417)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
14-Jul-2020 11:00:04.314 严重 [78] org.apache.catalina.startup.Catalina.stopServer Catalina.stop: 
    org.apache.catalina.LifecycleException: A child container failed during stop
        at org.apache.catalina.core.ContainerBase.stopInternal(ContainerBase.java:997)
        at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:257)
        at org.apache.catalina.core.StandardService.stopInternal(StandardService.java:486)
        at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:257)
        at org.apache.catalina.core.StandardServer.stopInternal(StandardServer.java:787)
        at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:257)
        at org.apache.catalina.startup.Catalina.stopServer(Catalina.java:493)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.catalina.startup.Bootstrap.stopServer(Bootstrap.java:389)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:479)


解决方法:

找到”Allatori”的配置文件,定位到如下行:

<property name="classes-naming" value="unique"/>
然后修改为:

<property name="classes-naming" value="keep-$-sign"/>
重新混淆后,反复启停tomcat服务,均正常。


注意:本文归作者所有,未经作者允许,不得转载