Support nested configuration properties (#6920)

#### What type of PR is this?

/kind improvement
/area core
/milestone 2.20.x

#### What this PR does / why we need it:

This PR adds the annotations `@NestedConfigurationProperties` to let Spring Configuration Processor generate fully metadata.

We can execute command `./gradlew :application:compileJava` to generate `application/build/classes/java/main/META-INF/spring-configuration-metadata.json`. If you are using IDEA Ultimate, configuration hints related to Halo will be available.

#### Does this PR introduce a user-facing change?

```release-note
None
```
This commit is contained in:
John Niang 2024-10-22 17:20:29 +08:00 committed by GitHub
parent d2799c59be
commit 61718cce98
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 9 additions and 0 deletions

View File

@ -2,6 +2,7 @@ package run.halo.app.infra.properties;
import jakarta.validation.Valid;
import lombok.Data;
import org.springframework.boot.context.properties.NestedConfigurationProperty;
@Data
public class ConsoleProperties {
@ -9,6 +10,7 @@ public class ConsoleProperties {
private String location = "classpath:/console/";
@Valid
@NestedConfigurationProperty
private ProxyProperties proxy = new ProxyProperties();
}

View File

@ -9,6 +9,7 @@ import java.util.HashSet;
import java.util.Set;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.NestedConfigurationProperty;
import org.springframework.validation.Errors;
import org.springframework.validation.Validator;
import org.springframework.validation.annotation.Validated;
@ -45,21 +46,27 @@ public class HaloProperties implements Validator {
private boolean requiredExtensionDisabled;
@Valid
@NestedConfigurationProperty
private final ExtensionProperties extension = new ExtensionProperties();
@Valid
@NestedConfigurationProperty
private final SecurityProperties security = new SecurityProperties();
@Valid
@NestedConfigurationProperty
private final ConsoleProperties console = new ConsoleProperties();
@Valid
@NestedConfigurationProperty
private final UcProperties uc = new UcProperties();
@Valid
@NestedConfigurationProperty
private final ThemeProperties theme = new ThemeProperties();
@Valid
@NestedConfigurationProperty
private final AttachmentProperties attachment = new AttachmentProperties();
@Override