初学Springboot2(五)---配置文件后续之Profile和配置文件加载位置

1、profile

Profile是Spring对不同环境提供不同配置功能的支持,可以通过激活、指定参数等方式快速切换环境
1、多profile文件形式:
格式:application-{profile}.properties/yml:
如:application-dev.properties/yml、application-prod.properties/yml
2、yml支持多profile文档块模式:
三个-分割文档块

server:
  port: 8081
spring:
  profiles:
    active: dev
---
server:
  port: 8083
spring:
  profiles: dev

---
server:
  port: 8084
spring:
  profiles: prod

3、激活方式:

  • 配置文件 spring.profiles.active=dev
  • 命令行
    打成jar包之后,在cmd运行jar包
java -jar spring-boot-xxxx-xxxx.jar --spring.profiles.active=dev

在测试环境也是可以改的,右上角edit configuration
–spring.profiles.active=dev
写在Program arguments

  • jvm参数 -Dspring.profiles.active=dev
    jvm参数的写在下面的VM options里
    在这里插入图片描述

我感觉一般情况下是会把一些通用配置写在主application.yml/properties中,然后将其他不同的配置分别写在开发、生产配置中,主application.yml/properties在选择使用哪种配置就好了
在这里插入图片描述

2、配置文件加载位置

springboot启动会扫描一下位置的application.properties或者application.yml文件作为Springboot的默认配置文件
我这次都以properties为例,yml效果也是一样的

file:./config/
file:./
classpath:/config
classpath:/
在这里插入图片描述
优先级由高到低,高优先级的配置会覆盖低优先级;比如端口号的设置,上图1优先级最高,234下来降低

有些人说同一优先级下面,yml比properties的优先级更高。。我试了一下,好像是更低的样子,有可能是按文件顺序加载下来,上面的覆盖下面的
在这里插入图片描述
properties中设置端口为8081,yml设置8080
启动显示端口为8081

Springboot会从这四个位置全部加载配置文件;意思就是这四个位置的默认配置文件他都会加载,
这种情况就会出现一种效果:互补配置

互补配置

先写一个controller

@RestController
public class HelloController {

    @RequestMapping("/hello")
    public String hello(){
        return "hello world!";
    }
}

在4优先级设置端口号和文件访问路径

server:
  port: 8081
  servlet:
    context-path: /boot02

2优先级设置端口号

server:
  port: 8084

这样的话效果就是
在这里插入图片描述

我们还可以通过spring.config.location来改变默认的配置文件位置,在项目打包好以后,我们可以使用命令行参数的形式,启动项目的时候来指定配置文件的新位置;指定配置文件和默认加载的这些配置文件形成互补配置

这一部分我有点疑惑,因为我学习看的视频是尚硅谷的springboot1.5,和我现在的2.5有出入,我实践这个使用spring.config.location来实现互补配置功能时,并不能达到效果

原来我的启动端口是8084
在本地磁盘写了一个yml文件设置启动端口为8087
cmd启动jar包

C:\Users\mqb61\Desktop>java -jar spring-boot-config-02-0.0.1-SNAPSHOT.jar --spring.config.location=E:/application.yml
2020-03-06 13:10:07.414  INFO 9360 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2020-03-06 13:10:07.414  INFO 9360 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 3504 ms
2020-03-06 13:10:07.820  INFO 9360 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2020-03-06 13:10:08.133  INFO 9360 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8087 (http) with context path ''
2020-03-06 13:10:08.133  INFO 9360 --- [           main] c.e.s.SpringBootConfig02Application      : Started SpringBootConfig02Application in 6.994 seconds (JVM running for 10.944)

可以看到启动端口确实是变成了8087,但是我的项目启动路径没了,在IDEA启动项目时,访问路径为
localhost:8084/boot02/hello

cmd启动后失去boot02
localhost:8087/hello才能访问

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值