En los sistemas distribuidos, los archivos de configuración están dispersos en cada proyecto, lo que dificulta la gestión de centralmente, o si la configuración se modifica, debe reiniciarse antes de que pueda entrar en vigencia. A continuación, usamos la configuración de Spring Cloud para resolver este punto de dolor.
Servidor de configuración
Utilizamos config-servir como el servidor de configuración y solo necesitamos agregar dependencias:
<Spendency> <MoupRupid> org.springframework.cloud </groupid> <artifactid> spring-ncloud-config-server </artifactid> </pendency>
En Application.yml, configure:
Spring: Aplicación: Nombre: Config-server # Nombre Cloud: config: Servidor: git: uri: file: // users/yangdd/documents/code/github/config-repo # use el repositorio local (para pruebas), format: file: // $ {user.home}/config-repo Si es Windows, es archivo: // $ {user.home}/config-repo #uri #uri: #uri: #uri: https://github.com/yangdd1205/spring-cloud-master/ #username: username #contraseña: contraseña #default --label: config #puede ser ID de confirmación, nombre de la rama, nombre de la etiqueta, el valor predeterminado es #de búsqueda maestro #-pats: #en otras palabras, además de buscar archivos de configuración en el directorio raíz, también puede buscar en el siguiente directorio #-portero: portero: portero: portero: 4001 # # # # # # # # # # #Los proyectos de primavera generalmente tienen el principio de "la convención es mayor que la configuración". Por lo tanto, los archivos de configuración en nuestro git generalmente llevan el nombre de {aplicación}-{perfil} .yml o {aplicación}-{perfil} .properties.
Tenemos dos archivos client-dev.yml en la rama maestra de config-repo:
Información: Master-Dev
Client-Prod.yml:
Información: Maestro-Prod
En la rama de configuración, hay dos archivos cliente-dev.yml:
Información: config-devel
Client-Prod.yml:
Información: Config-Prod
Iniciar servidor de configuración Podemos acceder a los archivos de configuración en GIT a través de la siguiente relación de asignación:
//{Applicatationh}/SprofileHIlthegleglthware//{Labelyfrienfenciar a//{ApplicatationROTATATACIONATACIÓNTACIATIBLIBL}http: // localhost: 4001/client-dev.yml
Cliente de configuración
Usamos config-client como cliente de configuración y agregamos dependencias:
<Spendency> <ProupId> org.springframework.boot </groupid> <artifactid> spring-boot-starter-web </artifactid> <pendency> <grupid> org.springframework.cloud </proupid> <arifactid> springcloud-starter-config </arifactid> </pendency>
Configurar en bootstrap.yml (bootstrap.yml se cargará antes de la aplicación.yml):
Primavera: Aplicación: Nombre: Cliente Cloud: Configuración: Uri: http: // localhost: 4001/## representa la dirección del perfil del centro de configuración: dev # es equivalente a spring.profiles.active atributo, pero la prioridad es más alta que el spring.profiles.active #label: config # si especifica el uso de la etiqueta en el servidor especificado, el servidor de cliente, el portero, el portero: portero de 4002 #
Cree un TestController en config-client:
@RestControllerPublic TestController {@Value ("$ {info}") private String Info; @RequestMapping (valor = "/getinfo") public String getInfo () {return this.info; }}Visite http: // localhost: 4002/getinfo
Modifique el perfil en el archivo de configuración config-client para producirlo y acceder a él para ver los resultados.
Ahora hemos implementado los archivos de configuración para administrarlos de manera unificada, pero después de modificar los archivos de configuración, ¿cómo no podemos reiniciar y entrar en vigencia?
Introducimos dependencias en config-client:
<Spendency> <MoupRoMID> org.springframework.boot </groupid> <artifactId> spring-boot-starter-actuator </artifactid> </dependency>
Agregue la anotación @RefreshScope a la clase que necesita actualización dinámica, aquí la agregamos al TestController. Y deshabilitar la autenticación de permiso del actuador en el archivo de configuración:
Gestión: Seguridad: habilitada: falso
Reinicie el proyecto, http: // localhost: 4002/getInfo El resultado es: config-dev, y ahora modifique el archivo config-dev.yml:
Información: config-dev-1.0
Llame al método del actuador y actualice manualmente. http: // localhost: 4002/actualización Nota: debe ser el método de publicación. Puedes ver qué cambios son:
["Información"]
Visite http: // localhost: 4002/getinfo nuevamente y el resultado es: config-dev-1.0.
Descubrimos que aunque la configuración se puede actualizar dinámicamente, el método de actualización debe llamarse manualmente cada vez. Si tengo 1,000 servicios, tengo que llamarlo 1,000 veces. ¿Hay una mejor manera? Eso es usarlo junto con Spring Cloud Bus.
Altamente disponible
Ahora nuestro servidor de configuración es un servicio de un solo punto, y una vez que este último cliente de configuración está colgado, no se utilizará. Entonces, en la generación, el servidor de configuración debe estar altamente disponible, entonces, ¿cómo hacerlo? Es muy simple. Al igual que la alta disponibilidad de Eureka mencionada anteriormente, solo necesita implementar varios servidores de configuración más.
Utilizamos el Proyecto Eureka como centro de registro con el puerto: 7001.
Copie la servidor de configuración a config-server-1, con puerto: 4003, y registre ambos servidores de configuración en el centro de registro.
Registre config-client en el registro y especifique para obtener el servidor de configuración de eureka:
Spring: Cloud: config: #uri: http: // localhost: 4001/## representa la dirección del centro de configuración, especifique directamente el perfil de dirección de config: dev #label: configs descubry: habilitado: true # habilitar para obtener el servicio del servidor config: id del servidor de configuración # config name de servicio del servidor de configuración # config # nombre del servidor de configuración:
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.