Spring MVC 및 부트를 통한 정적 콘텐츠 갱신
저는 웹 어플리케이션 구축을 위한 Spring MVC & Boot 및 Angular Js를 평가하고 있습니다.정적 콘텐츠(html, js, css)를 변경할 때 매번 애플리케이션을 재시작해야 하는 문제가 발생했습니다.정적 콘텐츠 변경을 위해 어플리케이션 전체를 재시작하는 것은 효율적이지 않기 때문에, 그것을 해결할 수 있는 방법이 있으면 좋겠습니다.다른 모든 웹 앱 프레임워크에서는 정적 콘텐츠 파일을 바로 업데이트할 수 있습니다(Spring MVC 및 일반 이전 WAR 애플리케이션도 마찬가지).
프로젝트 셋업은 "Building a RESTful Web Service with Spring Boot Actuator" 가이드(http://spring.io/guides/gs/actuator-service/)에서 실시합니다.기본적으로는 Spring Boot 및 MVC 컨트롤러를 사용하여 REST 서비스를 만듭니다.또한 "Messing a RESTful Web Service with AngularJS" 가이드(http://spring.io/guides/gs/consuming-rest-angularjs/)를 사용하여 AngularJS 프런트엔드를 구축했습니다.REST 서비스의 응답을 표시하는 웹 페이지를 만듭니다.제가 변경한 것은 "http://rest-service.guides.spring.io/greeting"이 아닌 제 어플리케이션에 대한 요청입니다.정적 콘텐츠는 "src/main/resources/public" 폴더에 저장됩니다.이 설정은 정적 콘텐츠를 새로고침하지 않는 경우를 제외하고 올바르게 작동합니다.
원래 문제의 개요
정적 콘텐츠(html, js, css)를 변경할 때 매번 응용 프로그램을 재시작해야 하는 문제가 발생했습니다.
저도 같은 문제를 겪었고, 결국 그 문제를 더해서 해결했습니다.
<configuration>
<addResources>true</addResources>
</configuration>
로로 합니다.spring-boot-maven-plugin
pom.xml
이 스프링 부트 개발 도구 때문에 혼란스러웠지만, 내가 무엇을 해도 아무런 효과가 없었다.
정적 콘텐츠는 "src/main/resources/public" 폴더에 저장됩니다.
경로도 문제 없습니다. src/main/resources/static도 문제 없습니다.
아... 나도 이 문제를 발견했어.
에 src/main/resources/public
", ", "에 .src/main/webapp
다른 자바 웹 앱과 같은 기능을 사용할 수 있습니다.【Tomcat】【Tomcat】【Tomcat】【Tomcat】【Tomcat】【Tomcat】.
와 같이 디폴트 에는 에 .src\main\webapp
하려면 pom<build>
삭제:
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>copy-resources</id>
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/target/classes/static</outputDirectory>
<resources>
<resource>
<directory>src/main/webapp</directory>
<filtering>true</filtering>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
resources 플러그인을 사용하면 실행 가능한 JAR을 실행하여 로컬 개발을 수행할 수 있습니다.
java -jar target/.jar
실행 중에는 재시작 없이 Chrome Dev Tools 또는 원하는 IDE를 사용하여 파일을 수정할 수 있습니다.빌드를 , 드빌 however however under under under under under under under under under under under under under under under under under under under under under under の 모든 파일을 포함합니다.src\main\webapp
src\main\resources\static
.
이 문서에서는 "현대 IDE는 모두 정적 자원의 새로고침과 보통 Java 클래스 변경 핫스왑을 가능하게 합니다."(https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/html/howto.html#howto-hotswapping))라고 기술하고 있습니다.정말이에요.Eclipse는 기본적으로 이 기능을 사용합니다.저는 IntelliJ 사용자는 아니지만, 제가 알기로는 자동으로 빌드되도록 설정할 수도 있습니다.
저와 동료도 이 문제를 알게 되었습니다.인텔리J 문서에서 답을 찾았어요
메인 메뉴에서 [Run] | [ Reload Changed Classes ]를 선택합니다.
내 솔루션(Kotlin으로 작성되었지만 매우 명확함):
@Controller
class WebController : WebMvcConfigurerAdapter() {
override fun addResourceHandlers(registry: ResourceHandlerRegistry) {
System.getProperty("resources.local.path")?.let {
registry.addResourceHandler("/**").addResourceLocations(it)
}
}
...
}
기본적으로는 자체 리소스 핸들러를 조건부로 추가할 수 있습니다.예를 들어 일부 시스템 속성(resources.local.path)이 설정되어 있는 경우 속성의 값을 사용하여 리소스 위치를 추가합니다.그런 다음 '-Dresources.local'과 같은 적절한 값을 사용하여 이 속성을 설정합니다.path=file:/Users/andrey/Projects/gsp-test/src/main/resources/static/.'
후행 슬래시를 잊지 마십시오.
1.5.8을 사용하고 있습니다.풀어주다.
정적 파일이나 jsp 파일 등의 변경 사항을 즉시 업데이트합니다.
Maven을 사용하고 있다면.pom.xml에 추가해야 합니다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
다음으로 Spring Boot를 시작해야 합니다.
mvn clean spring-boot:run
완전한 예와 자세한 내용은 https://www.surasint.com/spring-boot-with-auto-update-changed-files-example/를 참조하십시오.
@ @eigilened @eigilened ★addResources
buildmaven .하고 spring-boot-gradle-plugin
그래들 빌드에서 이 Spring Boot github 문제를 발견했습니다.Spring Boot 문서에서도 이 옵션을 언급했습니다.이 지시어를 build.gradle에 추가하고 Gradle 태스크를 실행합니다.bootRun
참고하세요.
저도 같은 문제가 있었습니다.여기서 제안하는 솔루션은 논리적인 것 같습니다.1-ctrl+shift+A2-레지스트리3- 검색으로 컴파일러를 열었습니다.오토메이크allow.when.app.running"을 클릭하여 체크합니다.http://garywaddell.com/2015/11/20/spring-boot-intellij-idea-not-reloading-static-content/
이클립스에서는 프로젝트 -> "자동으로 빌드" 옵션을 최소 구성으로 활성화해야 합니다.
결국 사용한 것은 Browsersync with grunt입니다.browsersync and grunt는 디스크 상의 정적 리소스를 감시하고 파일을 편집할 때 브라우저를 업데이트합니다.그것은 일종의 대리 역할을 한다.이렇게 하면 아무것도 빌드하거나 재시작하지 않고도 UI의 변경 사항을 즉시 확인할 수 있습니다.
프로젝트 셋업에 사용한 JHipster를 사용하는 경우 Grunt, browsersync, spring boot 및 angularjs가 설정되어 있습니다.
단, 이것은 단순한 IDE보다 훨씬 더 많은 툴이 필요하고 복잡하기 때문에 모든 프로젝트에 이 툴을 추천하지는 않습니다.
spring-boot-devtools는 편집된 정적 htm/module의 "핫 디플로이" 솔루션이 아닙니다.
리소스/스태틱 내의 html/js 파일을 편집하기 위해 사용할 때 인텔리지는 업데이트된 파일을 ./target에 복사하는 것을 인식하도록 Intelij 내의 웹 패싯을 설정했습니다.또, 에서 기동한 스프링 부트애플리케이션은 자동적으로 그 내용을 표시합니다.
https://www.jetbrains.com/help/idea/2016.2/configuring-static-content-resources.html 를 참조해 주세요.
@viator의 Java 버전 답변:
@Configuration
class WebMvcConfigurer extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/dist/*.js").addResourceLocations(
"file:src/main/typescript/dist/"
);
}
}
종속성을 하나만 더 추가하면 됩니다.
이 그라들
compile group: 'org.springframework.boot', name: 'spring-boot-devtools', version: '1.3.0.RELEASE'
인유 Pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<version>1.3.0.RELEASE</version>
</dependency>
정적 웹 콘텐츠를 제공하는 두 가지 방법이 있습니다.
- 클래스 경로에서(기본값 src/main/resources/static 또는 src/main/resources/public 또는 META-INF/resources/에 따름)
- 파일 시스템에서 (기본 src/main/webapp별)
솔루션 1)을 선택하면 정적 웹 콘텐츠가 해당 항아리 안에 있으므로 항아리를 안전하게 복사할 수 있습니다.서버가 변경 내용을 선택하도록 하려면 (자동) 핫스왑을 수행해야 합니다.
솔루션 2)을 선택하면 모든 것이 개봉 즉시 작동하며, 모든 잔돈은 자동으로 선택됩니다.그러나 최종 병을 다른 위치에 복사하면 작업이 중지됩니다.즉, absolute path를 지정하지 않는 한application.properties
. 예:
spring.resources.static-locations=file:///C:/myspringbootapp/src/main/webapp
솔루션 2)는 간단하지만 휴대성은 떨어집니다.솔루션 1)은 휴대성은 높지만 사용법은 더 어렵습니다(이상적 구성).
그래들 Kotlin DSL 탑재 스프링 부트 2+의 경우:
tasks.bootRun {
sourceResources(sourceSets.getAt(SourceSet.MAIN_SOURCE_SET_NAME))
}
gradle dsl 버전에 대한 @swerr의 답변 덕분입니다.
Spring Boot porject에서 정적 콘텐츠 라이브 새로고침 시 동일한 문제가 발생하였습니다.Stack Overflow에 게시된 다양한 솔루션에서 솔루션을 얻을 수 있게 되었습니다.개발에 사용한 툴은 다음과 같습니다.Ubuntu 18.04 IntelliJ Idea & Google Chrome :
- 템플릿 폴더를 리소스 폴더 자체에 보관합니다.(메인 아래 webapp 폴더에 보관되어 있는 솔루션도 있지만 결과가 나오지 않았습니다.)
- 이 구성 추가
<addResources>true</addResources>
</configuration>
스프링 메이븐 플러그인으로 변환합니다.
3. 이 의존관계를 POM 파일에 추가하는 것을 잊지 마세요.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
Live Reload 확장을 웹 브라우저에 추가합니다.
mvn clean spring-boot:run'을 사용하여 서버를 재시작합니다(변경사항이 빌드에 반영됩니다).서버 시작 시 Live Server started at ...라는 메시지가 나타납니다.
localhost: 8080/...를 사용하여 페이지를 로드합니다.LiveReload 확장을 클릭하여 서버에 연결합니다.
리소스/템플릿 폴더의 정적 HTML 파일을 변경합니다.저장하고 웹브라우저를 다시 확인하시면 거기에 반영됩니다...
언급URL : https://stackoverflow.com/questions/24762657/refreshing-static-content-with-spring-mvc-and-boot
'programing' 카테고리의 다른 글
as_json이 어소시에이션으로 as_json을 호출하지 않음 (0) | 2023.03.08 |
---|---|
AngularJs에서 ng-Cloak 지시어를 실제로 사용하는 방법은 무엇입니까? (0) | 2023.03.08 |
스프링 부트 및 gRPC 및 Protobuf 사용 (0) | 2023.03.08 |
스프링 부팅 시 요청 대상에 잘못된 문자가 있습니다. (0) | 2023.03.08 |
폴더를 라라벨로 작성하다 (0) | 2023.03.08 |