Spring Native 로 SpringBoot 프로그램 을 GraalVM 으로 변환 합 니 다.

Spring 은 기 존의 Spring Boot 프로그램(Java 또는 Kotlin 으로 작성)을 GraalVM 이 컴퓨터 이미지 로 변환 하 는 데 사용 되 는 새로운 도구 Spring Native Beta 를 발 표 했 습 니 다.springnative 에서 Spring Boot 프로그램 을 지원 하 는 것 이 목표 입 니 다.GraalVM 이 컴퓨터 의 이미 지 는 매우 작 아서 최 적 화 를 거 쳐 시동 속도 가 매우 빠르다.그러나 JVM 에 비해 절충 적 인 방법 은 구축 시간 이 길 고 운행 시 최적화 가 적 다 는 것 이다.
Spring Native 는 GraalVM 과 협업 하여 교량 역할 을 하여 GraalVM 이 전통 적 인 SpringBoot 코드 를 이해 하도록 확보한다.Oracle 실험실 의 고급 연구 매니저 인 Vojin Jovanovic 는 스프링 과 의 협력 에 대해 말 했다.
Spring 팀 과 합작 하여 본 기기 의 JVM 생태 계 를 구축 하 는 것 은 매우 즐 거 운 일이 다.그들의 깊 은 기술 지식 과 지역사회 에 민감 한 촉각 은 항상 가장 좋 은 해결 방안 을 가 져 올 수 있다.최신 Spring 본 기계 버 전과 JVM 생태계 에서 의 대량 사용 은 본 기계 컴 파일 의 광범 위 한 사용 으로 도 로 를 평평 하 게 깔 았 다.
백그라운드 에서 Maven 과 Gradle 이 제공 하 는 사전(AOT)플러그 인 은 Spring 유도 프로그램 을 이 컴퓨터 코드 로 변환 하 는 데 사 용 됩 니 다.이 플러그 인 들 은 GraalVM 이 지원 하지 않 는 모든 Spring 요소(예 를 들 어 반사 와 프 록 시)에 GraalVM 이 컴퓨터 설정 을 생 성 합 니 다.생 성 된 설정 은 reflect-config.json 파일 에 저 장 됩 니 다.예 를 들 어@Service 주석 을 사용 하 는 모든 종 류 는 JSON 파일 에 설 정 됩 니 다.
Spring 이 컴퓨터 설정 파일 이 META-INF/native-image 폴 더 에 있다 고 가정 하면 발견 할 수 있 습 니 다.이 기 계 는 SpringNative 가 지원 하지 않 는 요 소 를 설정 하 는 데 사용 할 수 있 습 니 다.예 를 들 어 MySQL 드라이버 설정 입 니 다.
새 프로젝트 를 만 들 때 Spring Initializer 에서 Spring 이 컴퓨터 의존 항목 을 제공 합 니 다.

일부 의존 항목,예 를 들 어 springdatajpa 는 GraalVM 을 지원 하기 위해 추가 설정 이 필요 합 니 다.Spring 팀 은 플러그 인 을 통 해 추가 설정 을 제공 합 니 다.예 를 들 어 Intitializr 에 Spring 데이터 JPA 의존 항목 을 추가 한 후,두 개의 추가 Maven 플러그 인 Spring aot Maven plugin 과 hibenate enhance Maven plugin(그들의 설정 포함)이 pom.xml 파일 에 추가 되 었 습 니 다.
이 때 모든 의존 항목 이 Spring Native 의 지 지 를 받 는 것 은 아니다.initializer 에서 생 성 된 Spring 항목 에 지원 되 지 않 는 의존 항목 이 포함 되 어 있 으 면 HELP.md 파일 이 표 시 됩 니 다.

다른 Spring Boot 프로그램 과 마찬가지 로 Initializer 는 프로그램 을 실행 하기 위해 적당 한 입구 점 류 를 자동 으로 만 듭 니 다.

@SpringBootApplication
public class NativeApplication {

	public static void main(String[] args) {
		SpringApplication.run(NativeApplication.class, args);
	}
}
다음은 응용 프로그램 을 테스트 하기 위해 REST controller 를 제공 합 니 다.

@Controller
public class NativeEndpoint {

    @GetMapping("/native")
    public String nativeCall() {
        return "Native";
    }
}
표준 SpringBoot 의존 항목 을 제외 하고 Initializer 는 SpringNative 지원 에 새로운 의존 항목 을 추가 했다.

<dependency>
	<groupId>org.springframework.experimental</groupId>
	<artifactId>spring-native</artifactId>
	<version>${spring-native.version}</version>
</dependency>
spring boot maven 플러그 인 은 다음 생 원가 기 이미 지 를 추가 로 설정 합 니 다:

<plugin>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-maven-plugin</artifactId>
	<configuration>
		<image>
			<builder>paketobuildpacks/builder:tiny</builder>
			<env>
				<BP_NATIVE_IMAGE>true</BP_NATIVE_IMAGE>
			</env>
		</image>
	</configuration>
</plugin>
Maven 은 사전 컴 파일 을 통 해 이 컴퓨터 이미 지 를 만 드 는 데 사용 할 수 있 습 니 다.실행 가능 한 파일 은 필요 한 모든 클래스 와 JDK 에서 온 정적 링크 코드 를 포함 합 니 다.기본 VM 은 일반적인 자바 vm 이 아 닌 실행 시 시스템 으로 사 용 됩 니 다.

$ ./mvnw spring-boot:build-image
코드 를 컴 파일 하고 최적화 할 때 이미 지 를 구축 하 는 데 시간 이 필요 합 니 다.이 단 계 는 Docker 이미지 에서 실 행 됩 니 다.상당 한 메모리 가 필요 합 니 다.다음 오류 가 발생 하면 Docker 의 메모리 설정 을 추가 해 야 합 니 다.

Exception in thread "native-image pid watcher" java.lang.OutOfMemoryError: 
   GC overhead limit exceeded
위 Maven 명령 을 실행 하 는 출력 은 결과 Docker 이미 지 를 보 여 줍 니 다.GraalVM 이 컴퓨터 이미 지 를 포함 합 니 다.

Successfully built image 'docker.io/library/native:0.0.1-SNAPSHOT'
프로그램 을 실행 하 는 모든 내용 을 포함 하여 생 성 된 이미 지 는 약 82MB 입 니 다.

$ docker images
native  0.0.1-SNAPSHOT ... 81.9MB
Docker 용기 가 포트 8080 에서 시 작 됩 니 다.

$ docker run -p 8080:8080 native:0.0.1-SNAPSHOT
용 기 를 시작 하면 프로그램 은 거의 즉시 테스트 할 수 있 습 니 다.

$ curl localhost:8080/native --silent
Native
이상 은 Spring Native 로 SpringBoot 프로그램 을 GraalVM 으로 변환 하 는 상세 한 내용 입 니 다.SpringBoot 프로그램 을 GraalVM 으로 변환 하 는 데 관 한 자 료 는 다른 관련 글 을 주목 하 십시오!

좋은 웹페이지 즐겨찾기