当前位置: 首页 > article >正文

Spring Boot 实例解析:配置文件占位符

  1. 随机数:
    1. 使用 random 函数,可以指定随机数和随机数范围
    2. 占位符获取之前配置的值,如果没有可以指定默认值
  2. Profile:
    1. 多 Profile 文件:        
      1. 在主配置文件编写的时候,文件名可以是 application-{profile}.properties / yml
      2. 默认使用:application.properties 的配置
    2. yml 支持多文档方式
  3. 激活指定的 profile:
    1. 在配置文件中指定:spring.profiles.active = dev
    2. 命令行:java  -jar  具体 jar 包名  --spring.profiles.active = dev
    3. 直接在测试的时候,配置传入命令行参数
    4. 虚拟机参数:-Dspring.profiles.active = dev
  4. 配置文件加载位置:
    1. SpringBoot 启动会自动扫描 application.properties 或者 application.yml 文件作为 SpringBoot 的默认配置文件
    2. SpringBoot 的默认配置文件:
      1. -file:/config/
      2. -file:/
      3. -classpath:/config/
      4. -classpath:/
    3. 优先级由高到低,高优先级的配置会覆盖低优先级的配置
    4. SpringBoot 会从着四个位置全部加载主配置文件,互补配置
  5. 自动装配原理:
    1. SpringBoot 启动的时候加载主配置类,开启了自动配置功能 @EnableAutoConfiguration
    2. @EnableAutoConfiguration 作用:
      1. 利用 EnableAutoConfigurationImportSelector 给容器添加的组件
      2. 可以查看 selectImports() 方法的内容
      3. List  configurations = getCandidateConfigurations(annotationMetadata,attributes);获取候选的配置
        SpringFactoriesLoader.loadFactoryNames()
        //扫描所有 jar 包类路径下 META-INF /spring.factories
        把扫描到的这些文件中的内容包装成 properties 对象
        从 properties 中获取到 EnableAutoConfiguration.class类(类名)
        对应的值,然后把他们添加在容器中
      4. 将类路径下 META-INF /spring.factories 里面配置的所有 EnableAutoConfiguration 的值加入到了容器中
        # 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,
        \ o
        rg.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.ElasticsearchRepositoriesAutoConfi
        guration,\
        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,
        \ o
        rg.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.WebServicesAutoConfiguratio
      5. 每个这样的 xxxAutoConfiguration 类都是容器中的一个组件,都加入到容器中,用它们来自动装配
    3. 每一个自动装配类进行自动配置功能
      //表示这时一个配置类,以前编写的配置文件一样,也可以给容器中添加组件
      @Configuration
      
      //启动指定类的 ConfigurationProperties 功能;
      //将配置文件中对应的值和 HttpEncodingProperties 绑定起来
      //并把HttpEncodingProperties加入到 ioc 容器中
      @EnableConfigurationProperties(HttpEncodingProperties.class)
      
      //Spring 底层 @Conditional 注解(Spring 注解版),根据不同的条件
      // 如果满足指定的条件,整个配置类里面的配置就会神效;
      //判断当前引用是否是 web 应用,如果是,当前配置类生效
      @ConditionalOnWebApplication
      
      //判断当前项目有没有这个类 CharacterEncodingFilter ; SpringMVC 中进行乱码解决的过滤器
      @ConditionalOnClass(CharacterEncodingFilter.class)
      
      //判断配置文件中是否存在某个配置 spring.http.encoding.enabled
      //如果不存在,判断也是成立的,即使我们不配置 pring.http.encoding.enabled = true 也是默认生效的
      @ConditionalOnProperty(prefix = "spring.http.encoding",value = "enabled",matchIfMissing = true)
      
      public class HttpEncodingProperties {
          //它已经和 SpringBoot 的配置文件影射了
          private final HttpEncodingProperties properties;
      
          //只有一个构造器的情况下,参数的值就会从容器中拿
          public HttpEncodingProperties(HttpEncodingProperties properties) {
              this.properties = properties;
          }
      }
      1. 根据当前不同的条件判断,决定这个配置类是否生效
      2. 一旦这个配置类生效,这个配置类就会给容器中添加各种组件,这些组件的属性是从对应的 properties 类中获取的,这些类里面的每一个属性又是和配置文件绑定的
      3. 所有在配置文件中能配置的属性都是在 xxxProperties 类中封装着。配置文件能配置什么就可以参照某个功能对用的这个属性类
        @ConfigurationProperties(prefix = "spring.http.encoding") //从配置文件中获取指定的值和bean的属性进行绑定
        public class HttpEncodingProperties {
        public static final CharsetDEFAULT_CHARSET = Charset.forName("UTF‐8");
  6. 精髓:
    1. SpringBoot 启动会加载大量的自动装配类
    2. 我们要看我们需要的功能有没有 SpringBoot 默认写好的自动配置类
    3. 再来看自动配置类中配置了哪些组件(需要的组件被自动装配后,就不需要手动装配)
    4. 给容器中自动配置类添加组件的时候,会从 properties 类中获取默认属性。我们就可以在配置文件中指定这些属性的值
    5. xxxAutoConfiguration:自动装配类 ==> 给容器中添加组件
  7. 细节:
    1. @Confitional 派生注解(Spring 注解原生的 @Coditional 作用)
      1. 作用:必须是 @Conditional 指定的条件成立,才给容器中添加组件,配置里面的所有内容才生效

        @Conditonal扩展注解

        判断是否满足当前指定条件

        @ConditionalOnJava

        系统的 java 版本是否符合要求

        @ConditionalOnBean

        容器中存在指定的 Bean

        @ConditionalOnMissingBean

        容器中不存在指定的 Bean

        @ConditionalOnExpression

        满足 spEL 表达式指定

        @ConditionalOnMissingClass

        系统中没有指定的类

        @ConditionalOnSingleCandidate

        容器中只有一个指定的 Bean,或者这个 Bean 是首选 Bean

        @ConfitonalOnProperty

        系统中指定的属性是否有指定的值

        @ConditonalOnResource

        类路径下是否存在指定资源文件

        @ConditionalOnWebApplication

        当前是 web 环境

        @ConditionalOnNoyWebApplication

        当前不是 web 环境

        @ConditonalOnJndi

        JNDI 存在指定项

      2. 自动配置类必须在一定的条件下才能生效

      3. debug = true:让开控制台自动配置报告

        1. 生效类:

            
          AUTO‐CONFIGURATION
          REPORT
          =========================
          Positive
          matches:(自动配置类启用的)            
          ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
          DispatcherServletAutoConfiguration
          matched:
          ‐ @ConditionalOnClass
          found
          required class
          'org.springframework.web.servlet.DispatcherServlet'; @ConditionalOnMissingClass
          did
          not find
          unwanted class (OnClassCondition)
          ‐ @ConditionalOnWebApplication
          (required) found StandardServletEnvironment
          (OnWebApplicationCondition)
          Negative
          matches:(没有启动,没有匹配成功的自动配置类)
          ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
          ActiveMQAutoConfiguration:
          Did not
          match:
          ‐ @ConditionalOnClass
          did
          not find required classes 'javax.jms.ConnectionFactory',
          'org.apache.activemq.ActiveMQConnectionFactory'
          (OnClassCondition)
          AopAutoConfiguration:
          Did not
          match:
          ‐ @ConditionalOnClass
          did
          not find required classes'org.aspectj.lang.annotation.Aspect', 'org.aspectj.lang.reflect.Advice'(OnClassCondition)


http://www.kler.cn/a/530056.html

相关文章:

  • day6手机摄影社区,可以去苹果摄影社区学习拍摄技巧
  • [创业之路-269]:《创业讨论会》- 系统之韵:从麻雀到5G系统的共通性探索
  • 芯片AI深度实战:给vim装上AI
  • Docker自定义镜像
  • 基础项目实战——学生管理系统(c++)
  • Ubuntu 手动安装 Open WebUI 完整指南
  • DeepSeek R1 本地部署安装包下载 及 本地部署教程
  • 【机器学习与数据挖掘实战】案例11:基于灰色预测和SVR的企业所得税预测分析
  • 【LeetCode 刷题】回溯算法-子集问题
  • CTFSHOW-WEB入门-命令执行54-70
  • 初步认识操作系统(Operator System)
  • 2025_2_2 C语言中字符串库函数,结构体,结构体内存对齐
  • RocketMQ中的NameServer主要数据结构
  • 网站快速收录:利用网站作者信息提升权重
  • ROS-SLAM
  • DeepSeek-R1模型1.5b、7b、8b、14b、32b、70b和671b有啥区别?
  • 25.2.2学习内容
  • C++11新特性之范围for循环
  • 使用 HTTP::Server::Simple 实现轻量级 HTTP 服务器
  • kamailio-kamctl monitor解释
  • 面经--C语言——sizeof和strlen,数组和链表,#include <>和 #include ““ #define 和typedef 内存对齐概述
  • Pluto固件编译笔记
  • C#,shell32 + 调用控制面板项(.Cpl)实现“新建快捷方式对话框”(全网首发)
  • Rust 函数使用详解
  • solidity高阶 -- Eth支付
  • 快速提升网站收录:利用网站用户反馈机制