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

举报
入门小站 发表于 2022/02/08 22:51:39 2022/02/08
【摘要】 SpringBoot配置属性的规则通过.分离各个元素最后一个.将前缀与属性名称分开必须是字母(az)和数字(0-9)必须是小写字母用连字符-来分隔单词唯一允许的其他字符是[和],用于List的索引不能以数字开头 相同的配置项Spring Boot 2.x 加载配置文件的时候会移除特殊字符并且还会将配置均用全小写的方式进行匹配和加载。application.propertiescom.rum...

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")
    @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:/
路径 参数值
/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")
    @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

image-20211109215812644

image-20211109215845066

测试

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

本小结源码地址:

  • 关注【入门小站】回复【1001】获取 linux常用命令速查手册
  • 关注【入门小站】回复【1003】获取 LeetCode题解【java语言实现】
  • 关注【入门小站】回复【1004】获取 Java基础核心总结
  • 关注【入门小站】回复【1009】获取 阿里巴巴Java开发手册
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。