IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Spring Boot之配置文件 -> 正文阅读

[Java知识库]Spring Boot之配置文件

配置文件在项目开发中是必不可少的,它有很多的使用方法,下面就配置文件的一些用法详情。

1. Spring Boot 配置文件加载优先级

????????有两种配置文件 properties yml,它们最大的区别就是格式不一样,而在同一目录下properties 的优先级是高于yml;

Spring Boot读取优先级:

?? ??? ?a. 项目根目录下的/config目录下的配置文件。
?? ??? ?b. 项目根目录下的配置文件。
?? ??? ?c. 项目类路径(resources)下的/config目录下的配置文件。
?? ??? ?d. 项目类路径(resources)下的配置文件。

bootstrap和application的优先级
????????bootstrap配置文件由spring父上下文加载,并且比application配置文件优先加载(父上下文不会使用application配置文件),而application配置文件由子上下文加载。bootstrap加载的配置信息不能被application的相同配置覆盖。

注意:如果代码中有使用到配置文件中的参数,这时bootstrap和application都有这个参数,那么会优先使用application的参数。

2. Spring Boot 读取配置文件

在项目开发过程中,如果有多套环境,这时我们就不能把代码里面的参数写死,不然每次换环境测试的时候都需要改代码。这时我们就可以把不同环境的变量放到配置文件中,然后从配置文件中获取参数。

a. @Value? ?

非静态参数:一般情况下可以使用@value直接获取配置文件中的参数。

server.port=8090

@Value("${server.port}")
private String serverPort;

静态参数:当类中的静态方法需要从配置文件读取参数时,需要将参数定义为静态,才可以在静态方法中获取到,这时候就不能只配置个@Value注解就行了。

server.port=8090

@Component
public class Text {

? ? private static String serverPort;

? ? @Value("${server.port}")
? ? public void setServerPort(String serverPort){
? ? ? ? Text.serverPort = serverPort;
? ? }

}

b. @ConfigurationProperties
@ConfigurationProperties 和 @Value 的使用是不相同的,@Value一次只可以读取一个配置参数,而@ConfigurationProperties 可以读取一组配置参数;

text.name=zan
text.sex=nan

@Component
@ConfigurationProperties(prefix = "text", ignoreUnknownFields = true)
public class ConfigurationPropertiesConfig {

? ? private String name;

? ? private String sex;

? ? public String getName() {
? ? ? ? return name;
? ? }

? ? public void setName(String name) {
? ? ? ? this.name = name;
? ? }

? ? public String getSex() {
? ? ? ? return sex;
? ? }

? ? public void setSex(String sex) {
? ? ? ? this.sex = sex;
? ? }

}

c. Environment
Environment 是 Spring Core 中的一个用于读取配置文件的类,将此类使用 @Autowired 注入到类中就可以使用它的 getProperty 方法来获取某个配置项的值了。

server.port=8090

@RestController
@RequestMapping("/text")
public class Text {

? ? @Autowired
? ? private Environment environment;

? ? @GetMapping("get")
? ? public String text(){
? ? ? ? return environment.getProperty("server.port");
? ? }
}

d. @PropertySource
可以指定读取的配置文件

server.port=8090

@Component
@PropertySource("classpath:application.properties")
public class Text {
?? ?@Value("${server.port}")
?? ?private String serverPort;
}

e. 使用原生方式读取配置文件
当有些场景不能使用注入的形式去获取配置文件中的参数时,可以使用PropertiesLoaderUtils这个工具类去获取到配置文件中的参数。

@RestController
@RequestMapping("/text")
public class Text {

? ? @GetMapping("get")
? ? public String text(){
? ? ? ? try {
? ? ? ? ? ? return PropertiesLoaderUtils.
? ? ? ? ? ? ?? ??? ??? ??? ?loadAllProperties("application.properties").get("server.port").toString();
? ? ? ? } catch (IOException e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? }
? ? ? ? return "";
? ? }
}

3. 其他

配置文件中获取环境变量

在配置文件中,我们只需要使用${变量名}就可以声明一个使用环境变量的值。如果想向这个值声明一个默认值,以确保未在环境变量中找到此值时不会出错,使用${变量名:默认值}即可。

liunx中环境变量  /etc/profile 
export HOST=127.0.0.1

application.properties

host=${HOST:8080}

日志中使用配置文件的参数

当我们在实际开发中,如果遇到日志需要上传到阿里云,而且不同的环境 accessKeyId 和 accessKeySecret 都不同,这时我们就可以根据配置文件来进行区分,可以在日志.xml中获取到配置文件中的参数;

application.properties

logback.accessKeyId=111
logback.accessKeySecret=222
logback.project=aliyun
logback.logStore=aliyun-1


日志.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">

    <springProperty scope="context" name="project" source="logback.project"/>
    <springProperty scope="context" name="logStore" source="logback.logStore"/>
    <springProperty scope="context" name="accessKeyId" source="logback.accessKeyId"/>
    <springProperty scope="context" name="accessKeySecret" source="logback.accessKeySecret"/>

</configuration>

文章主要是在实际开发中有使用的场景,并且做个记录,方面下次使用时查阅。

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-09-15 01:51:23  更:2022-09-15 01:52:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 12:55:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码