springboot 2.4.13 no puede obtener la configuración de nacos, pero puede registrarse con nacos
Primero, la configuración de nacos introducida por pom
Luego, la configuración de nacos se agregó a application.yml
Después del inicio, se descubrió que había un servicio en el registro, pero la configuración del servicio no se obtiene del centro de configuración de nacos, sino que se obtiene localmente.
Busque el código fuente de nacos y encuentre la parte de inyección automática de configuración de nacos:
Luego encontramos que es la configuración importada por este NacosPropertySourceLocator
Consulta el código fuente código, puede encontrar que las configuraciones relevantes se cargan a través de este método, que es la entrada general.
Entonces, intente agregar un punto de interrupción para ver la información de configuración y ver 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, puede encontrar que NacosPropertySourceLocator es la clase de implementación de PropertySourceLocator, y la ejecución de esta llamada al método no la completa nacos, sino Spring.
Spring Cloud utiliza BootstrapApplicationListener en forma de oyente para escuchar eventos durante el proceso de inicio de Springboot, manejar el evento a través del método onApplicationEvent e importar la configuración relevante de Spring Cloud.
Al agregar un punto de interrupción, puede encontrar que el método bootstrapEnabled() aquí devuelve falso y la carga posterior no se realiza directamente.
Por lo tanto, debe asegurarse de que bootstrapEnabled devuelva verdadero.
Al ver el código fuente de PropertyUtils, puede encontrar que necesita configurar el proyecto spring.cloud.bootstrap.enabled=true y la existencia de la clase org.springframework.cloud.bootstrap.marker.Marker y luego Spring Cloud continuará cargando la configuración de Spring Cloud.
Por lo tanto, debe agregar dependencias de componentes para el marcador en pom:
En este momento, debe agregar la configuración de Spring Cloud en bootstrap.yml:
(¿Por qué bootstrap.yml, no application.yml? Esta es otra pregunta)
(¿Por qué bootstrap.yml, no application.yml?