반응형
스프링 부트에 포함된 JarScan intomcat의 scanManifest 사용 안 함
로그에 다음과 같은 몇 가지 경고가 표시됩니다.
java.io.FileNotFoundException: C:\Users\user\.m2\repository\com\lowagie\itext\2.0.8\bcmail-jdk14-138.jar (O sistema não pode encontrar o arquivo especificado)
at java.util.zip.ZipFile.open(Native Method) ~[na:1.8.0_121]
at java.util.zip.ZipFile.<init>(ZipFile.java:219) ~[na:1.8.0_121]
at java.util.zip.ZipFile.<init>(ZipFile.java:149) ~[na:1.8.0_121]
at java.util.jar.JarFile.<init>(JarFile.java:166) ~[na:1.8.0_121]
at java.util.jar.JarFile.<init>(JarFile.java:130) ~[na:1.8.0_121]
at org.apache.tomcat.util.scan.JarFileUrlJar.<init>(JarFileUrlJar.java:60) ~[tomcat-embed-core-8.5.6.jar:8.5.6]
at org.apache.tomcat.util.scan.JarFactory.newInstance(JarFactory.java:48) ~[tomcat-embed-core-8.5.6.jar:8.5.6]
at org.apache.tomcat.util.scan.StandardJarScanner.process(StandardJarScanner.java:338) ~[tomcat-embed-core-8.5.6.jar:8.5.6]
at org.apache.tomcat.util.scan.StandardJarScanner.scan(StandardJarScanner.java:288) ~[tomcat-embed-core-8.5.6.jar:8.5.6]
at org.apache.jasper.servlet.TldScanner.scanJars(TldScanner.java:262) [tomcat-embed-jasper-8.5.6.jar:8.5.6]
at org.apache.jasper.servlet.TldScanner.scan(TldScanner.java:104) [tomcat-embed-jasper-8.5.6.jar:8.5.6]
at org.apache.jasper.servlet.JasperInitializer.onStartup(JasperInitializer.java:101) [tomcat-embed-jasper-8.5.6.jar:8.5.6]
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5178) [tomcat-embed-core-8.5.6.jar:8.5.6]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) [tomcat-embed-core-8.5.6.jar:8.5.6]
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1403) [tomcat-embed-core-8.5.6.jar:8.5.6]
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1393) [tomcat-embed-core-8.5.6.jar:8.5.6]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_121]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_121]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_121]
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_121]
독립 실행형 Tomcat에서 다음을 생성할 수 있습니다.context.xml
포함:
<Context>
...
<JarScanner scanManifest="false"/>
...
</Context>
어떻게 하면 매니페스트 파일에 대해 JarScanner를 비활성화할 수 있습니까(https://tomcat.apache.org/tomcat-8.0-doc/config/jar-scanner.html) 는 Spring Boot을 사용하는 Java 구성 클래스입니다).
이제 속성을 통해 제어할 수 있습니다.
# Comma-separated list of additional patterns that match jars to ignore for TLD scanning.
server.tomcat.additional-tld-skip-patterns=*.jar
Tomcat 8.5 시작 중에 Spring boot 1.2에서 1.5.2로 AFTER 업그레이드, FileNotFoundException
편집: 이것은 어떻습니까?
@Bean
public EmbeddedServletContainerFactory embeddedServletContainerFactory() {
return new TomcatEmbeddedServletContainerFactory() {
@Override
protected void postProcessContext(Context context) {
((StandardJarScanner) context.getJarScanner()).setScanManifest(false);
}
};
}
스프링 부트 1.x에 대한 올레그의 훌륭한 답변을 개선하기 위해 노력하고 있습니다.
다음은 Spring Boot 2.0(Tomcat 8.5)에 해당하는 코드입니다.
@Bean
public TomcatServletWebServerFactory tomcatFactory() {
return new TomcatServletWebServerFactory() {
@Override
protected void postProcessContext(Context context) {
((StandardJarScanner) context.getJarScanner()).setScanManifest(false);
}
};
}
응용프로그램의 구성에 추가하기만 하면 됩니다.
액추에이터 관리 포트를 사용자 지정할 때 이를 기반으로 Rustyx에서 제안한 것에 약간의 변경이 필요했습니다.
@Bean
public TomcatServletWebServerFactory containerFactory() {
return new CustomTomcatServletWebServerFactory();
}
static final class CustomTomcatServletWebServerFactory
extends TomcatServletWebServerFactory {
@Override
protected void postProcessContext(Context context) {
((StandardJarScanner) context.getJarScanner()).setScanManifest(false);
}
}
언급URL : https://stackoverflow.com/questions/43370840/disable-scanmanifest-of-jar-scan-in-tomcat-embed-in-spring-boot
반응형
'programing' 카테고리의 다른 글
Numpy 배열에서 곱셈 (0) | 2023.07.29 |
---|---|
단일 Flexbox 항목을 정당화하는 방법(정당화 내용 재정의) (0) | 2023.07.29 |
HTML5 로컬 저장소 키 가져오기 (0) | 2023.07.29 |
이미지 목록에서 PDF 만들기 (0) | 2023.07.29 |
도커 수정 방법: 권한 거부 문제를 받았습니다. (0) | 2023.07.29 |