一、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();\
}\
}
引入外部配置文件:
- @PropertySource(value={"classpath:student.properties"})
- @ImportResource(locations={"classpath:spring.xml"}
- @Configuration和@Bean方式。(SpringBoot推荐方式)
配置文件加载位置和顺序
springboot启动会扫描一下位置的配置文件作为springboot的默认配置文件。
- 项目路径下的config文件夹
- 项目路径下
- classpath路径下config文件夹
- 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。