专栏首页挨踢小子部落阁超全、超详的Spring Boot配置讲解笔记

超全、超详的Spring Boot配置讲解笔记

springboot默认加载配置SpringBoot使用两种全局的配置文件,全局配置文件可以对一些默认配置进行修改。application.propertiesapplication.yml这两个配置文件使我们springboot启动的时候回默认加载的配置文件。配置文件放在src/main/resources目录或者类路径/config下,这个配置文件的路径是有优先级的,至于优先级后面再说。首先这两个文件中properties这个文件不需要多说使我们经常使用的资源文件,可是这个Yml是什么呢?后面再说配置信息SpringBoot不需要添加复杂的web.xml或者spring.xml等配置文件,spring只有一个配置文件,也非必须的。默认的配置文件是application.properties。#修改端口号
server.port=8888
#定义项目的访问目录
server.context-path=/springboot我们使用IDEA需要注意,图就不截图太麻烦了:如果properties文件中出现乱码,找到setting中,在file encoding中勾选Transparent native-to-asci conversion。YAML文件除了默认的properties文件,SpringBoot还提供另外一种配置文件yml,这种文件提供一种更加简洁的方式编写配置信息。yml是YAML(YAML Ain‘t Markup Language)语言的文件,是一种标记语言,以数据为中心,比json、xml等更适合做配置文件,有想法的可以去网上搜搜资料学习下。参考语法规范:官方参考: http://www.yaml.orgyml学习参考:https://www.yiibai.com/yaml/yaml_syntax_primitives.htmlYAML基本语法:以键值对的方式表示属性。(空格必须有)。使用缩进表示层级关系缩进时不允许使用Tab键,只允许使用空格。缩进的空格数目不重要,只要相同层级的元素左侧对齐即可。属性和值是大小写敏感的。例子:server:
    port: 8081
    servlet:
        context-path: springboot注意:【:后必须跟一个空格】,两种方式推荐使用yml方式配置项目。YAML语法YAML支持的三种数据结构。字面量:普通的值。(数字,字符串,布尔)对象:键值对的集合。(Map)数组:一组按次序排列的值。(List,Set)字面量YAML中字面量属于普通的值。以key: value来表示,value前必须带一个空格。字面量,字符串默认不需要单双引号。双引号:会转义字符,特殊字符会被转义。(name: "SimpleWu\n lisi" //输出:SimpleWu换行 lisi)单引号:不会转义字符,特殊字符不会被转义。(name: 'SimpleWu\n lisi' //输出:SimpleWu\n lisi)server:
  port: 8081对象、Map在YAML中,对象和Map都是以键值对的方式表示。在下一行来编写属性和值得关系,注意缩进。users:
  firstName: SimpleWu
  email: lovelyWu98k@gmail.com对象还有另一种写法,看到这种写法是不是想到了JSON?users: {
    firstName: zhangsan,
    email: lovelyWu98k@gmail.com
}数组用-值得方式来表示数组中的一个元素。users:
    - SimpleWu
    - lovelyWu98k@gmail.com
    - addressisnot另外一种写法,还是像JSONusers: [SimpleWu,lovelyWu98k@gmail.com,addressisnot]将配置映射到实体类springboot支持我们直接将properties或者yml中的属性映射到某个实体类,看例子。mysql:
    url: jdbc:mysql:///springboot
    port: 3306
    user: root
    pass: root假如在资源中我们现在有个mysql的链接信息,我们如何将它映射到实体类中去呢?有两种方式:@ConfigurationProperties指定从配置文件中读取属性,prefix指定对应yaml文件中的名称。@Value获取配置的属性值@ConfigurationProperties使用IDEA当我们添加了@ConfigurationProperties注解后,在页面上回出现一个错误提示,我们需要加入依赖。<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>编写JAVA类MySQLInfo.java//java类
@ConfigurationProperties(prefix = "mysql")
@Component
public class MySQLInfo {
    private String url;
    private Integer port;
    private String user;
    private String pass;
    //省略getset
}我们只需要指定prefix即可,他就会加载我们yml配置前置为mysql的属性。@Value如果我们使用这个注解来获取属性使用方式是://java类
@Component
public class MySQLInfo {
    @Value("${mysql.url}")
    private String url;
    @Value("${mysql.port}")
    private Integer port;
    @Value("${mysql.user}")
    private String user;
    @Value("${mysql.pass}")
    private String pass;
    //省略getset
}注意如果需要使用表达式只有@Value才可以,@Value("#{10*2}) 结果为:20两种方式的区别:
@ConfigurationProperties@Value功能批量注入配置文件中的属性一个个指定松散绑定支持属性名必须完全匹配SPEL表达式不支持支持JSR303效验支持不支持复杂类型支持不支持两种方式的适用场合:当只需要为某个值提供注入时,推荐使用@Value方式。当需要对整个对象的整体进行赋值时,使用@ConfigurationProperties。加载外部配置文件如果我们将所有的配置信息都写在application.yml文件中,则到时候yml文件会变得非常庞大,不太方便我们进行维护。我们可以对配置中的内容进行拆分,拆分到多个文件中。这样就提高了配置的可维护性。引入外部配置文件:@PropertySource(value={"classpath:student.properties"})@ImportResource(locations={"classpath:spring.xml"}@Configuration和@Bean方式。(SpringBoot推荐方式)第一种方式:@ProperSource方式:需要注入的类的前面使用该注解。第二种方式:@ImportResource方式首先添加一个spring的配置文件,在里面添加需要映射的类。在启动的SpringBootApplication前面使用该注解第三种方式:@Configuration和@Bean方式添加一个自定义配置类。//第三种方式
@Configuration
public class MyConfig {
    //将方法的返回值添加到容器中;容器中这个组件默认的id就是方法名
    @Bean
    public MySQLInfo mySQLInfo(){
        System.out.println("配置类@Bean给容器中添加组件了...");
        return new MySQLInfo();
    }
}切换多个外部配置文件真实环境中,有时候需要配置多个配置文件,可以使用spring.profile.active来进行切换。比如现在我们有三个配置文件:application.ymlapplication-dev.ymlapplication-prod.yml我们在application.yml中通过spring.profile.active = dev(prod)来选择需要加装的配置文件。或者我们可以通过maven将项目打成jar包通过命令行使用以下命令来指定环境java –jar springboot02-0.0.1-SHAPSHOT.jar –spring.profiles.active=dev</span class="hljs-attribute">文档块在yml文档中,可以适用---来将一个文档拆分为多个文档块。可以在不同文档块中分别定义不同的环境。然后通过spring.profiles=xxx来对文档块进行命名。最后通过第一个文档块制定spring.profiles.active=xxx来指定到底激活哪个文档块。#application.yml
spring:
   profiles:
      active: dev #指定激活dev文档
---
server:
    port: 8081
spring:
    profiles: dev #给文档命名为dev配置文件加载位置和顺序springboot启动会扫描一下位置的配置文件作为springboot的默认配置文件。项目路径下的config文件夹项目路径下classpath路径下config文件夹classpath路径下以上是按照优先级从高到低的顺序,所有位置的文件都会被加载,如果冲突的情况,高优先级配置内容会覆盖低优先级配置内容。如果不冲突,形成互补配置。我们也可以通过配置spring.config.location来改变默认配置。使用命令行方式加载,否则优先级不够。java –jar xxxx.jar –spring.config.location=配置文件路径外部配置加载顺序pringBoot也可以从以下位置加载配置;优先级从高到低,高优先级的配置覆盖低优先级的配置,所有配置形成互补配置。命令行参数来自java:comp/env的JNDI属性Java系统属性(System.getProperties())操作系统环境变量RandomValuePropertySource配置的random.*属性值jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置文件jar包外部的application.properties或application.yml(不带spring.profile)配置文件jar包内部的application.properties或application.yml(不带spring.profile)配置文件@Configuration注解类上的@PropertySource通过SpringApplication.setDefaultProperties指定的默认属性官方参考文档:https://docs.spring.io/spring-boot/docs/1.5.9.RELEASE/reference/htmlsingle/#boot-features-external-configspringboot自动配置SpringBoot启动会加载大量的自动配置类我们看我们需要的功能有没有SpringBoot默认写好的自动配置类;我们再来看这个自动配置类中到底配置了哪些组件;(只要我们要用的组件有,我们就不需要再来配置了)给容器中自动配置类添加组件的时候,会从properties类中获取某些属性。我们就可以在配置文件中指定这些属性的值;自动配置原理:SpringBoot启动的时候,加载主配置类,开启了自动配置功能@EnableAutoConfiguration。利用EnableAutoConfigurationImportSelector给容器中导入一些组件。导入的文件在都配置在文件META‐INF/spring.factories中的EnableAutoConfiguration属性来获取的。每一个这样的 xxxAutoConfiguration类都是容器中的一个组件,都加入到容器中;用他们来做自动配置。每一个自动配置类进行自动配置功能;根据当前不同的条件判断,决定这个配置类是否生效?这些组件的属性是从对应的properties类中获取的,这些类里面的每一个属性又是和配置文件绑定的;所有在配置文件中能配置的属性都是在xxxxProperties类中封装者‘;配置文件能配置什么就可以参照某个功能对应的这个属性类作者:SimpleWu出处:https://www.cnblogs.com/SimpleWu/p/10032923.html

本文分享自微信公众号 - 挨踢小子(LN-aitixiaozi)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-07-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • MySQL基础教程最佳典藏版(推荐收藏)

    https://blog.csdn.net/weixin_45108087/article/details/102766281

    挨踢小子部落阁
  • 常见设计模式面试必备

    1、单例类只有一个实例对象; 2、该单例对象必须由单例类自行创建; 3、单例类对外提供一个访问该单例的全局访问点;

    挨踢小子部落阁
  • 前端码农,很容易忽略的转换问题笔记整理

    实例分析:Number()、parseInt() 和 parseFloat() 的用法区别

    挨踢小子部落阁
  • ELK学习笔记之Logstash不停机自动重载配置文件

    为了可以自动检测配置文件的变动和自动重新加载配置文件,需要在启动的时候使用以下命令:

    Jetpropelledsnake21
  • spring boot框架学习学前掌握之重要注解(4)-通过注解方式读取外部资源配置文件2

    本文是《凯哥陪你学系列-框架学习之spring boot框架学习》中spring boot框架学习学前掌握之重要注解(4)-通过注解方式读取外部资源配置文件2。...

    凯哥Java
  • 创建强制配置文件

    此种情况用户在对配置文件做了修改后(例如修改桌面壁纸、修改系统属性)后,注销重新登陆会还原到标准的配置文件配置,其他关于强制配置文件的更多描述可以参见微软官方文...

    SuperDream
  • springBoot基本使用

    ​ 1、双引号:加上双引号的值不会转义里面的特殊字符,比如字符串中包含一个换行符,那么就会在输出的时候换行

    爱撒谎的男孩
  • 让git不再跟踪配置文件的变化

    liulun
  • 近两年火热的微服务springboot不同配置文件详细讲解

    配置文件的作用:修改SpringBoot自动配置的默认值;SpringBoot在底层都给我们自动配置好;

    好好学java
  • SpringBoot配置文件的加载位置

    用户1112962

扫码关注云+社区

领取腾讯云代金券