복붙노트

[SPRING] 스프링 부트의 핫 스와핑

SPRING

스프링 부트의 핫 스와핑

나는 Spring Boot로 P.O.C를 해왔다.

지금까지 정말 잘되고 유망한 일이지만 중요한 단점이 있습니다. (즉, .jar에서 웹 응용 프로그램을 패키징하는) 내장 된 서버를 사용하고 있으므로 개발할 때 jar 파일을 다시 작성하고 매번 서버를 다시 시작해야합니다. CSS, HTML 또는 JS 파일을 변경할 때. 핫스왑은 없습니다. 이렇게하면 UI 개발 속도가 느려집니다.

다른 도메인에서 정적 리소스를로드하고 로컬 nginx에서 서비스를 제공하고 이와 같은 몇 가지 변형을 제공하는 등 몇 가지 빠른 수정을 생각해 볼 수는 있지만 IntelliJ / 식?

해결법

  1. ==============================

    1.몇 가지 옵션이 있습니다. IDE에서 실행 (특히 디버깅 사용)은 개발을 수행하는 좋은 방법입니다 (모든 최신 IDE는 정적 리소스를 다시로드 할 수 있으며 일반적으로 Java 클래스 변경의 핫 스와핑도 허용합니다). 스프링 부트 devtools는 꽤 큰 부스트를 얻는 싼 방법입니다 (클래스 패스에 추가하십시오). 변경 사항이 감지되면 핫 JVM에서 응용 프로그램을 다시 시작하여 작동합니다. 또한 thymeleaf 캐시가 실행되는 동안 스위치를 끄기 때문에 기억하지 않아도됩니다. 더 높은 수준의 도구로 코드를 작성하는 경우 외부 CSS / js 컴파일러 프로세스와 함께 사용할 수 있습니다.

    몇 가지 옵션이 있습니다. IDE에서 실행 (특히 디버깅 사용)은 개발을 수행하는 좋은 방법입니다 (모든 최신 IDE는 정적 리소스를 다시로드 할 수 있으며 일반적으로 Java 클래스 변경의 핫 스와핑도 허용합니다). 스프링 부트 devtools는 꽤 큰 부스트를 얻는 싼 방법입니다 (클래스 패스에 추가하십시오). 변경 사항이 감지되면 핫 JVM에서 응용 프로그램을 다시 시작하여 작동합니다. 또한 thymeleaf 캐시가 실행되는 동안 스위치를 끄기 때문에 기억하지 않아도됩니다. 더 높은 수준의 도구로 코드를 작성하는 경우 외부 CSS / js 컴파일러 프로세스와 함께 사용할 수 있습니다.

    Spring Loaded는 더 이상 권장되지 않지만 여전히 사용 중입니다. 제로 지연 (예 : JRebel)을 통한 핫스왑이 필요한 경우보다 정교한 에이전트 기반 도구가 훨씬 효과적입니다.

    최신 내용은 문서를 참조하십시오.

  2. ==============================

    2.핫 스와핑을 얻을 수 있습니다.

    핫 스와핑을 얻을 수 있습니다.

    자세한 내용을 보려면이 게시물을 확인하십시오. http://blog.netgloo.com/2014/05/21/hot-swapping-in-spring-boot-with-eclipse-sts/

  3. ==============================

    3.또한 JRebel을 사용할 수도 있습니다 - 스프링 콩을 포함한 모든 변경 사항 (더 나은 핫 스왑)을 다시로드합니다. Intellij 및 Eclipse와 쉽게 통합됩니다.

    또한 JRebel을 사용할 수도 있습니다 - 스프링 콩을 포함한 모든 변경 사항 (더 나은 핫 스왑)을 다시로드합니다. Intellij 및 Eclipse와 쉽게 통합됩니다.

  4. ==============================

    4.당신이 gradle을 사용하고 있다고 가정하십시오; build.gradle에서 다음 구성을 사용하십시오.

    당신이 gradle을 사용하고 있다고 가정하십시오; build.gradle에서 다음 구성을 사용하십시오.

    apply plugin: 'java'
    apply plugin: 'idea'
    apply plugin: 'spring-boot'
    apply plugin: 'application'
    
    applicationDefaultJvmArgs = ["-agentlib:jdwp=transport=dt_socket,address=localhost:7000,server=y,suspend=n"]
    
    mainClassName = "package.ApplicationRunner"
    

    gradle build run 명령을 사용하여 IDE 또는 명령 줄에서 응용 프로그램을 실행합니다.

    이제 IDE는 스프링 부트 응용 프로그램이 실행되는 원격 JVM (포트 7000)에 연결할 수 있습니다. 또한 정적 파일의 빠른 배포를 지원합니다.

    IDE에서 종속성이 적절하게 관리되는 경우 intelliJ에서 기본 클래스를 실행할 수도 있습니다. 메인 클래스는 SpringApplication.run ( "classpath : /applicationContext.xml", args)을 호출 할 main 메소드를 포함하고있는 클래스이다.

  5. ==============================

    5.Intellij에서이 동작을 얻을 수 있습니다. 프로그램이 디버그 모드에서 실행 중일 때 Run> Reload Changed Classes를 선택하십시오.

    Intellij에서이 동작을 얻을 수 있습니다. 프로그램이 디버그 모드에서 실행 중일 때 Run> Reload Changed Classes를 선택하십시오.

    참고 : Intellij가 작업을 완료하면로드 된 클래스가 최신이라고 말할 수 있습니다. 다시로드 할 항목이 없습니다. 실제로 클래스 경로 자원을 다시로드했기 때문에 오해의 소지가 있습니다.

    내 환경 / 설정에는 다음이 포함됩니다. 인 텔리 13 임베디드 톰캣 '응용 프로그램'유형의 실행 / 디버그 구성 (기본 클래스 만 사용함) 정적 html, css 및 js (no jsp) 검색

  6. ==============================

    6.이런 종류의 지원이 얼마나되는지는 모르지만, Eclipse IDE (또는이 글을 읽는 사람)라면 디버그 모드에서 m2e를 통해 Spring-Boot 애플리케이션을 시작한다. (디버그 - 드롭 다운 버튼을 누른 후 Maven 실행 구성 항목).

    이런 종류의 지원이 얼마나되는지는 모르지만, Eclipse IDE (또는이 글을 읽는 사람)라면 디버그 모드에서 m2e를 통해 Spring-Boot 애플리케이션을 시작한다. (디버그 - 드롭 다운 버튼을 누른 후 Maven 실행 구성 항목).

    그것은 나를 위해 매력처럼 작동합니다.

    내 Maven 실행 구성 항목은 다음과 같이 구성됩니다.

    나는 더 이상 라이브러리를 사용하지 않고있다 (spring-boot-devtools조차도 사용하지 않는다).

    그게 전부 야.

  7. ==============================

    7.IntelliJ 15.0, windows 10에서 나를 도왔던 것은 다음과 같은 순서입니다.

    IntelliJ 15.0, windows 10에서 나를 도왔던 것은 다음과 같은 순서입니다.

    1 단계 : pom에 다음과 같은 종속성을 추가했습니다. (이것은 모든 곳에서 언급되었지만 이것은 혼자서 해결되었습니다.) @jonashackt

    <dependency>
         <groupid>org.springframework.boot</groupid>
         <artifactid>spring-boot-devtools</artifactid>
    </dependency>
    

    2 단계 : 그렇다면 파일 -> 설정 -> 빌드 - 실행 - 배포 -> 컴파일러 (기본 컴파일러 옵션이 선택되고 하위 옵션이 선택되어 있지 않은지 확인하십시오)

    자동으로 프로젝트 만들기를 활성화하십시오. 확인을 클릭하고 대화 상자를 닫습니다.

    3 단계 : Shift + Ctrl + A (창에서)를 누르면 "액션 또는 옵션 이름 입력"이라는 제목의 검색 대화 상자가 나타나고 레지스트리를 입력하십시오. "레지스트리 ..."라는 첫 번째 옵션을 두 번 클릭하면 다른 창이 열립니다. 다음 옵션을 찾으십시오.

    compiler.automake.allow.when.app.running
    

    사용하도록 설정하고 닫기를 클릭합니다.

    4 단계 : IDE 다시 시작

    이 근원에서 정교하게 만들어졌다.

  8. ==============================

    8.나는 개인 개발자를 위해 Thymeleaf (템플릿 엔진), jRebel을 추천한다. Thymeleaf 템플릿 파일은 HTML 리소스 일뿐입니다. 따라서 템플릿 파일을 편집 한 직후에 변경됩니다.

    나는 개인 개발자를 위해 Thymeleaf (템플릿 엔진), jRebel을 추천한다. Thymeleaf 템플릿 파일은 HTML 리소스 일뿐입니다. 따라서 템플릿 파일을 편집 한 직후에 변경됩니다.

  9. ==============================

    9.1.3.0부터. (현재 Milestone 2에서) Spring-boot-devtools를 lightweigt 접근 방식으로 사용할 수 있습니다. 문서 또는이 블로그 포스트를 참조하십시오. 간단히 1.3.0 이상으로 업그레이드하십시오. pom.xml에 다음을 추가하십시오.

    1.3.0부터. (현재 Milestone 2에서) Spring-boot-devtools를 lightweigt 접근 방식으로 사용할 수 있습니다. 문서 또는이 블로그 포스트를 참조하십시오. 간단히 1.3.0 이상으로 업그레이드하십시오. pom.xml에 다음을 추가하십시오.

    <dependencies>
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
      </dependency>
    </dependencies>
    

    Run As를 사용하여 SpringBootApplication을 시작하면 ... 괜찮습니다.

  10. ==============================

    10.pom.xml에서이 태그를 사용해보십시오.

    pom.xml에서이 태그를 사용해보십시오.

    <dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <optional>true</optional>
    </dependency>
    

  11. ==============================

    11.maven을 사용한다면, pom.xml의 spring-boot-maven-plugin은 핫 스왑을 얻으려면 다음과 같아야합니다.

    maven을 사용한다면, pom.xml의 spring-boot-maven-plugin은 핫 스왑을 얻으려면 다음과 같아야합니다.

      <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <dependencies>
                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>springloaded</artifactId>
                    <version>1.2.0.RELEASE</version>
                </dependency>
            </dependencies>
        </plugin>
    

    thymeleaf를 사용하는 경우 애플리케이션 속성에 다음을 추가하십시오.

    spring.thymeleaf.cache=false
    

    그러나 뭔가를 기억하십시오. 프로덕션 환경에서 이것을 사용하지 마십시오.

  12. ==============================

    12.스프링 부트 애플리케이션에서 핫스왑을 수행하는 방법

    스프링 부트 애플리케이션에서 핫스왑을 수행하는 방법

    응용 프로그램은 클래스 수정시 핫 스왑을 수행 할 준비가되었습니다.

  13. from https://stackoverflow.com/questions/21399586/hot-swapping-in-spring-boot by cc-by-sa and MIT license