핫 배포를 실현하는 SpringBoot에 대한 자세한 설명

머리말

Spring Boot 핫 배포는 개발자가 애플리케이션을 수동으로 다시 시작하지 않고도 코드 수정 후 즉시 변경 효과를 확인할 수 있는 개발 중에 매우 유용한 기능입니다. 다음은 Spring Boot 핫 배포를 사용하는 몇 가지 주요 이유입니다.

1. 개발 효율성 향상

핫 배포를 통해 개발자는 코드 변경 사항을 보다 신속하게 검증하고 테스트할 수 있습니다. 응용 프로그램을 수동으로 다시 시작할 필요 없이 각 수정 후 파일을 저장하고 결과를 즉시 확인하십시오. 이는 개발 및 디버깅 주기를 크게 단축하고 개발 효율성을 향상시킵니다.

2. 실시간 디버깅

핫 배포를 통해 개발자는 애플리케이션이 실행되는 동안 코드를 동적으로 디버깅할 수 있습니다. 중단점을 추가하고, 변수 값을 검사하고, 애플리케이션이 실행되는 동안 코드의 동작을 관찰할 수 있습니다. 이는 문제를 빠르게 찾고 해결하는 데 매우 유용합니다.

3. 코딩 경험

핫 배포를 사용하면 개발자가 중단 없이 애플리케이션을 수동으로 다시 시작하지 않고 지속적인 코딩 상태를 유지할 수 있습니다. 코드 수정의 효과를 실시간으로 확인할 수 있어 코딩 프로세스가 더 매끄럽고 일관됩니다.

4. 반복 작업 감소

핫 배포는 빈번한 애플리케이션 재시작을 방지하고 무의미한 대기 시간을 줄입니다. 개발자는 파일을 저장하기만 하면 되며 시스템은 관련 클래스와 리소스를 자동으로 다시 로드하므로 모든 코드 수정 사항이 즉시 적용됩니다. 이를 통해 워크플로의 반복 작업을 줄이고 작업 효율성을 높일 수 있습니다.

원칙

Spring Boot의 핫 배포 원칙은 주로 JVM(Java Virtual Machine)의 클래스 로딩 메커니즘과 파일 모니터링 메커니즘을 사용하는 것입니다. 핫 배포의 기본 원칙은 다음과 같습니다.

1. 클래스 로딩 메커니즘

JVM(Java Virtual Machine)은 클래스 로더(ClassLoader)를 사용하여 클래스를 로드하고 연결합니다. 애플리케이션이 실행될 때 클래스 로더는 동적으로 클래스를 로드하고 필요에 따라 클래스의 객체를 생성합니다. Spring Boot는 JVM(Java Virtual Machine)의 클래스 로딩 메커니즘을 사용하여 수정된 클래스를 다시 로드하여 핫 배포를 수행합니다.

2. 파일 모니터링 메커니즘

Spring Boot는 응용 프로그램을 개발 환경의 파일 시스템과 연결하고 연결된 폴더에서 파일 변경 사항을 수신 대기합니다. 파일 변경이 감지되면 Spring Boot는 변경된 파일과 관련된 클래스를 다시 로드합니다.

프로젝트의 핫 배포는 다음과 같은 방식으로 실현됩니다.

1.spring-boot-devtools

이는 SpringBoot에서 제공하는 최신 배포 도구이며 종속성을 추가합니다.

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

리소스 수정 후 자동 재시작 등의 기능을 구현합니다. DevTools는 애플리케이션이 시작될 때 자동으로 핫 배포를 구성하고 파일이 저장되면 애플리케이션을 다시 시작합니다. DevTools는 또한 자동 재시작, 자동 페이지 새로 고침 등과 같은 다른 기능을 제공하여 개발 효율성을 향상시킵니다.

2. 스프링 장착 사용

Spring Loaded Spring의 핫 전개 프로그램은 클래스 수정 후 자동 재로딩을 실현합니다. 구현 원칙은 사용자 정의 ClassLoader를 사용하여 코드 핫 교체를 달성하는 것입니다. 구체적인 구현은 다음과 같습니다.

2.1 pom.xml 파일에 Spring Loaded 종속성을 추가합니다.

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>springloaded</artifactId>
    <version>1.2.8.RELEASE</version>
