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