Spring Boot+Maven+IDEA自学笔记(关于配置文件)

本文深入解析SpringBoot配置机制,涵盖配置文件读取方法、多环境配置策略、配置加载位置与顺序,以及自动配置原理,帮助开发者掌握核心配置技巧。

关于Spring boot配置文件(properties/yml)

1.读取spring配置的方法

有两种,一种是通过写bean XML文件,然后在入口类中注解@ImportResource来引入bean文件的方式。然而这种方式并不方便

具体实现可以参考这篇博文: 

https://blog.youkuaiyun.com/wangmx1993328/article/details/81005170

 一种是通过全注解方式引入spring配置文件来添加组件。SpringBoot推荐给容器中添加组件使用该种方式。这种方式也是spring注解的传统方式

首先需要定义一个配置类,然后配置类需要添加注解:类需要注解为@Configurantion  需要用到的组件注解为@Bean

注意:这两种添加容器组建的方式不能同时存在,不然会报错。

@Configuration声明该类需要被初始化(也就是项目启动的时候,该类中的方法就已经被执行),@Bean要跟@Configuration搭配使用

@Bean的作用:初始化的时候创建对象,并放到IOC容器中。

2.关于profiles多环境配置

(1)我们在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml

默认使用application.properties的配置;也就是说不管application文件是否有后缀profile,都先于yml执行。

(2)yml比properties文件更方便,可以支持多文档块。比如:

(3)激活指定的profile文件:

         三个办法:

  •  配置文件中激活:spring.profiles.active=dev //注意application.properties及yml的优先级
  •  在命令行中激活:​ 打包后,运行java -jar spring-boot-02-config-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev;或在IDEA中的窗口中配置如下:点击Edit Configurations...——》Configuration选项卡下的Program arguments中输入命令:                                 --spring.profiles.active=dev 命令行方式优先级高于在配置文件中激活的方法
  • 虚拟机参数激活: -Dspring.profiles.active=dev

3.关于profiles文件的加载位置

springboot 启动会扫描以下位置的application.properties或者application.yml文件作为Spring boot的默认配置文件

–file:./config/   指的是工程根目录下的config文件夹下 打包时不会被打包进去

–file:./   指的是工程根目录下 打包时不会被打包进去

–classpath:/config/      指的是resources下的config文件夹下

–classpath:/  指的是resources下

优先级由高到底,高优先级的配置会覆盖低优先级的配置;

SpringBoot会从这四个位置全部加载主配置文件;互补配置

除了上述几个固定位置以外,还可以自定义位置,通过spring.config.location来改变默认的配置文件位置,这通常用在项目已经打包好了,但想要改变某些配置时,另写一个properties文件,里面重新配置。然后在运行jar包时后面带命令行参数来指定先加载这个配置文件。

例如可以这么写:java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --spring.config.location=G:/application.properties

项目打包好以后,我们可以使用命令行参数的形式,启动项目的时候来指定配置文件的新位置;指定配置文件和默认加载的这些配置文件共同起作用形成互补配置;

注意:springboot 2.0之后,项目访问路径配置由原来的server.context-path改为 server.servlet.context-path

4.关于profiles文件的加载顺序:高优先级配置覆盖低优先级配置,所有内容形成互补

a.命令行参数

所有的配置都可以在命令行上进行指定

java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --server.port=8087 --server.context-path=/abc

多个配置用空格分开; --配置项=值

b.来自java:comp/env的JNDI属性

c.Java系统属性(System.getProperties())

d.操作系统环境变量

e.RandomValuePropertySource配置的random.*属性值

f.由jar包外向jar包内进行寻找;

优先加载带profile的(前提是该profile被激活)

  • jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件(config路径下的profile优先加载,之后是jar同级目录下的profile)
  • jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置文件(config路径下的profile优先加载,之后是jar同级目录下的profile)

再来加载不带profile

  • jar包外部的application.properties或application.yml(不带spring.profile)配置文件(config路径下的profile优先加载,之后是jar同级目录下的profile)
  • jar包内部的application.properties或application.yml(不带spring.profile)配置文件(config路径下的profile优先加载,之后是jar同级目录下的profile)

g.@Configuration注解类上的@PropertySource

h.通过SpringApplication.setDefaultProperties指定的默认属性

所有支持的配置加载来源;

参考官方文档

5.自动配置原理 

配置文件可以配置的属性参考文档:1.5.9配置文件属性

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值