项目配置(yml、properties)
如果同一个目录下,有application.yml也有application.properties,默认先读取application.properties。
如果同一个配置属性,在多个配置文件都配置了,默认使用第1个读取到的,后面读取的不覆盖前面读取到的。
一、properties配置文件
SpringBoot默认读取项目下名字为application开头的 yml yaml properties配置文件
在项目下的application.properties里修改端口号和项目上下文路径
注意,这里的每一个. 都代表一个层级 此时接口的访问路径为:http://127.0.0.1:8081/springboot1/test/getTest
SpringBoot常见配置 查看官网文档Common Application Properties
二、yml配置文件
注意,application.properties里的每一个. 都代表一个层级 转换成yml之后,使用缩进代表层级关系
基本格式要求
① 大小写敏感
② 使用缩进代表层级关系
③ 相同的部分只出现一次
④ 注意空格
[1]普通数据类型
server:
port: 8081
[2]配置对象类型数据
student:
name: zhangsan
age: 18
address: beijing
#或者写成json格式
animal:
{name: monkey,age: 3 }
[3]配置数组类型
city:
- beijing
- tianjin
- shanghai
- chongqing
#或者
city2: [beijing,tianjin,shanghai,chongqing]
如果同一个目录下,有application.yml也有application.properties,默认先读取application.properties。****如果同一个配置属性,在多个配置文件都配置了,默认使用第1个读取到的,后面读取的不覆盖前面读取到的。
三、配置文件存放位置
当前项目根目录中
当前项目根目录下的一个/config子目录中
项目的resources即classpath根路径中
项目的resources即classpath根路径下的/config目录中
四、配置文件存放读取优先级
a)当前项目根目录下的一个/config子目录中(最高)
config/application.properties config/application.yml
b)当前项目根目录中(其次)
application.properties application.yml
c)项目的resources即classpath根路径下的/config目录中(一般)
resources/config/application.properties resources/config/application.yml
d)项目的resources即classpath根路径中(最后)
resources/application.properties resources/application.yml
五、bootstrap配置文件
Spring Boot 中有两种上下文对象,一种是 bootstrap, 另外一种是 application(ServletContext), bootstrap 是应用程序的父上下文,也就是说 bootstrap 加载优先于 applicaton。bootstrap 主要用于从额外的资源来加载配置信息,还可以在本地外部配置文件中解密属性。这两个上下文共用一个环境,它是任何Spring应用程序的外部属性的来源。bootstrap 里面的属性会优先加载,它们默认也不能被本地相同配置覆盖。
bootstrap配置文件特征
①boostrap 由父 ApplicationContext 加载,比 applicaton 优先加载。 ②boostrap 里面的属性不能被覆盖。
bootstrap与 application 的应用场景
application 配置文件主要用于 Spring Boot 项目的自动化配置。 bootstrap 配置文件有以下几个应用场景。 ①使用 SpringCloudConfig 配置中心时,这时需要在 bootstrap 配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息。 ②一些固定的不能被覆盖的属性。 ③一些加密/解密的场景。
六、自定义配置
如何使用Java读取到properties文件中的内容,并且把它封装到JavaBean中,以供随时使用
只有在容器中的组件,才会拥有SpringBoot提供的强大功能
@ConfigurationProperties + @Component+@PropertySource
1、在资源文件夹下自定义文件:test.properties
user.a.name=zhangssan
user.a.age=18
user.a.address=beijingshichangpingqu11
2、创建一个对应的实体类
@Data
@Component//把组件(该类)添加到容器中
@PropertySource(value = "classpath:test.properties")//指定配置文件 classpath:/就是resource文件下
@ConfigurationProperties(prefix = "user.a")
//@ConfigurationProperties(prefix = "user.a")的value值必须和test.properties核心配置文件的前缀名一样属性也得对应上
public class User {
private String name;
private Integer age;
private String address;
}
3)在controller注入实体类对象
@Autowired
private User user;
@GetMapping("/selectNameAll")
public String selectNameAll() {
return user.getName();
}
七、多环境配置
在开发 SpringBoot项目的时候,可能有这样的情况,一套程序需要在不同的环境中发布,数据库配置、端口配置或者其他配置各不相同,如果每次都需要修改为对应环境配置,不仅耗费人力,而且特别容易出现错误,造成不必要的麻烦。 通常情况下,我们可以配置多个配置文件,在不同的情况下进行替换。而在 Spring Boot项目 中,我们新建几个配置文件,文件名以application-{name}.properties的格式,其中的{name}对应环境标识,比如:
application-dev.properties:开发环境。
application-test.properties:测试环境。
application-prod.properties:生产环境。
application-dev.yml:开发环境。
application-test.yml:测试环境。
application-prod.yml:生产环境。
然后,可以在主配置文件(application.properties)中配置spring.profiles.active来设置当前要使用的配置文件。 比如,在主配置文件中配置本次指定使用的配置文件后缀,配置内容如代码清单所示。
spring:
profiles:
active: dev
测试:
在工程的资源文件夹下创建一下四个文件
application.yml:主配置文件。
spring:
profiles:
active: dev
application-dev.yml:开发环境。
server:
port: 8081
application-test.yml:测试环境。
server:
port: 8082
application-prod.yml:生产环境。
server:
port: 8083
启动后观察控制台日志打印当前工程的实际端口号
版权归原作者 半截的诗-- 所有, 如有侵权,请联系我们删除。