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

5次阅读

共计 4692 个字符,预计需要花费 12 分钟才能阅读完成。

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

测试

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/spr…
  • Gitee:https://gitee.com/rumenz/spri…
  • https://rumenz.com/rumenbiji/…
  • 我的博客 https://rumenz.com/ ,
  • 我的工具箱 https://tooltt.com/
  • 微信公众号:【入门小站】

  • 关注【入门小站】回复【1001】获取 linux 常用命令速查手册
  • 关注【入门小站】回复【1003】获取 LeetCode 题解【java 语言实现】
  • 关注【入门小站】回复【1004】获取 Java 根底外围总结
  • 关注【入门小站】回复【1009】获取 阿里巴巴 Java 开发手册
正文完
 0