es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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, tiene libModule como dependencia

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.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para incluir las propiedades de configuración del libModule en el archivo spring-configuration-metadata.json generado, debes asegurarte de que la clase ServiceAProperties 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 del libModule:

    @SpringBootApplication
    @ConfigurationPropertiesScan(basePackageClasses = {
            ServiceAProperties.class
    })
    public class LibModuleConfig {
        // ...
    }
    

    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 archivo pom.xml del appModule, para que la clase ServiceAProperties esté disponible durante la compilación.

    <dependencies>
        <dependency>
            <groupid>com.example</groupid>
            <artifactid>libModule</artifactid>
            <version>1.0.0</version>
        </dependency>
    </dependencies>
    

    Una vez que hayas realizado estos cambios, intenta compilar el appModule nuevamente y comprueba si la clase ServiceAProperties está incluida en el archivo JSON de metadatos generado.

Comments are closed.