Configuración del arranque de primavera --- 02

En segundo lugar, el archivo de configuración

1. Perfiles

SpringBoot utilizar un archivo de configuración global, el nombre del archivo de configuración es fijo

  • application.properies
  • application.yml

papel perfil: Modificar la configuración automática de valor predeterminado SpringBoot; SpringBot en la planta baja nos dio configura automáticamente;

Yamla (yamla An't Markup Language)

YAML Un lenguaje de marcado: es un lenguaje de marcas

No es un lenguaje de marcas: YANL no es el lenguaje de marcado

Markup Language:

La encuesta anterior: La mayoría está utilizando el archivo xxxx.xml

YAML: centradas en datos que json, xml y así es más adecuado para el archivo de configuración

Ejemplo de configuración: YAML

server:
    port:8081

XML:

<server>
    <port>8081</port>
</server>

2. sintaxis YAML

1. gramática básica

k: Space v: designa un par clave-valor (debe espacio);

Los espacios en blanco indentación para controlar la jerarquía, siempre y cuando uno está datos alineado a la izquierda, es una jerarquía

server:
    port: 8081
    path: /hello

Atributos y valores son sensibles

2. El valor de la redacción

Literales: valores comunes (números, cadenas, Boolean)

k: v: literalmente escribir directamente

string predeterminado sin añadir una sola o comillas dobles

"": Las comillas dobles; no habrá escapar de la cadena de caracteres especiales, caracteres especiales como ellos mismos desean de la intención

Nombre: "zhangsan \ n Lisi": salida de línea de alimentación zhangsan Lisi

'': Cita individual; escapará caracteres especiales, caracteres especiales última instancia, sólo un carácter ordinario

Nombre: 'zhangsan \ n Lisi': zhangsan salida \ n Lisi

Objeto, Mapa (atributos y valores) (pares de clave y valor):

k: v: la relación entre los atributos y los valores de un objeto a escribir la siguiente línea; nota indentación

v manera: objeto o k

friends
    lastName: zhangsan
    age: 20

redacción en línea:

friends: {lastName: zhangsan,age: 18}

Array (List, Set)

Representa un elemento en los valores de la matriz - con

pets:
 - cat
 - dog
 - pig

redacción en línea

pets: [cat,dog,pig]

3. Los valores de perfil de inyección

1. Propiedades del archivo de configuración por defecto UTF-8 pueden ser confusos en la idea de

2. valor de adquisición y el valor de adquisición de comparación @value @ComfigurationProperties

@ComfigurationProperties @Valor
función archivo de configuración de la inyección por lotes Un designado
Débilmente unida (sintaxis suelto) apoyo No es compatible
juegos No es compatible apoyo
comprobación de los datos JSR303 apoyo No es compatible

Perfil yml o propiedades que puedan llegar a valor;

Si usted dice que sólo tenemos que conseguir un poco de lógica de negocio en un valor concreto del archivo de configuración, utilice el @Valor;

Si decimos que escribimos un JavaBean dedicado a archivos de asignación y configuración, sólo tiene que utilizar @ComfigurationProperties;

3. Los valores del perfil de inyección de verificación

@Component
@ConfigurationProperties(prefix = "person")  //默认从全局文件中获取值
@Validated   //校验
public class Person {

    /**
     *  <bean class="person">
     *     <property name="lastName" value="字面量/${key}从环境、配置文件中获取值/#{SpEL}"
     *  </bean>
     */
    //@Value("${person.last-name}")
    //@Email    //lastName必须是邮箱格式
    private String lastName;
    //@Value("#{11*2}")
    private Integer age;
    //@Value("true")
    private Boolean boss;
    
    private Date birth;
    private Map<String,Object> maps;
    private List<Object> lists;
    private Dog dog;
}

4. @ @ PropertySource y ImportResource

@ PropertySource : cargar el archivo de configuración especificado

@PropertySource(value = {"classpath:person.properties"})
@Component
@ConfigurationProperties(prefix = "person")
@Validated   //校验
public class Person {}

@ ImportResource : Importar archivo de configuración del resorte, de modo que el contenido del archivo de configuración que es para tener efecto;

Primavera de arranque no hay ningún archivo de configuración de la primavera, escribir nuestros propios archivos de configuración, no se puede identificar automáticamente;

¿Le gustaría archivo de configuración de Spring para tener efecto, vino cargado; @ ImportResource marcado en una clase de configuración

//导入Spring的配置文件,让其生效
@ImportResource(locations = {"classpath:beans.xml"})
@SpringBootApplication
public class SpringBootQuickApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringBootQuickApplication.class, args);
    }

}

