@ -66,6 +66,7 @@ import org.springframework.boot.context.properties.bind.Binder;
import org.springframework.boot.context.properties.source.ConfigurationPropertySources ;
import org.springframework.boot.context.properties.source.ConfigurationPropertySources ;
import org.springframework.boot.convert.ApplicationConversionService ;
import org.springframework.boot.convert.ApplicationConversionService ;
import org.springframework.boot.env.DefaultPropertiesPropertySource ;
import org.springframework.boot.env.DefaultPropertiesPropertySource ;
import org.springframework.boot.system.JavaVersion ;
import org.springframework.context.ApplicationContext ;
import org.springframework.context.ApplicationContext ;
import org.springframework.context.ApplicationContextInitializer ;
import org.springframework.context.ApplicationContextInitializer ;
import org.springframework.context.ApplicationListener ;
import org.springframework.context.ApplicationListener ;
@ -418,6 +419,9 @@ public class SpringApplication {
}
}
private void addAotGeneratedInitializerIfNecessary ( List < ApplicationContextInitializer < ? > > initializers ) {
private void addAotGeneratedInitializerIfNecessary ( List < ApplicationContextInitializer < ? > > initializers ) {
if ( NativeDetector . inNativeImage ( ) ) {
checkNativeImageVersion ( ) ;
}
if ( AotDetector . useGeneratedArtifacts ( ) ) {
if ( AotDetector . useGeneratedArtifacts ( ) ) {
List < ApplicationContextInitializer < ? > > aotInitializers = new ArrayList < > (
List < ApplicationContextInitializer < ? > > aotInitializers = new ArrayList < > (
initializers . stream ( ) . filter ( AotApplicationContextInitializer . class : : isInstance ) . toList ( ) ) ;
initializers . stream ( ) . filter ( AotApplicationContextInitializer . class : : isInstance ) . toList ( ) ) ;
@ -434,6 +438,15 @@ public class SpringApplication {
}
}
}
}
private void checkNativeImageVersion ( ) {
JavaVersion minRequiredJavaVersion = JavaVersion . TWENTY_FIVE ;
if ( JavaVersion . getJavaVersion ( ) . isOlderThan ( minRequiredJavaVersion ) ) {
throw new NativeImageRequirementsNotMetException (
"Native Image requirements not met, please upgrade it. Native Image must support at least Java %s"
. formatted ( minRequiredJavaVersion ) ) ;
}
}
private void refreshContext ( ConfigurableApplicationContext context ) {
private void refreshContext ( ConfigurableApplicationContext context ) {
if ( this . properties . isRegisterShutdownHook ( ) ) {
if ( this . properties . isRegisterShutdownHook ( ) ) {
shutdownHook . registerApplicationContext ( context ) ;
shutdownHook . registerApplicationContext ( context ) ;
@ -1645,6 +1658,21 @@ public class SpringApplication {
}
}
/ * *
* Exception which is thrown if GraalVM ' s native - image requirements aren ' t met .
* /
private static final class NativeImageRequirementsNotMetException extends RuntimeException {
/ * *
* Creates a new { @link NativeImageRequirementsNotMetException } instance .
* @param message the message
* /
private NativeImageRequirementsNotMetException ( String message ) {
super ( message ) ;
}
}
/ * *
/ * *
* { @link SpringApplicationHook } decorator that ensures the hook is only used once .
* { @link SpringApplicationHook } decorator that ensures the hook is only used once .
* /
* /