Tomcat/Spring 부트 다시 로드 META-INF/resources/jsp 파일(라이브 업데이트)
스프링 부트/톰캣 인스턴스에서 jsp를 사용하는 데 문제가 있습니다.기본적으로 저는 모듈 A(A/src/main/resources/METa-INF/resources/jsp) 안에 모든 jsp 파일을 가지고 있으며, 이 모듈은 모듈 B(main module, war packaging)에 jar 종속성으로 포함되어 있습니다.문제는 앱이 디버그 모드(Eclipse 또는 IntelliJ Idea)에서 실행되고 있을 때 모듈 A에 위치한 jsp 파일이 자동으로 다시 로드되지 않고(파일의 변경 사항이 렌더링된 웹 페이지에 표시되지 않음) Tomcat의 재시작만 실제로 파일을 다시 로드하고 변경 사항을 표시한다는 것입니다.모듈 B의 재정의된 jsp 파일은 자체적으로 다시 로드되고 모듈 A의 jsp 파일에만 문제가 있습니다(아마도 META-INF/resources 폴더 때문일 것입니다).
모듈 A 구조(의존성, jar로 패키징됨): src/main/resources/META-INF/resources/jsp/*.jsp
모듈 B 구조(전쟁으로 포장된 메인 모듈, 여기서 jsp는 모듈 A의 구조를 재정의함): src/main/webapp/*.jsp
저는 이에 대한 해결책을 찾았지만, 가장 가까운 답은 다음과 같습니다(JRebel 사용). https://zeroturnaround.com/forums/topic/jsps-in-servlet-3-0-jars-are-not-reloading/
또한, 이것은 제가 jsp를 설정한 방법에 대한 예입니다: https://github.com/ghillert/spring-boot-jsp-demo
그것이 당신의 제약에 맞는지는 모르겠지만, 이런 해결책이 있습니다: https://spring.io/blog/2015/06/17/devtools-in-spring-boot-1-3 .
다른 옵션: https://github.com/spring-projects/spring-loaded
저는 JSF와 Facelet을 사용하고 있으며 동적 렌더링이 가능한 웹 기술에서는 핫 새로고침이 항상 약간 문제가 됩니다.spring-boot-dev 도구 외에 제가 제안하는 것은 정적 콘텐츠 개발 프로세스와 렌더링 관련 프로세스를 분리하는 것입니다.만약 당신이 CSS, html, js 편집을 위해 대부분의 기술보다 핫 새로고침만 필요하다면 도움이 될 것이지만, 관련 구성 요소 편집을 렌더링하면 앱 시간을 재구축하도록 요청할 것입니다.사용할 도구의 품질에 따라 질문 빈도가 달라집니다.
이는 다음과 같을 가능성이 높습니다. https://stackoverflow.com/a/8656527/696632
클래스 경로의 모든 리소스는 캐시의 영향을 받습니다.당신은 답을 평가해야 합니다.
옵션은 파일을 Tomcat에 다시 배포하기 위해 Gradle Cargo Plugin 또는 Maven Cargo Plugin을 사용할 수 있습니다(리소스 파일을 포함한 모든 파일을 다시 배포할 수 있음).
파일 다시 로드는 자동으로 수행되지 않습니다.Gradle 및 Maven 빌드에 대해 각각 관련 작업/목표인 CargoRedeployLocal 또는 cargo:redeploy를 수동으로 실행해야 합니다.
그러나 모든 작업을 다시 시작하는 데 시간이 오래 걸리는 경우 Cargo 플러그인을 사용하여 다시 배포하면 작업 속도를 높일 수 있습니다.
이제 2022년입니다. 저는 임베디드 Tomcat 서버와 함께 스프링 부트 2.2.6을 사용하고 있습니다. Tomcat 컨텍스트 매개 변수를 수동으로 설정할 수 있습니다.
@Bean
public TomcatServletWebServerFactory tomcatFactory() {
return new TomcatServletWebServerFactory() {
protected void postProcessContext(Context context) {
((StandardJarScanner)context.getJarScanner()).setScanManifest(false);
context.setAddWebinfClassesResources(true);
context.setReloadable(true);
Wrapper jsp = (Wrapper) context.findChild("jsp");
jsp.addInitParameter("modificationTestInterval", "0");
jsp.addInitParameter("development","true");
}
};
}
여기서 setAddWebinfClassesResources 매개 변수가 중요합니다. Tomcat 사용자 가이드를 기반으로 합니다. 이 특성은 웹 응용 프로그램 JAR 파일 내의 META-INF/resources에서 제공되는 정적 리소스 외에도 정적 리소스도 WEB-INF/classes/METa-INF/resources에서 제공되는지 여부를 제어합니다.이것은 주 버전이 3 이상인 웹 응용프로그램에만 적용됩니다.이것은 서블릿 3 사양의 독점적 확장이므로 기본적으로 비활성화되어 있습니다.이 기능을 사용하려면 특성을 true로 설정합니다.
2023년 기준으로 사용할 수 있는 옵션은compiler.automake.allow.app.running아래에 있습니다.file/settings/advanced settings/새로운 이름으로Allow auto-make to start even if developed application is currently running.
언급URL : https://stackoverflow.com/questions/41597675/tomcat-spring-boot-reloading-meta-inf-resources-jsp-files-live-updates
'programing' 카테고리의 다른 글
| 스크롤 뷰 내에서 선형 레이아웃이 확장되지 않음 (0) | 2023.07.26 |
|---|---|
| getElementsByClassName을 통해 올바르게 반복하는 방법 (0) | 2023.07.26 |
| SQL 또는 MySQL에서 JOIN 키워드를 사용하지 않는 조인에 문제가 있습니까? (0) | 2023.07.26 |
| PHP에서 종료되지 않은 엔티티 참조 (0) | 2023.07.26 |
| 인덱스가 생성되고 dbms_stats 계산이 사용된 후 쿼리 실행 속도가 느림 (0) | 2023.07.26 |