No escribir el archivo de configuración de Spring

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="helloService" class="com.spring.springbootquick.service.HelloService"></bean>
</beans>

SpringBoot manera de agregar componentes al contenedor recomienda; recomienda la anotación completa

1. 配置类========Spring的配置文件

2. 使用@Bean给容器中添加组件
/**
 * @Configuration,指明当前类是一个配置类;就是用来替代之前的Sping配置文件
 * 在配置文件中用<bean></bean>标签添加组件
 */
@Configuration
public class MyAppConfig {

    //将方法的返回值添加到容器中,容器中这个组件默认的id就是方法名
    @Bean
    public HelloService helloService(){
        return new HelloService();
    }
}

4. marcador de posición fichero de configuración

1. Números Aleatorios

$(random.value)
$(random.int)
$(random.long)
$(random.int(10))
$(random.int[1024,65536])

2. Valor marcador de posición adquirido previamente configurado, se puede utilizar si no: especificar el valor predeterminado

person.lastName=zhangsan${random.uuid}
person.age=${random.int}
person.birth=2010/10/10
person.boss=false
person.maps.k1=v1
person.maps.k2=v2
person.lists=a,b,c
person.dog.name=${person.hello:hello}_dog
person.dog.age=15

5. Perfil

Perfil del resorte está configurado para proporcionar diferentes funciones a diferentes entornos para el apoyo, a través de la activación de conmutación rápida, los parámetros especificados, etc.

archivo 1. Multi-Perfil

Nosotros, en la preparación del archivo de configuración maestro, el nombre de archivo puede ser aplicación- (perfil) .properties / yml

Application.properties utilizan la configuración predeterminada;

2. yml soporte de bloque múltiple el camino

server:
  port: 8081
spring:
  profiles:
    active: prod

---
server:
  port: 8082
spring:
  profiles: dev

---
server:
  port: 8083
spring:
  profiles: prod  #指定属于哪个环境

3. Activar el perfil especificado

  1. Se especifica en el archivo de configuración

    spring.profiles.active = dev

  2. Línea de comandos

    java-jar primavera-boot-config.0.0.1-SNAPSHOT.jar --spring.profiles.active = dev

  3. parámetros de la máquina virtual:

    -Dspring-profiles.active = dev

6. El archivo de configuración es la posición cargada

Application.properties archivo application.yml o escanear la siguiente ubicación del resorte de arranque de arranque como archivo de configuración por defecto de arranque de la primavera

-file:./config/
-file:./
-classpath:/config/
-classpath:/

Estos son en orden de prioridad descendente, todos los archivos son posición cargada, la alta prioridad de los contenidos será contenido configuración de baja prioridad sobrescriben

SpringBoot se carga desde las cuatro posiciones de todos los archivos de configuración principal: configuración complementaria

También podemos cambiar la configuración predeterminada mediante la configuración de spring.config.location

Después de un paquete de proyectos bien, podemos utilizar los parámetros de línea de comandos en forma de, al inicio del proyecto para especificar la nueva ubicación del archivo de configuración; especificar el archivo de configuración y la carga por defecto de la configuración de estos archivos trabajan juntos para formar una configuración complementaria;

7. La secuencia de carga de la configuración externa

SpringBoot también puede ser cargado desde el perfil de ubicación; nivel de prioridad baja; override configuración de alta prioridad inferior configuración de prioridad, toda la configuración complementaria configuración formada

  1. Parámetros de línea de comando

java -jar primavera-boot-config.0.0.1-SNAPSHOT.jar --server.port = 8,085 --server.context.path = / abc

  1. NDI propiedades comp / env: desde Java

  2. Java propiedades del sistema (System.getProperties ())

  3. Operar las variables de entorno del sistema

  4. RandomValuePropertySource configuración aleatoria. * Valor de la propiedad

