配置文件笔记

147 阅读2分钟

一、Yaml

语法:

server:
  port: 8081
  servlet:
    context-path: /mango
  • 以键值对的方式表示属性。(空格必须有)。
  • 使用缩进表示层级关系
  • 缩进时不允许使用Tab键,只允许使用空格。
  • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可。
  • 属性和值是大小写敏感的

适应不同的环境

1、在yml文档中,可以用---来将一个文档拆分为多个文档块。

Copy#application.yml
spring:
    profiles:
        active:dev#指定使用哪个环境(通过第一个文档块制定spring.profiles.active=xxx来指定到底激活哪个文档块。)
---
server:
    port:8081
spring:
    profiles:dev#指定属于哪个环境(对文档块进行命名)

2、也可在不同文档块中分别定义不同的环境。

  • 如生成application.yml、application-dev.yml、 application-prod.yml文件,在application.yml中通过spring.profile.active = dev来选择需要加装的配置文件。

二、properties

语法:

server.port=8081
# 修改上下文路径
server.servlet.context-path=/mango

bootstrap.yml(bootstrap.properties)与application.yml(application.properties): bootstrap针对SpringCloud,application针对SpringBoot。bootstrap先于 application加载,bootstrap 里面的属性不能被覆盖。

加载顺序:bootstrap-》application(其中spring.profile.active=dev)-》application-dev.properties

yaml与properties区别: 默认放在resources文件夹下,当然,放在resources/config文件夹下也是可以读取到的。 若相同优先级位置(同一目录下)同时有properties文件和yaml文件,优先加载.yml,再加载properties,后加载的properties文件中的内容会覆盖yaml文件中的内容。

三、xml配置

四、java配置

@Configuration\
publicclass MyConfig {\
//将方法的返回值添加到容器中;容器中这个组件默认的id就是方法名\
@Bean\
public MySQLInfo mySQLInfo(){\
System.out.println("配置类@Bean给容器中添加组件了...");\
returnnew MySQLInfo();\
}\
}

引入外部配置文件:

  1. @PropertySource(value={"classpath:student.properties"})
  2. @ImportResource(locations={"classpath:spring.xml"}
  3. @Configuration和@Bean方式。(SpringBoot推荐方式)

配置文件加载位置和顺序

springboot启动会扫描一下位置的配置文件作为springboot的默认配置文件。

  1. 项目路径下的config文件夹
  2. 项目路径下
  3. classpath路径下config文件夹
  4. classpath路径下

以上是按照优先级从高到低的顺序,所有位置的文件都会被加载,如果冲突的情况,高优先级配置内容会覆盖低优先级配置内容。如果不冲突,形成互补配置。

将配置映射到实体类

1、@ConfigurationProperties;

@ConfigurationProperties(prefix = "server")\
@Component\
publicclass MySQLInfo {\
private String url;\
private Integer port;\
private String user;\
private String pass;\
//省略getset\
}

2、@Value

@Component\
publicclass 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方式。

当需要对整个对象的整体进行赋值时,使用@ConfigurationProperties。