</dependency>

2.2 IDE 또는 컴파일러에서 프로젝트의 자동 빌드 기능을 구성합니다. 파일을 저장할 때 프로젝트를 자동으로 다시 빌드해야 합니다.

2.3 애플리케이션을 시작할 때 다음 JVM 매개변수를 추가합니다.

-javaagent:/path/to/springloaded.jar -noverify

그 중에는 /path/to/springloaded.jarSpring Loaded JAR 파일의 경로가 있으므로 실제 상황에 따라 수정하십시오.

2.4 애플리케이션을 시작하고 개발합니다.

파일을 저장할 때마다 Spring Loaded는 자동으로 변경 사항을 감지하고 수정된 클래스를 다시 로드하여 변경 사항을 즉시 적용합니다.

Spring Loaded는 타사 라이브러리이며 이를 사용하는 데 약간의 제한과 불안정성이 있을 수 있습니다. Spring은 공식적으로 더 이상 Spring Loaded를 유지하지 않습니다.

3. JRebel 플러그인

JRebel이 청구하는 핫 배포 소프트웨어는 코드 핫 배포를 실현하기 위해 JRebel 플러그인을 추가해야 합니다. 효과는 매우 좋지만 사용하려면 비용을 지불해야 합니다.

4. Spring Boot Maven 플러그인 플러그인

코드 변경을 모니터링하고 애플리케이션을 자동으로 다시 시작할 수 있습니다.

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <fork>true</fork>
    </configuration>
</plugin>

5. IntelliJ IDEA에서 Spring Boot 프로젝트의 핫 배포 설정

5.1 IntelliJ IDEA에서 Spring Boot 프로젝트를 엽니다.

5.2 Spring Boot DevTools 플러그인이 설치되어 있는지 확인합니다. File -> Settings -> Plugins플러그인 관리 페이지에 들어가 Spring Boot DevTools 플러그인을 검색하고 설치할 수 있습니다 .

5.3 IntelliJ IDEA 상단 메뉴바에서 Run-> 를 선택합니다 Edit Configurations.

5.4 팝업 Run/Debug Configurations대화 상자에서 왼쪽의 를 선택합니다 Spring Boot.

5.5 Spring Boot오른쪽 설정창 에서 On-frame deactivationOn-update action옵션을 로 설정합니다 Update classes and resources.

  • On-frame deactivation: 다른 창으로 전환할 때 업데이트 전략을 설정합니다.
  • On-update action: 파일 변경이 감지되었을 때 구성된 업데이트 정책입니다.

이 설정 후 다른 창으로 전환하면 응용 프로그램이 백그라운드에서 다시 시작되고 파일 변경이 감지되면 응용 프로그램이 관련 클래스 및 리소스를 업데이트합니다.

5.6 Apply또는 OK버튼을 클릭하여 구성을 저장합니다.

5.7 IntelliJ IDEA의 상단 메뉴 모음에서 Build->를 클릭하여 Build Project프로젝트를 빌드합니다.

5.8 빌드가 완료되면 도구 모음에서 녹색 화살표 아이콘을 클릭하거나 바로 가기 키를 사용하여 Shift + F10Spring Boot 애플리케이션을 실행합니다.

이제 코드를 수정하고 파일을 저장하면 IntelliJ IDEA가 변경된 클래스와 리소스를 실행 중인 애플리케이션에 자동으로 다시 로드하여 핫 배포를 활성화합니다.

핫 배포는 개발 환경에서만 사용할 수 있으며 일부 수정 사항의 경우 응용 프로그램을 다시 시작해야 적용할 수 있습니다. 따라서 프로덕션 환경에서는 핫 배포를 권장하지 않습니다.

마지막에 쓰기

관련 기사가 궁금하시다면 공식 계정 "Architecture Palace"를 주목하시면 됩니다. AIGC, 자바 기본 면접 질문, 네티, 스프링부트, 스프링클라우드 등의 기사 시리즈와 시리즈를 지속적으로 업데이트할 예정입니다. 건조 제품은 언제든지 배달됩니다!

おすすめ

転載: blog.csdn.net/jinxinxin1314/article/details/131821299