Desde el exterior para el paquete de tarro paquete tarro interior
se carga primero tira de perfil

  1. jar envase exterior o aplicación- {perfil} .properties application.yml (con spring.profile) perfil

  2. Interna aplicación- paquete jar {} perfil .properties o application.yml (con spring.profile) perfil

  3. tarro o envase exterior application.properties application.yml (sin spring.profile) perfil

  4. application.properties paquete frasco internos o application.yml (sin spring.profile) perfil

  5. notas de clase @PropertySource en @Configuration

  6. Por SpringApplication.setDefaultProperties especificados propiedad predeterminada

Todas las configuraciones admitidas ser cargados Fuente: se refieren a la documentación oficial

8. Principio de configuración automática

Perfiles en el final de qué escribir? Cómo escribir? principio de configuración automática:

Los perfiles pueden ser configurados con referencia a los atributos

1. Principio de configuración automática

  • SpringBoot activa cuando la configuración de clase principal de carga, abrir la @EnableAutoConfiguration configuración automática

  • @EnableAutoConfiguration 作用:

    • EnableAutoConfigurationImportSelector introdujo el uso de algunos componentes a buque

    • El contenido puede ser visto selectimports () método

    • Lista Configuraciones = this.getCandidateConfigurations (annotationMetadata, atributos), la obtención de los candidatos de configuración

      • SpringFactoriesLoader.loadFactoryNames
        扫描所有jar包类路径下的  META-INF/spring.factories
        把扫描到的这些文件内容包装成properties对象
        从properties中获取到EnableAutoConfiguration.class类 (类名)对应的值,然后把他们添加到容器中

      Los valores de todos los EnableAutoConfiguration META-INF / spring.factories ruta de clase dispuesto en el interior añaden al recipiente;

      # Auto Configure
      org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
      org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
      org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\
      org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\
      org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration,\
      org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration,\
      org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration,\
      org.springframework.boot.autoconfigure.cloud.CloudAutoConfiguration,\
      org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration,\
      org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration,\
      org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration,\
      org.springframework.boot.autoconfigure.couchbase.CouchbaseAutoConfiguration,\
      org.springframework.boot.autoconfigure.dao.PersistenceExceptionTranslationAutoConfiguration,\
      org.springframework.boot.autoconfigure.data.cassandra.CassandraDataAutoConfiguration,\
      org.springframework.boot.autoconfigure.data.cassandra.CassandraRepositoriesAutoConfiguration,\
      org.springframework.boot.autoconfigure.data.couchbase.CouchbaseDataAutoConfiguration,\
      org.springframework.boot.autoconfigure.data.couchbase.CouchbaseRepositoriesAutoConfiguration,\
      org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchAutoConfiguration,\
      org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration,\
      org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchRepositoriesAutoConfiguration,\
      org.springframework.boot.autoconfigure.data.jpa.JpaRepositoriesAutoConfiguration,\
      org.springframework.boot.autoconfigure.data.ldap.LdapDataAutoConfiguration,\
      org.springframework.boot.autoconfigure.data.ldap.LdapRepositoriesAutoConfiguration,\
      org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration,\
      org.springframework.boot.autoconfigure.data.mongo.MongoRepositoriesAutoConfiguration,\
      org.springframework.boot.autoconfigure.data.neo4j.Neo4jDataAutoConfiguration,\
      org.springframework.boot.autoconfigure.data.neo4j.Neo4jRepositoriesAutoConfiguration,\
      org.springframework.boot.autoconfigure.data.solr.SolrRepositoriesAutoConfiguration,\
      org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration,\
      org.springframework.boot.autoconfigure.data.redis.RedisRepositoriesAutoConfiguration,\
      org.springframework.boot.autoconfigure.data.rest.RepositoryRestMvcAutoConfiguration,\
      org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration,\
      org.springframework.boot.autoconfigure.elasticsearch.jest.JestAutoConfiguration,\
      org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration,\
      org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration,\
      org.springframework.boot.autoconfigure.h2.H2ConsoleAutoConfiguration,\
      org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration,\
      org.springframework.boot.autoconfigure.hazelcast.HazelcastAutoConfiguration,\
      org.springframework.boot.autoconfigure.hazelcast.HazelcastJpaDependencyAutoConfiguration,\
      org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration,\
      org.springframework.boot.autoconfigure.integration.IntegrationAutoConfiguration,\
      org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration,\
      org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\
      org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration,\
      org.springframework.boot.autoconfigure.jdbc.JndiDataSourceAutoConfiguration,\
      org.springframework.boot.autoconfigure.jdbc.XADataSourceAutoConfiguration,\
      org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration,\
      org.springframework.boot.autoconfigure.jms.JmsAutoConfiguration,\
      org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration,\
      org.springframework.boot.autoconfigure.jms.JndiConnectionFactoryAutoConfiguration,\
      org.springframework.boot.autoconfigure.jms.activemq.ActiveMQAutoConfiguration,\
      org.springframework.boot.autoconfigure.jms.artemis.ArtemisAutoConfiguration,\
      org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration,\
      org.springframework.boot.autoconfigure.groovy.template.GroovyTemplateAutoConfiguration,\
      org.springframework.boot.autoconfigure.jersey.JerseyAutoConfiguration,\
      org.springframework.boot.autoconfigure.jooq.JooqAutoConfiguration,\
      org.springframework.boot.autoconfigure.kafka.KafkaAutoConfiguration,\
      org.springframework.boot.autoconfigure.ldap.embedded.EmbeddedLdapAutoConfiguration,\
      org.springframework.boot.autoconfigure.ldap.LdapAutoConfiguration,\
      org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration,\
      org.springframework.boot.autoconfigure.mail.MailSenderAutoConfiguration,\
      org.springframework.boot.autoconfigure.mail.MailSenderValidatorAutoConfiguration,\
      org.springframework.boot.autoconfigure.mobile.DeviceResolverAutoConfiguration,\
      org.springframework.boot.autoconfigure.mobile.DeviceDelegatingViewResolverAutoConfiguration,\
      org.springframework.boot.autoconfigure.mobile.SitePreferenceAutoConfiguration,\
      org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoAutoConfiguration,\
      org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration,\
      org.springframework.boot.autoconfigure.mustache.MustacheAutoConfiguration,\
      org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration,\
      org.springframework.boot.autoconfigure.reactor.ReactorAutoConfiguration,\
      org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration,\
      org.springframework.boot.autoconfigure.security.SecurityFilterAutoConfiguration,\
      org.springframework.boot.autoconfigure.security.FallbackWebSecurityAutoConfiguration,\
      org.springframework.boot.autoconfigure.security.oauth2.OAuth2AutoConfiguration,\
      org.springframework.boot.autoconfigure.sendgrid.SendGridAutoConfiguration,\
      org.springframework.boot.autoconfigure.session.SessionAutoConfiguration,\
      org.springframework.boot.autoconfigure.social.SocialWebAutoConfiguration,\
      org.springframework.boot.autoconfigure.social.FacebookAutoConfiguration,\
      org.springframework.boot.autoconfigure.social.LinkedInAutoConfiguration,\
      org.springframework.boot.autoconfigure.social.TwitterAutoConfiguration,\
      org.springframework.boot.autoconfigure.solr.SolrAutoConfiguration,\
      org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration,\
      org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration,\
      org.springframework.boot.autoconfigure.transaction.jta.JtaAutoConfiguration,\
      org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration,\
      org.springframework.boot.autoconfigure.web.DispatcherServletAutoConfiguration,\
      org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration,\
      org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration,\
      org.springframework.boot.autoconfigure.web.HttpEncodingAutoConfiguration,\
      org.springframework.boot.autoconfigure.web.HttpMessageConvertersAutoConfiguration,\
      org.springframework.boot.autoconfigure.web.MultipartAutoConfiguration,\
      org.springframework.boot.autoconfigure.web.ServerPropertiesAutoConfiguration,\
      org.springframework.boot.autoconfigure.web.WebClientAutoConfiguration,\
      org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration,\
      org.springframework.boot.autoconfigure.websocket.WebSocketAutoConfiguration,\
      org.springframework.boot.autoconfigure.websocket.WebSocketMessagingAutoConfiguration,\
      org.springframework.boot.autoconfigure.webservices.WebServicesAutoConfiguration

      Cada una de estas clases son xxxAutoConfiguration un recipiente de montaje, se añaden al recipiente; que ver con su auto-configuración;

  • Cada clase es automáticamente la configuración automática de configuración;

  • HttpEncodingAutoConfiguration un ejemplo para explicar el principio de auto-configuración;

    @Configuration  //表示这是一个配置类,以前编写的配置文件一样,也可以给容器中添加组件
    @EnableConfigurationProperties({HttpEncodingProperties.class})  //启动指定类的ConfigurationProperties功能;将配置文件中对应的值和HttpEncodingProperties绑定起来;并把HttpEncodingProperties加入到ioc容器中
    
    @ConditionalOnWebApplication  //Spring底层@Conditional注解,根据不同的条件,如果满足指定的条件,整个配置类里面的配置就会生效; 判断当前应用是否是web应用,如果是,当前配置类生效
    
    @ConditionalOnClass({CharacterEncodingFilter.class})  //判断当前这个项目有没有这个类 CharacterEncodingFilter:SpringMVC中进行乱码解决的过滤器
    
    @ConditionalOnProperty(
        prefix = "spring.http.encoding",
        value = {"enabled"},
        matchIfMissing = true
    )  //判断配置文件中是否存在某个配置 spring.http.encoding.enabled ;如果不存在,判断也是成立的
    //即使我们配置文件中不配置spring.http.encoding.enabled-true,也是默认生效的
    public class HttpEncodingAutoConfiguration {
    
        //他已经和SpringBoot的配置文件映射了
        private final HttpEncodingProperties properties;
    
        //只有一个有参构造器的情况下,参数的值就会从容器中拿
        public HttpEncodingAutoConfiguration(HttpEncodingProperties properties) {
            this.properties = properties;
        }
    
    
        @Bean  //给容器中添加一个组件,这个组件的某些值需要从properties中获取
        @ConditionalOnMissingBean({CharacterEncodingFilter.class})
        public CharacterEncodingFilter characterEncodingFilter() {
            CharacterEncodingFilter filter = new OrderedCharacterEncodingFilter();
            filter.setEncoding(this.properties.getCharset().name());
            filter.setForceRequestEncoding(this.properties.shouldForce(Type.REQUEST));
            filter.setForceResponseEncoding(this.properties.shouldForce(Type.RESPONSE));
            return filter;
        }  //给容器中

    Dependiendo de las condiciones actuales se determina, la decisión es, en efecto, la clase de configuración

    Una vez que la clase de configuración en efecto, esta clase se añadirá a la configuración de los diversos componentes en el recipiente; propiedades de estos componentes se obtienen de las propiedades correspondientes de la clase, cada una de estas clases que es una propiedad de unión y el perfil;

  • Todos los atributos en el archivo de configuración que se pueden configurar son encapsulados en los xxxxProperties clase; lo fichero de configuración puede ser configurado para hacer referencia a una función que corresponde a la clase de atributo

    @ConfigurationProperties(    
        prefix = "spring.http.encoding"
    )   //从配置文件中获取指定的值和bean的属性进行绑定
    public class HttpEncodingProperties {    
        public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");

Primavera de arranque esencia:

  • SpringBoot comenzará a cargar grandes cantidades de clase de configuración especificada
  • Tenemos que mirar las características que no han especificado el SpringBoot clase de configuración por defecto escrita
  • Echemos un vistazo a esto en la configuración final configura automáticamente la clase en la que los componentes; (siempre y cuando tenemos que utilizar el componente, que no es necesario volver la configuración)
  • Encontrar la clase de configuración para agregar componentes cuando el contenedor tendrá ciertas propiedades de las propiedades de la clase, podemos especificar los valores de estas propiedades en el archivo de configuración

xxxxAutoConfiguration: clase de configuración automática;

Adición de componentes al contenedor

xxxxProperties: atributos relacionados fichero de configuración encapsulación

Supongo que te gusta

Origin www.cnblogs.com/cjq10029/p/12509873.html
Recomendado
Clasificación