Spring Cloud Config Server ofrece los siguientes beneficios:
API basada en recursos HTTP para configuración externa (pares nombre-valor o contenido YAML equivalente)
Cifrar y descifrar valores de propiedades (simétricos o asimétricos)
Integrable fácilmente en una aplicación Spring Boot usando @EnableConfigServer
Específicamente para aplicaciones Spring, Spring Cloud Config Client le permite:
Enlace al servidor de configuración e inicialice Spring Environment
con fuentes de propiedades remotas.
Cifrar y descifrar valores de propiedades (simétricos o asimétricos).
@RefreshScope
para Spring @Beans
que desean reinicializarse cuando cambia la configuración.
Utilice puntos finales de gestión:
/env
para actualizar Environment
y volver a vincular @ConfigurationProperties
y niveles de registro.
/refresh
para actualizar los beans @RefreshScope
.
/restart
para reiniciar el contexto Spring (deshabilitado de forma predeterminada).
/pause
y /resume
para llamar a los métodos Lifecycle
( stop()
y start()
en ApplicationContext
).
Contexto de la aplicación Bootstrap: un contexto principal para la aplicación principal que se puede entrenar para hacer cualquier cosa (de forma predeterminada, se vincula al servidor de configuración y descifra los valores de las propiedades).
Puede encontrar una aplicación de muestra aquí. Es una aplicación Spring Boot, por lo que puede ejecutarla utilizando los mecanismos habituales (por ejemplo, mvn spring-boot:run
). Cuando se ejecuta, busca el servidor de configuración en http://localhost:8888
(un valor predeterminado configurable), por lo que también puede ejecutar el servidor para verlo todo funcionando en conjunto.
El ejemplo tiene un caso de prueba en el que el servidor de configuración también se inicia en la misma JVM (con un puerto diferente) y la prueba afirma que una propiedad de entorno del repositorio de configuración de git está presente. Para cambiar la ubicación del servidor de configuración, puede configurar spring.cloud.config.uri
en bootstrap.yml
(o en las propiedades del sistema y otros lugares).
El caso de prueba tiene un método main()
que ejecuta el servidor de la misma manera (observe los registros de su puerto), por lo que puede ejecutar todo el sistema en un proceso y jugar con él (por ejemplo, puede ejecutar el main()
método en su IDE). El método main()
usa target/config
para el directorio de trabajo del repositorio git, por lo que puedes realizar cambios locales allí y verlos reflejados en la aplicación en ejecución. El siguiente ejemplo muestra una sesión de retoques con el caso de prueba:
$ curl localhost:8080/env/muestra mi prueba $ vi objetivo/config/mytest.properties .. cambiar el valor de "muestra", opcionalmente confirmar $ curl -X POST localhost:8080/actualizar ["muestra"] $ curl localhost:8080/env/muestra valor de muestra
El punto final de actualización informa que la propiedad "muestra" cambió.
Para compilar el código fuente necesitarás instalar JDK 17.
Spring Cloud usa Maven para la mayoría de las actividades relacionadas con la compilación, y debería poder despegar con bastante rapidez clonando el proyecto que le interesa y escribiendo
$ ./mvnw instalar
Nota | También puede instalar Maven (>=3.3.3) usted mismo y ejecutar el comando mvn en lugar de ./mvnw en los ejemplos siguientes. Si hace eso, es posible que también necesite agregar -P spring si su configuración local de Maven no contiene declaraciones de repositorio para los artefactos de prelanzamiento de Spring. |
Nota | Tenga en cuenta que es posible que necesite aumentar la cantidad de memoria disponible para Maven configurando una variable de entorno MAVEN_OPTS con un valor como -Xmx512m -XX:MaxPermSize=128m . Intentamos cubrir esto en la configuración .mvn , por lo que si considera que debe hacerlo para que la compilación se realice correctamente, presente un ticket para agregar la configuración al control de fuente. |
Los proyectos que requieren middleware (es decir, Redis) para realizar pruebas generalmente requieren que una instancia local de [Docker](https://www.docker.com/get-started) esté instalada y en ejecución.
El módulo spring-cloud-build tiene un perfil "docs" y, si lo activa, intentará crear fuentes asciidoc utilizando Antora desde modules/ROOT/
.
Como parte de ese proceso, buscará un docs/src/main/asciidoc/README.adoc
y lo procesará cargando todas las inclusiones, pero sin analizarlo ni renderizarlo, simplemente copiándolo en ${main.basedir}
(el valor predeterminado es ${basedir}
, es decir, la raíz del proyecto). Si hay algún cambio en el archivo README, aparecerá después de una compilación de Maven como un archivo modificado en el lugar correcto. Simplemente compromételo e impulsa el cambio.
Si no tiene una preferencia IDE, le recomendamos que utilice Spring Tools Suite o Eclipse cuando trabaje con el código. Usamos el complemento eclipse m2eclipse para soporte de maven. Otros IDE y herramientas también deberían funcionar sin problemas siempre que utilicen Maven 3.3.3 o superior.
Los proyectos de Spring Cloud requieren que el perfil Maven 'spring' esté activado para resolver los repositorios de instantáneas y hitos de Spring. Utilice su IDE preferido para configurar este perfil para que esté activo, o puede experimentar errores de compilación.
Recomendamos el complemento m2eclipse eclipse cuando trabaje con eclipse. Si aún no tiene instalado m2eclipse, está disponible en "eclipse Marketplace".
Nota | Las versiones anteriores de m2e no son compatibles con Maven 3.3, por lo que una vez que los proyectos se importen a Eclipse, también deberá indicarle a m2eclipse que use el perfil correcto para los proyectos. Si ve muchos errores diferentes relacionados con los POM en los proyectos, verifique que tenga una instalación actualizada. Si no puede actualizar m2e, agregue el perfil "spring" a su settings.xml . Alternativamente, puede copiar la configuración del repositorio desde el perfil "spring" del pom principal a su settings.xml . |
Si prefiere no utilizar m2eclipse, puede generar metadatos del proyecto eclipse usando el siguiente comando:
$ ./mvnw eclipse:eclipse
Los proyectos de eclipse generados se pueden importar seleccionando import existing projects
en el menú file
.
Si obtiene una excepción debido a un "tamaño de clave ilegal" y está utilizando el JDK de Sun, debe instalar los archivos de política de jurisdicción de fuerza ilimitada de Java Cryptography Extension (JCE). Consulte los siguientes enlaces para obtener más información:
Java 6JCE
Java 7 JCE
Java 8 JCE
Extraiga los archivos JCE en la carpeta JDK/jre/lib/security
para cualquier versión de JRE/JDK x64/x86 que utilice.
Spring Cloud se lanza bajo la licencia Apache 2.0 no restrictiva y sigue un proceso de desarrollo de Github muy estándar, utilizando el rastreador de Github para problemas y fusionando solicitudes de extracción en main. Si desea contribuir incluso con algo trivial, no lo dude y siga las pautas a continuación.
Antes de aceptar un parche no trivial o una solicitud de extracción, necesitaremos que firme el Acuerdo de licencia de colaborador. Firmar el acuerdo de colaborador no otorga a nadie derechos de compromiso sobre el repositorio principal, pero sí significa que podemos aceptar sus contribuciones y, si lo hacemos, obtendrá un crédito de autor. A los contribuyentes activos se les puede pedir que se unan al equipo central y se les puede dar la posibilidad de fusionar solicitudes de extracción.
Este proyecto se adhiere al código de conducta del Pacto del Colaborador. Al participar, se espera que respete este código. Informe cualquier comportamiento inaceptable a [email protected].
Ninguno de estos es esencial para una solicitud de extracción, pero todos ayudarán. También se pueden agregar después de la solicitud de extracción original pero antes de una combinación.
Utilice las convenciones de formato de código de Spring Framework. Si usa Eclipse, puede importar la configuración del formateador usando el archivo eclipse-code-formatter.xml
del proyecto Spring Cloud Build. Si usa IntelliJ, puede usar el complemento Eclipse Code Formatter para importar el mismo archivo.
Asegúrese de que todos los archivos .java
nuevos tengan un comentario de clase Javadoc simple con al menos una etiqueta @author
que lo identifique y, preferiblemente, al menos un párrafo sobre para qué sirve la clase.
Agregue el comentario del encabezado de la licencia ASF a todos los archivos .java
nuevos (cópielos de los archivos existentes en el proyecto)
Agréguese como @author
a los archivos .java que modifique sustancialmente (más que cambios cosméticos).
Agregue algunos Javadocs y, si cambia el espacio de nombres, algunos elementos del documento XSD.
Algunas pruebas unitarias también ayudarían mucho: alguien tiene que hacerlo.
Si nadie más está usando su rama, vuelva a basarla en la rama principal actual (u otra rama de destino en el proyecto principal).
Al escribir un mensaje de confirmación, siga estas convenciones; si está solucionando un problema existente, agregue Fixes gh-XXXX
al final del mensaje de confirmación (donde XXXX es el número del problema).
Spring Cloud Build viene con un conjunto de reglas de estilo de verificación. Puede encontrarlos en el módulo spring-cloud-build-tools
. Los archivos más notables del módulo son:
└── src ├── estilo de verificación │ └── checkstyle-suppressions.xml (3) └── principal └── recursos ├── checkstyle-header.txt (2) └── checkstyle.xml (1)
Reglas de estilo de verificación predeterminadas
Configuración del encabezado del archivo
Reglas de supresión predeterminadas
Las reglas de estilo de verificación están deshabilitadas de forma predeterminada . Para agregar checkstyle a su proyecto, simplemente defina las siguientes propiedades y complementos.
<propiedades> <maven-checkstyle-plugin.failsOnError>verdadero</maven-checkstyle-plugin.failsOnError> (1) <maven-checkstyle-plugin.failsOnViolation>verdadero </maven-checkstyle-plugin.failsOnViolation> (2) <maven-checkstyle-plugin.includeTestSourceDirectory>verdadero </maven-checkstyle-plugin.includeTestSourceDirectory> (3) </propiedades> <construir> <complementos> <complemento> (4) <groupId>io.spring.javaformat</groupId> <artifactId>complemento-spring-javaformat-maven</artifactId> </complemento> <complemento> (5) <groupId>org.apache.maven.plugins</groupId> <artifactId>complemento-maven-checkstyle</artifactId> </complemento> </complementos> <informes> <complementos> <complemento> (5) <groupId>org.apache.maven.plugins</groupId> <artifactId>complemento-maven-checkstyle</artifactId> </complemento> </complementos> </informes> </construcción>
Falla la compilación debido a errores de Checkstyle
Falla la construcción sobre violaciones de Checkstyle
Checkstyle analiza también las fuentes de prueba
Agregue el complemento Spring Java Format que reformateará su código para pasar la mayoría de las reglas de formato Checkstyle
Agregue el complemento checkstyle a sus fases de creación e informes
Si necesita suprimir algunas reglas (por ejemplo, la longitud de la línea debe ser más larga), entonces es suficiente que defina un archivo en ${project.root}/src/checkstyle/checkstyle-suppressions.xml
con sus supresiones. Ejemplo:
<?xml versión="1.0"?> <!DOCTYPE supresiones PUBLIC "-//Puppy Crawl//Supresiones DTD 1.1//ES" "https://www.puppycrawl.com/dtds/suppressions_1_1.dtd"> <supresiones> <suprimir archivos=".*ConfigServerApplication.java" comprueba="HideUtilityClassConstructor"/> <suprimir archivos=".*ConfigClientWatch.java" comprueba="LineLengthCheck"/> </supresiones>
Es recomendable copiar el ${spring-cloud-build.rootFolder}/.editorconfig
y ${spring-cloud-build.rootFolder}/.springformat
a su proyecto. De esa forma, se aplicarán algunas reglas de formato predeterminadas. Puede hacerlo ejecutando este script:
$ curl https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/main/.editorconfig -o .editorconfig
$ touch .springformat
Para configurar Intellij, debe importar nuestras convenciones de codificación, perfiles de inspección y configurar el complemento checkstyle. Los siguientes archivos se pueden encontrar en el proyecto Spring Cloud Build.
└── src ├── estilo de verificación │ └── checkstyle-suppressions.xml (3) └── principal └── recursos ├── checkstyle-header.txt (2) ├── checkstyle.xml (1) └── intelij ├── Intellij_Project_Defaults.xml (4) └── Intellij_Spring_Boot_Java_Conventions.xml (5)
Reglas de estilo de verificación predeterminadas
Configuración del encabezado del archivo
Reglas de supresión predeterminadas
Valores predeterminados del proyecto para Intellij que aplican la mayoría de las reglas de Checkstyle
Convenciones de estilo de proyecto para Intellij que aplican la mayoría de las reglas de Checkstyle
Vaya a File
→ Settings
→ Editor
→ Code style
. Allí haga clic en el icono al lado de la sección Scheme
. Allí, haga clic en el valor Import Scheme
y seleccione la opción Intellij IDEA code style XML
. Importe el archivo spring-cloud-build-tools/src/main/resources/intellij/Intellij_Spring_Boot_Java_Conventions.xml
.
Vaya a File
→ Settings
→ Editor
→ Inspections
. Allí haz clic en el icono al lado de la sección Profile
. Allí, haga clic en Import Profile
e importe el archivo spring-cloud-build-tools/src/main/resources/intellij/Intellij_Project_Defaults.xml
.
Para que Intellij funcione con Checkstyle, debe instalar el complemento Checkstyle
. Es recomendable instalar también Assertions2Assertj
para convertir automáticamente las afirmaciones JUnit
Vaya a File
→ Settings
→ Other settings
→ Checkstyle
. Allí haga clic en el icono +
en la sección Configuration file
. Allí, tendrás que definir de dónde se deben elegir las reglas de estilo de verificación. En la imagen de arriba, hemos elegido las reglas del repositorio clonado de Spring Cloud Build. Sin embargo, puede señalar el repositorio GitHub de Spring Cloud Build (por ejemplo, para checkstyle.xml
: https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/main/spring-cloud-build-tools/src/main/resources/checkstyle.xml
). Necesitamos proporcionar las siguientes variables:
checkstyle.header.file
: apúntelo al archivo Spring Cloud Build, spring-cloud-build-tools/src/main/resources/checkstyle-header.txt
ya sea en su repositorio clonado o a través de https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/main/spring-cloud-build-tools/src/main/resources/checkstyle-header.txt
URL.
checkstyle.suppressions.file
: supresiones predeterminadas. Indíquelo al archivo Spring Cloud Build, spring-cloud-build-tools/src/checkstyle/checkstyle-suppressions.xml
ya sea en su repositorio clonado o a través de https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/main/spring-cloud-build-tools/src/checkstyle/checkstyle-suppressions.xml
URL.
checkstyle.additional.suppressions.file
: esta variable corresponde a las supresiones en su proyecto local. Por ejemplo, estás trabajando en spring-cloud-contract
. Luego apunte a la carpeta project-root/src/checkstyle/checkstyle-suppressions.xml
. Un ejemplo de spring-cloud-contract
sería: /home/username/spring-cloud-contract/src/checkstyle/checkstyle-suppressions.xml
.
Importante | Recuerde configurar el Scan Scope en All sources ya que aplicamos reglas de estilo de verificación para las fuentes de producción y prueba. |
Spring Cloud Build incluye basepom:duplicate-finder-maven-plugin
, que permite marcar clases y recursos duplicados y en conflicto en el classpath de Java.
El buscador de duplicados está habilitado de forma predeterminada y se ejecutará en la fase verify
de su compilación de Maven, pero solo tendrá efecto en su proyecto si agrega el duplicate-finder-maven-plugin
a la sección build
del pom.xml
del proyecto.
< build >
< plugins >
< plugin >
< groupId >org.basepom.maven</ groupId >
< artifactId >duplicate-finder-maven-plugin</ artifactId >
</ plugin >
</ plugins >
</ build >
Para otras propiedades, hemos establecido los valores predeterminados que se enumeran en la documentación del complemento.
Puede anularlos fácilmente, pero configurando el valor de la propiedad seleccionada con el prefijo duplicate-finder-maven-plugin
. Por ejemplo, configure duplicate-finder-maven-plugin.skip
en true
para omitir la verificación de duplicados en su compilación.
Si necesita agregar ignoredClassPatterns
o ignoredResourcePatterns
a su configuración, asegúrese de agregarlos en la sección de configuración del complemento de su proyecto:
< build >
< plugins >
< plugin >
< groupId >org.basepom.maven</ groupId >
< artifactId >duplicate-finder-maven-plugin</ artifactId >
< configuration >
< ignoredClassPatterns >
< ignoredClassPattern >org.joda.time.base.BaseDateTime</ ignoredClassPattern >
< ignoredClassPattern >.*module-info</ ignoredClassPattern >
</ ignoredClassPatterns >
< ignoredResourcePatterns >
< ignoredResourcePattern >changelog.txt</ ignoredResourcePattern >
</ ignoredResourcePatterns >
</ configuration >
</ plugin >
</ plugins >
</ build >