报错信息:
java.io.FileNotFoundException: /usr/local/businesslogannalyzejob.jar!/BOOT-INF/classes (No such file or directory)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at java.io.FileInputStream.<init>(FileInputStream.java:93)
at sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:90)
at sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:188)
at java.net.URL.openStream(URL.java:1038)
at com.ly.hotel.businesslogannalyzejob.common.util.ClassScannerHelper.scanFromJarProtocol(ClassScannerHelper.java:101)
at com.ly.hotel.businesslogannalyzejob.common.util.ClassScannerHelper.scan(ClassScannerHelper.java:40)
at com.ly.hotel.businesslogannalyzejob.job.MqJobs.getAllConsumers(MqJobs.java:51)
at com.ly.hotel.businesslogannalyzejob.job.MqJobs$$EnhancerBySpringCGLIB$$eab52fed.CGLIB$getAllConsumers$0(<generated>)
at com.ly.hotel.businesslogannalyzejob.job.MqJobs$$EnhancerBySpringCGLIB$$eab52fed$$FastClassBySpringCGLIB$$88f28351.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:361)
at com.ly.hotel.businesslogannalyzejob.job.MqJobs$$EnhancerBySpringCGLIB$$eab52fed.getAllConsumers(<generated>)
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:497)
后来查出问题是由于springboot打包后获取jar包里的class时文件名称会变成.jar!/BOOT-INF/classes类似的格式
在方法中屏蔽BOOT-INF/classes即可