写点什么

第八节:SpringBoot 指定配置文件配置三

作者:入门小站
  • 2022 年 2 月 08 日
  • 本文字数:2765 字

    阅读完需:约 9 分钟

第八节:SpringBoot指定配置文件配置三

SpringBoot 配置属性的规则

  • 通过.分离各个元素

  • 最后一个.将前缀与属性名称分开

  • 必须是字母(az)和数字(0-9)

  • 必须是小写字母

  • 用连字符-来分隔单词

  • 唯一允许的其他字符是[和],用于 List 的索引

  • 不能以数字开头

相同的配置项

Spring Boot 2.x 加载配置文件的时候会移除特殊字符并且还会将配置均用全小写的方式进行匹配和加载。


application.properties


com.rumenz.id-name=rumenzcom.rumenz.id_name=rumenzcom.rumenz.idName=rumenzcom.rumenz.idname=rumenz
复制代码


测试


package com.rumenz.lession8.controller;
import org.springframework.beans.factory.annotation.Value;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;
/** * @className: RumenzController * @description: TODO 类描述 * @author: 入门小站 rumenz.com * @date: 2021/11/8 **/@Controller@RequestMapping("/rumenz")public class RumenzController {

@Value("${com.rumenz.idname}") private String comRumenzIdName;
@RequestMapping("/index") @ResponseBody public String index(){ return comRumenzIdName; }}
复制代码


浏览器访问http://127.0.0.1:8080/rumenz/index,返回rumenz


以上 4 个配置项是等价的,推荐全小写中间用-分割。

配置文件的优先级

application.properties 和 application.yml 文件可以在放在以下几个位置。


  • 外部:应用程序运行目录的config子目录

  • 外部:应用程序运行目录的跟目录

  • 内部:在 config 包里面classpath:/config/

  • 内部:在 classpath 根目录classpath:/




application.properties中配置了com.rumenz.level


com.rumenz.level=1
复制代码


测试


package com.rumenz.lession8.controller;
import org.springframework.beans.factory.annotation.Value;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;
/** * @className: RumenzController * @description: TODO 类描述 * @author: 入门小站 rumenz.com * @date: 2021/11/8 **/@Controller@RequestMapping("/rumenz")public class RumenzController { @Value("${com.rumenz.idname}") private String comRumenzIdName;
@Value("${com.rumenz.level}") private String comRumenzLevel;
@RequestMapping("/index") @ResponseBody public String index(){ return comRumenzIdName; }
@RequestMapping("/index1") @ResponseBody public String index1(){ return comRumenzLevel; }
}
复制代码


使用mvn clean package打包后,使用jar -jar lession8-0.0.1-SNAPSHOT.jar运行。如果上述 4 个地方都定义了application.properties,并且都配置了com.rumenz.level ,当我们的业务里面需要用com.rumenz.level配置项。查找的优先级是:


  • 1.先找运行目录下的 config 的application.properties中的com.rumenz.level,找到返回,否则下一步

  • 2.再找运行目录下的application.properties中的com.rumenz.level,找到返回否则下一步

  • 3.再找 classpath 下的 config 目录的application.propertiescom.rumenz.level,找到返回否则下一步

  • 4.再找 classpath 下的application.propertiescom.rumenz.level,找到就返回,找不到就报错,项目启动失败。

命令行参数配置

springboot 的application.properties中可以配置一些参数,如端口号,账号,密码。如果我们想在运行的时候想临时修改运行的端口也是可以的。


java -jar lession8-0.0.1-SNAPSHOT.jar --server.port=9000
复制代码


这样项目运行的端口就变成了9000,--server.port=9000相当于在application.properties中配置server.port=9000

系统环境变量

我们也可以在操作系统里面定义变量,然后通过@Value注入到 Spring 容器中。


package com.rumenz.lession8.controller;
import org.springframework.beans.factory.annotation.Value;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;
/** * @className: RumenzController * @description: TODO 类描述 * @author: 入门小站 rumenz.com * @date: 2021/11/8 **/@Controller@RequestMapping("/rumenz")public class RumenzController {
//读取系统环境变量 @Value("${PATH}") private String path; @RequestMapping("/index2") @ResponseBody public String index2(){ return path; } }
复制代码


浏览器访问http://127.0.0.1:8080/rumenz/index2,返回/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/go/bin:/usr/local/share/dotnet:~/.dotnet/tools:/usr/local/mysql/bin:/usr/local/mysql/bin

系统属性

我们可以设置VM arguments向 Spring 容器传递参数值。

Idea 中设置 VM arguments



测试


package com.rumenz.lession8.controller;
import org.springframework.beans.factory.annotation.Value;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;
/** * @className: RumenzController * @description: TODO 类描述 * @author: 入门小站 rumenz.com * @date: 2021/11/8 **/@Controller@RequestMapping("/rumenz")public class RumenzController {

@Value("${spring.test.env}") private String springTestEnv;
@RequestMapping("/index3") @ResponseBody public String index3(){ return springTestEnv; }
}
复制代码


浏览器访问http://127.0.0.1:8080/rumenz/index3,返回test

jar 包运行设置VM arguments

java -jar -Dspring.test.env=testvm lession8-0.0.1-SNAPSHOT.jar
复制代码


浏览器访问http://127.0.0.1:8080/rumenz/index3,返回testvm


本小结源码地址:


  • GitHub:https://github.com/mifunc/springboot/tree/main/lession8

  • Gitee:https://gitee.com/rumenz/springboot/tree/master/lession8

  • https://rumenz.com/rumenbiji/springboot-config-file.html

  • 我的博客 https://rumenz.com/ ,

  • 我的工具箱 https://tooltt.com/

  • 微信公众号:【入门小站】



  • 关注【入门小站】回复【1001】获取 linux 常用命令速查手册

  • 关注【入门小站】回复【1003】获取 LeetCode 题解【java 语言实现】

  • 关注【入门小站】回复【1004】获取 Java 基础核心总结

  • 关注【入门小站】回复【1009】获取 阿里巴巴 Java 开发手册

发布于: 刚刚阅读数: 2
用户头像

入门小站

关注

还未添加个人签名 2020.01.18 加入

还未添加个人简介

评论

发布
暂无评论
第八节:SpringBoot指定配置文件配置三