SpringBoot配置属性的规则

  • 通过.分离各个元素
  • 最后一个.将前缀与属性名称分开
  • 必须是字母(az)和数字(0-9)
  • 必须是小写字母
  • 用连字符-来分隔单词
  • 唯一允许的其他字符是[和],用于List的索引
  • 不能以数字开头

相同的配置项

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

application.properties

com.rumenz.id-name=rumenz
com.rumenz.id_name=rumenz
com.rumenz.idName=rumenz
com.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")@ResponseBodypublic String index(){return comRumenzIdName;}
}

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

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

配置文件的优先级

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

  • 外部:应用程序运行目录的config子目录
  • 外部:应用程序运行目录的跟目录
  • 内部:在config包里面classpath:/config/
  • 内部:在classpath根目录classpath:/
路径 参数值
/springboot-zhinan/lession8/config/application.properties com.rumenz.level=1
/springboot-zhinan/lession8/application.properties com.rumenz.level=2
/springboot-zhinan/lession8/src/main/resources/config/application.properties com.rumenz.level=3
/springboot-zhinan/lession8/src/main/resources/application.properties com.rumenz.level=4

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")@ResponseBodypublic String index(){return comRumenzIdName;}@RequestMapping("/index1")@ResponseBodypublic 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")@ResponseBodypublic 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")@ResponseBodypublic 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开发手册

第八节:SpringBoot指定配置文件配置三相关推荐

  1. springboot读取配置文件的三种方式

    项目中springboot读取配置文件的三种方式: 1.使用Environment 2.使用@Value 3.使用@ConfigurationProperties注解映射到bean中,定义一个User ...

  2. Redis 安装配置开机启动整合SpringBoot以及配置文件详解

    安装 Redis # 下载Redis wget https://download.redis.io/releases/redis-6.0.9.tar.gz# 解压 redis tar -zxvf re ...

  3. springBoot 启动指定配置文件环境多种方案

    springBoot 启动指定配置文件环境理论上是有多种方案的,一般都是结合我们的实际业务选择不同的方案,比如,有pom.xml文件指定.maven命令行指定.配置文件指定.启动jar包时指定等方案, ...

  4. (三)SpringBoot之配置文件详解:Properties和YAML

    一.配置文件的生效顺序,会对值进行覆盖: 1. @TestPropertySource 注解 2. 命令行参数 3. Java系统属性(System.getProperties()) 4. 操作系统环 ...

  5. 通过maven profile 打包指定环境配置(excludes去除无用包)通过配置pom实现打包时根据不同环境选择对应的配置文件

    1.背景:在发布项目时经常有不同环境不同配置的情况,每次都更改,造成重复工作,所以通过配置maven的pom文件来实现把不同环境的配置文件打包到指定文件下 2.废话不多说,上代码,下面是我目前的配置文 ...

  6. Linux使用Docker安装Nacos并配置MySQL数据源,将Springboot的配置文件部署到Nacos

    Linux使用Docker安装Nacos并配置MySQL数据源,将Springboot的配置文件部署到Nacos 前言 一.Docker中安装配置Nacos 安装Docker 拉取Nacos镜像 启动 ...

  7. SpringBoot整合Dubbo的三种(配置)

    SpringBoot整合Dubbo的三种方式 1.使用application.properties 1.提供者 2.消费者 2.使用dubbo.xml 1.提供者 2.消费者 3.使用注解配置 1.提 ...

  8. Java|Kotlin, SpringBoot从配置文件中读取@KafkaListener参数配置

    springboot从配置文件中设置@KafkaListener参数配置 在java中使用占位符#{'${kakfa.topics}'}来进行参数注入 @KafkaListener(topics = ...

  9. 【springboot进阶】springboot集成fastjson(三)配置redis使用fastJson进行序列化

    目录 一.引入依赖 二.添加redis连接配置 三.新建RedisConfig类配置 四.测试 五.踩过的坑 数字型的保存 对象的保存 上一章节,我们说到fastjson的自定义序列化和反序列化,这章 ...

最新文章

  1. GitHub 报告显示香港码农大爆发,诚实的程序员:转行只因工资高!
  2. 如何在 7 天内写一个程序? | 每日趣闻
  3. 【Linux】39.nslookup查看域名与其对应的ip
  4. 「第三只手」机械臂:采水果,破墙壁!
  5. 星期五基准功能Java
  6. java function void_Java8中你可能不知道的一些地方之函数式接口实战
  7. STM32F103定时器输出频率测试
  8. Python 操作 Azure Blob Storage
  9. ./configure,make,make install 的作用
  10. Prism发布了第一个版本+Entlib3.1在VS2008下工作的解决方案
  11. 计算机中算术逻辑单元负责,算术逻辑单元可实现 算术逻辑单元的发展
  12. oracle收集直方图,Oracle的直方图
  13. 明翰数据结构与算法笔记V0.8(持续更新)
  14. Python合并有相同列的两个表格
  15. Android 时间轴的实现
  16. 手绘PS云毕业照片走红网络,身为预备役程序员的我却把好好的青春回忆变成了暗黑系恐怖片
  17. 微信公众号 授权死循环 问题解决
  18. 投资理财-股市是称重机吗?
  19. Python 练习实例100例—4
  20. 矢量图片添加动画 AnimatedVectorDrawable

热门文章

  1. [转]JavaSE学习 Swing(二)
  2. 6 important .NET concepts: - Stack, heap, Value types, reference types, boxing and Unboxing.
  3. oracle 恢复学习 案例1 一个数据文件丢失 完全恢复数据库
  4. C/C++ 编程中多国语言处理
  5. LeetCode 94. Binary Tree Inorder Traversal
  6. fastunfolding算法_社区发现算法综述—part1
  7. Perl程序设计中常用的函数
  8. 第二十四章 SHELL脚本-CENTOS7.5知识
  9. 如何在 Ubuntu 14.04 里面配置 chroot 环境
  10. js设置radio 和checkbox 单选