utilidades de propiedad
Springboot 2.4.13 integra nacos. Después del inicio, el centro de registro de nacos tiene servicios, pero se descubre que la configuración no tiene efecto. Se inició así un proceso de búsqueda del código fuente.
Primero, es la configuración de nacos introducida por pom
Luego, agregue la configuración de nacos a application.yml
Después de comenzar, se encuentra que hay un servicio en el centro de registro, pero el servicio La configuración no se obtiene del centro de configuración de nacos, sino que es local.
Busque en el código fuente de nacos y encuentre la parte donde se inyecta automáticamente la configuración de nacos:
Luego descubrí que la configuración implementada por este NacosPropertySourceLocator fue importada
A Al consultar el código fuente, puede encontrar que la configuración relevante se carga a través de este método, que es la entrada principal.
Entonces, intente agregar un punto de interrupción, verifique la información de configuración y vea por qué la configuración no se importa. Sin embargo, ¡el programa no ingresa este método en absoluto! ! !
Según la implementación de la interfaz, se puede encontrar que NacosPropertySourceLocator es la clase de implementación de PropertySourceLocator. La llamada y ejecución de este método no la realiza nacos en sí, sino a través de Spring.
Spring Cloud utiliza BootstrapApplicationListener como oyente para escuchar eventos durante el proceso de inicio de Springboot, procesar eventos a través del método onApplicationEvent e importar configuraciones relacionadas con Spring Cloud.
Al agregar puntos de interrupción, puede encontrar que el valor de retorno del método bootstrapEnabled () aquí es falso y la carga posterior no se realizará directamente.
Por lo tanto, es necesario asegurarse de que el valor de retorno de bootstrapEnabled sea verdadero.
Al observar el código fuente de PropertyUtils, puede encontrar que Spring Cloud cargará Spring solo cuando se requiera el elemento de configuración spring.cloud.bootstrap.enabled=true y el org.springframework.cloud.bootstrap.marker. .La clase de marcador existe.
Por lo tanto, la dependencia del componente del marcador debe agregarse al pom:
En este momento, la configuración de Spring Cloud debe agregarse a bootstrap.yml:
(En cuanto a por qué es bootstrap.yml en lugar de application.yml, este es otro problema)
Con la configuración anterior, después de que se inicia el programa, la configuración se puede obtener normalmente de nacos centro de configuración.