Clarify conditional support when using AOT
Closes gh-35262
This commit is contained in:
parent
cd48252c75
commit
8a14f6d017
|
|
@ -49,4 +49,6 @@ include::howto/testing.adoc[]
|
|||
|
||||
include::howto/build.adoc[]
|
||||
|
||||
include::howto/aot.adoc[]
|
||||
|
||||
include::howto/traditional-deployment.adoc[]
|
||||
|
|
|
|||
|
|
@ -0,0 +1,53 @@
|
|||
[[howto.aot]]
|
||||
== Ahead-of-time processing
|
||||
|
||||
A number of questions often arise when people use the ahead-of-time processing of Spring Boot applications.
|
||||
This section addresses those questions.
|
||||
|
||||
[[howto.aot.conditions]]
|
||||
=== Conditions
|
||||
|
||||
Ahead-of-time processing optimizes the application and evaluates {spring-framework-api}/context/annotation/Conditional.html[conditions] based on the environment at build time.
|
||||
<<features#features.profiles,Profiles>> are implemented through conditions and are therefore affected, too.
|
||||
|
||||
If you want beans that are created based on a condition in an ahead-of-time optimized application, you have to set up the environment when building the application.
|
||||
The beans which are created while ahead-of-time processing at build time are then always created when running the application and can't be switched off.
|
||||
To do this, you can set the profiles which should be used when building the application.
|
||||
|
||||
For Maven, this works by setting the `profiles` configuration of the `spring-boot-maven-plugin:process-aot` execution:
|
||||
|
||||
[source,xml,indent=0,subs="verbatim"]
|
||||
----
|
||||
<profile>
|
||||
<id>native</id>
|
||||
<build>
|
||||
<pluginManagement>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>process-aot</id>
|
||||
<configuration>
|
||||
<profiles>profile-a,profile-b</profiles>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</pluginManagement>
|
||||
</build>
|
||||
</profile>
|
||||
----
|
||||
|
||||
For Gradle, you need to configure the `ProcessAot` task:
|
||||
|
||||
[source,gradle,indent=0,subs="verbatim"]
|
||||
----
|
||||
tasks.withType(org.springframework.boot.gradle.tasks.aot.ProcessAot).configureEach {
|
||||
args('--spring.profiles.active=profile-a,profile-b')
|
||||
}
|
||||
----
|
||||
|
||||
Profiles which only change configuration properties that don't influence conditions are supported without limitations when running ahead-of-time optimized applications.
|
||||
|
|
@ -43,7 +43,7 @@ A closed-world assumption implies the following restrictions:
|
|||
|
||||
* The classpath is fixed and fully defined at build time
|
||||
* The beans defined in your application cannot change at runtime, meaning:
|
||||
- The Spring `@Profile` annotation and profile-specific configuration is not supported
|
||||
- The Spring `@Profile` annotation and profile-specific configuration <<howto#howto.aot.conditions,have limitations>>.
|
||||
- Properties that change if a bean is created are not supported (for example, `@ConditionalOnProperty` and `.enable` properties).
|
||||
|
||||
When these restrictions are in place, it becomes possible for Spring to perform ahead-of-time processing during build-time and generate additional assets that GraalVM can use.
|
||||
|
|
|
|||
Loading…
Reference in New Issue