El archivo spring-configuration-metadata.json no se genera correctamente para proyectos con múltiples módulos.
He creado un proyecto de varios módulos:
- (pom)
root
- (jar)
libModule
- (jar)
appModule
, tienelibModule
como dependencia
- (jar)
La configuración pom
de appModule
tiene la siguiente dependencia:
<dependency>
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-configuration-processor</artifactid>
<optional>true</optional>
</dependency>
También contiene su propia clase @ConfigurationProperties
:
@ConfigurationProperties(prefix = "service.test")
@Component
@Data
public class Conf {
String prop;
}
Compilar este módulo produce el archivo spring-configuration-metadata.json
correcto:
{
"groups": [
{
"name": "service.test",
"type": "org.test.app.Conf",
"sourceType": "org.test.app.Conf"
}
],
"properties": [
{
"name": "service.test.prop",
"type": "java.lang.String",
"sourceType": "org.test.app.Conf"
}
],
"hints": []
}
Mi IDE Idea me resalta correctamente estas propiedades en application.yml
.
Pero también tengo una clase adicional @ConfigurationProperties
en mi libModule
:
@ConfigurationProperties(prefix = "service.a")
@Setter
@Getter
public class ServiceAProperties {
String url;
}
He intentado incluir esta clase en appModule
con el siguiente código:
@SpringBootApplication
@ConfigurationPropertiesScan(basePackageClasses = {
ServiceAProperties.class
})
public class Application {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
y he intentado diferentes formas de incluirla en el archivo JSON, pero no aparece allí. Solo se utiliza la clase Conf
de mi propio módulo.
¿Cómo puedo incluir las propiedades de configuración del otro módulo para generar un JSON adecuado que incluya las propiedades de ambos módulos?
Si se necesita información adicional, por favor pregunte.
davy.ai
Para incluir las propiedades de configuración del
libModule
en el archivospring-configuration-metadata.json
generado, debes asegurarte de que la claseServiceAProperties
esté incluida en el proceso de escaneo.Una forma de hacer esto es añadiendo la anotación
@ConfigurationPropertiesScan
a la clase de configuración dellibModule
:Esto se asegurará de que la clase
ServiceAProperties
(y cualquier otra clase con anotaciones@ConfigurationProperties
en el mismo paquete) estén incluidas en el proceso de generación de metadatos.También puedes necesitar agregar el
libModule
como una dependencia en el archivopom.xml
delappModule
, para que la claseServiceAProperties
esté disponible durante la compilación.Una vez que hayas realizado estos cambios, intenta compilar el
appModule
nuevamente y comprueba si la claseServiceAProperties
está incluida en el archivo JSON de metadatos generado.