Spring 3 ile bu yazıyı iki kısma ayırmak gerekti.
1. Spring 3
Spring 3 SpringNative yazısına taşıdım
2. Spring 3'ten Önce
Daha önceki Spring sürümler için açıklama şöyle
Spring Boot offers two alternatives to create native binaries:1. A system-dependent binary: this approach requires a local GraalVM installation with the native-image extension. It will create a non-cross-platform system-dependent binary.For this, Spring Boot has a dedicated profile:./mvnw -Pnative package2. A Docker image: this approach builds a containerized version of the application. It requires a local image build, e.g., Docker. Internally, it leverages CNCF Buildpacks (but doesn’t require pack).Spring Boot provides a Maven target for this:./mvnw spring-boot:native-image
Eğer yerel GraalVM kurulumunu seçeceksek ilave olarak native-image extension da kurulmalıdır
Her iki yöntem için de
1. dependency olarak spring-native eklenir.
2. plugin olarak şu eklenir
maven için : spring-aot-maven-plugin
gradle için : org.springframework.experimental.aot
Açıklaması şöyle
The Spring AOT plugin will automatically be run in the build pipeline to create a special Spring Boot JAR which is needed to run when compiled to a native image. It will try to create all needed reachability configurations for your program to work correctly as a native image.reflection-config.json Dosyası
SpringNative reflection-config.json Dosyası yazısına taşıdım
Maven
Örnek
Şöyle yaparız
<dependency><groupId>org.springframework.experimental</groupId><artifactId>spring-native</artifactId><version>${spring-native.version}</version></dependency><plugin><groupId>org.springframework.experimental</groupId><artifactId>spring-aot-maven-plugin</artifactId><version>${spring-native.version}</version><executions><execution><id>test-generate</id><goals><goal>test-generate</goal></goals></execution><execution><id>generate</id><goals><goal>generate</goal></goals></execution></executions></plugin>
Gradle
Örnek
Şöyle yaparız
plugins { id 'org.springframework.boot' version '2.6.4' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java' id 'org.springframework.experimental.aot' version '0.11.3' } group = 'com.springnative.example' version = '0.0.1-SNAPSHOT' sourceCompatibility = '17' repositories { maven { url 'https://repo.spring.io/release' } mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' testImplementation 'org.springframework.boot:spring-boot-starter-test' } tasks.named('test') { useJUnitPlatform() } tasks.named('bootBuildImage') { builder = 'paketobuildpacks/builder:tiny' environment = ['BP_NATIVE_IMAGE': 'true'] }
Şöyle yaparız
./gradlew nativeRun
build-image seçeneği
$ mvn clean package$ mvn spring-boot:build-image$ docker run --name spring-native-example -p 8080:8080 spring-native-example:0.0.1-SNAPSHOT
Örnek
Şöyle yaparız
//Build a normal Spring Boot image mvn spring-boot:build-image -DskipTests //Build a Spring Boot native image mvn -Pnative spring-boot:build-image -DskipTests
native-image seçeneği
Şöyle yaparız
./mvnw spring-boot:native-image
@TypeHint Anotasyonu
Kodda reflection configuration belirtmeyi sağlar
Örnek - AccessBits.FULL_REFLECTION Şöyle yaparız
@SpringBootApplication @NativeHint(options = ["--enable-https"]) <1> @TypeHint( types = [ Model::class, Data::class, Result::class, Thumbnail::class, Collection::class, Resource::class, Url::class, URI::class ], access = AccessBits.FULL_REFLECTION <2> ) class BootNativeApplication {...}
Örnek
Şöyle yaparız
@TypeHint( types = [News::class], access = [TypeAccess.DECLARED_CONSTRUCTORS, TypeAccess.PUBLIC_METHODS] ) @SpringBootApplication class SpringBootKotlinReactiveApplication
Hiç yorum yok:
Yorum Gönder