¡Poco conocimiento, gran desafío! Este artículo está participando en la creación de " Consejos para programadores ".
Wikipedia explica
Wikipedia lo explica de la siguiente manera:
Convención sobre configuración , también conocida como programación por convención , es un paradigma de diseño de software que tiene como objetivo reducir la cantidad de decisiones que los desarrolladores de software deben tomar y vivir los beneficios de la simplicidad sin perder flexibilidad.
Esencialmente, el desarrollador solo necesita especificar las partes de la aplicación que no se ajustan al contrato, por ejemplo, si hay una clase llamada Ventas en el modelo, la tabla correspondiente en la base de datos se llamará ventas de manera predeterminada. Solo si se desvía de esta convención, como nombrar la tabla "productos_vendidos", necesita escribir la configuración sobre este nombre.
Si las convenciones de la herramienta que está utilizando coinciden con sus expectativas, puede omitir la configuración; de lo contrario, puede configurarla de la manera que desee.
comprensión personal
La convención es mejor que la configuración, no es configuración cero o ninguna configuración, sino reducir la configuración a través de la convención.
La convención es mejor que la configuración. No es una nueva rutina, una nueva tecnología o una nueva idea, pero siempre ha existido. Spring Boot simplemente la amplifica y realmente logra la convención sobre la configuración.
Por ejemplo, en Spring Boot, cuando importamos spring-boot-starter-web
un archivo , automáticamente nos ayudará a importar las dependencias relacionadas de Spring MVC (incluido Jackson compatible con Json y Hibernate Validator de validación de datos) y un contenedor Tomcat incorporado, que hace que las etapas de desarrollo puede ejecutar un proyecto web de forma independiente, ya sea directamente a través del método principal o como un paquete JAR.
Spring Boot acepta que cuando spring-boot-starter-web
importas , se acepta que eres un entorno de desarrollo web, y cuando eres un entorno web, se acepta que usarás Spring MVC (Struts2 y así sucesivamente, adiós, porque no es biológico, y es cierto No hay una alta tasa de uso de Spring MVC) En cuanto a otros, los necesitará y se importarán de forma predeterminada. Cuando se sienta inapropiado, puede usar menos cambios para satisfacer sus necesidades.
Spring está promoviendo el concepto de diseño de "convención sobre configuración", que comenzó con la versión de anotación de Spring (lanzada en JDK5.0, usando metadatos e introduciendo el concepto de anotación). La introducción de anotaciones es para reducir algunas configuraciones predeterminadas, y la introducción de anotaciones también representa el comienzo de una configuración simplificada. Oficialmente, la base de Spring es este hecho.
SpringBoot acordó reducir las dependencias en forma de arrancadores, por lo que muchos arrancadores de uso común se han lanzado uno tras otro.
Cómo reflejar en Spring Boot
Modo de operación
spring-boot-starter-web
Incluye las dependencias relacionadas de Spring MVC (incluido Jackson compatible con Json y Hibernate Validator para la validación de datos) y un contenedor Tomcat incorporado, que permite que un proyecto WEB se ejecute de forma independiente a través del método principal o el paquete JAR durante la fase de desarrollo. En la fase de implementación, también se puede marcar como un paquete WAR y ejecutar en el entorno de producción.
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class StorageApplication {
public static void main(String[] args) {
SpringApplication.run(StorageApplication.class, args);
}
}
复制代码
En una clase @SpringBootApplication
anotada , use SpringApplication
el run
método para mover elementos a través del JAR.
Herede la SpringBootServletInitializer
clase e implemente elconfigure
método para iniciar el proyecto a través de WAR.application
sources
archivo de configuración
El archivo de configuración de Spring Boot debe ser, y solo puede ser, un archivo application.
con nombre yml
o properties
file , y es único.
De forma predeterminada, Spring Boot solo irá src-main-resources
a la carpeta para encontrar el application
archivo de configuración.
spring.profiles.active
Se puede definir una propiedad llamada en el archivo de configuración, que puede leer diferentes archivos de configuración según los diferentes entornos operativos. Por ejemplo dev
, , Spring Boot también application-dev.yml
leerá la configuración del entorno del archivo de configuración.
Spring Boot tiene dos formas de inyectar las propiedades del archivo de configuración: una es aceptar las propiedades en el archivo de configuración a través de @Value
anotaciones y la otra es usar @ConfigurationProperties
anotaciones para inyectar automáticamente las propiedades correspondientes en beans a través del método set.
- Al
@Value
inyectar propiedades, el receptor puede ser un parámetro de método o una variable miembro, por ejemplo:
/**
* elasticsearch的地址
*/
@Value("${elasticsearch.host}")
private String host;
复制代码
- Al inicializar el bean
@ConfigurationProperties
leyendo la configuración, se llamará directamente a la inyección del método set correspondiente:
@Bean(name = "account")
@ConfigurationProperties(prefix = "spring.datasource.account")
public DataSource accountDbDataSource() {
return DataSourceBuilder.create().build();
}
复制代码
Fuente de datos
Si se usa Spring-boot-starter-data-jpa
, Spring Boot creará automáticamente un DataSource Bean. Sus propiedades se pueden definir directamente en el archivo de configuración, con el prefijo Spring.datasource
. Y no hay necesidad de especificar el dialecto de la base de datos, este bean determinará automáticamente qué base de datos usar de acuerdo con el controlador de la base de datos del que siempre depende el proyecto.
Del mismo modo, si se usa spring-boot-starter-data-redis
, también se creará automáticamente RedisTemlete
, ConnectionFactory
etc. Bean. Las propiedades también se pueden definir en archivos de configuración, con el prefijo spring.redis
.