当前位置: 首页 > news >正文

springboot读取配置时,读取到了系统环境变量

在Spring Boot应用中,读取配置通常通过application.propertiesapplication.yml文件进行。不过,Spring Boot也支持从系统环境变量读取配置,这使得应用可以在不同的环境中灵活配置。下面详细介绍如何在Spring Boot中读取系统环境变量。

1. 配置优先级

Spring Boot有一套配置优先级机制,从多个来源读取配置,优先级从高到低依次是:

  1. 命令行参数
  2. SPRING_APPLICATION_JSON中的属性(系统环境变量或命令行参数)
  3. Java系统属性(System.getProperties()
  4. 操作系统环境变量
  5. application.propertiesapplication.yml文件(位于src/main/resources
  6. 通过@PropertySource注解声明的属性源
  7. 默认属性

2. 读取系统环境变量

在Spring Boot应用中,可以通过以下几种方式读取系统环境变量:

方法一:使用@Value注解

可以直接在Spring组件中使用@Value注解来注入系统环境变量:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;@Component
public class MyComponent {@Value("${MY_ENV_VARIABLE}")private String myEnvVariable;public void printEnvVariable() {System.out.println("MY_ENV_VARIABLE: " + myEnvVariable);}
}

假设环境变量MY_ENV_VARIABLE的值是HelloWorld,那么myEnvVariable字段就会被注入HelloWorld

方法二:使用@ConfigurationProperties注解

可以创建一个配置类来绑定多个环境变量:

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;@Configuration
@ConfigurationProperties(prefix = "my.config")
public class MyConfig {private String envVariable;public String getEnvVariable() {return envVariable;}public void setEnvVariable(String envVariable) {this.envVariable = envVariable;}
}

假设有环境变量MY_CONFIG_ENV_VARIABLE,那么在application.properties中添加以下内容:

my.config.env-variable=${MY_CONFIG_ENV_VARIABLE}

然后可以在应用中使用MyConfig类来获取环境变量的值。

方法三:使用Environment对象

可以直接使用Spring的Environment对象来访问环境变量:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;@Component
public class MyComponent {@Autowiredprivate Environment env;public void printEnvVariable() {String myEnvVariable = env.getProperty("MY_ENV_VARIABLE");System.out.println("MY_ENV_VARIABLE: " + myEnvVariable);}
}
方法四:命令行参数覆盖

可以在启动Spring Boot应用时通过命令行参数覆盖环境变量:

java -jar myapp.jar --MY_ENV_VARIABLE=HelloWorld

这种方式会覆盖环境变量,并且具有更高的优先级。

3. 示例

假设有一个Spring Boot项目,在读取环境变量时可以按照上述任一方式进行配置。以下是一个完整示例:

配置类
package com.example.demo;import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;import javax.annotation.PostConstruct;@Component
public class MyComponent {@Value("${MY_ENV_VARIABLE}")private String myEnvVariable;private final Environment env;public MyComponent(Environment env) {this.env = env;}@PostConstructpublic void printEnvVariables() {// 使用 @Value 注解读取System.out.println("MY_ENV_VARIABLE (via @Value): " + myEnvVariable);// 使用 Environment 对象读取String myEnvVariableViaEnv = env.getProperty("MY_ENV_VARIABLE");System.out.println("MY_ENV_VARIABLE (via Environment): " + myEnvVariableViaEnv);}
}
启动类
package com.example.demo;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}
}

4. 运行应用

确保在操作系统中设置了环境变量MY_ENV_VARIABLE,然后运行Spring Boot应用:

export MY_ENV_VARIABLE=HelloWorld
java -jar myapp.jar

应用启动后,会输出环境变量的值。

通过这些方法,可以灵活地在Spring Boot应用中读取和使用系统环境变量,使应用配置更加灵活和环境无关。

http://www.lryc.cn/news/373494.html

相关文章:

  • 平均召回(Average Recall,AR)概述
  • WWDC 2024 回顾:Apple Intelligence 的发布与解析
  • [Cloud Networking] SPDY 协议
  • Linux-笔记 samba实现映射网络驱动器到Win 10
  • 【技巧】Leetcode 67. 二进制求和【简单】
  • vue项目问题汇总
  • Android 工程副总裁卸任
  • Qt 6.13
  • 发布自己的c#包到nuget
  • 【学习笔记】MySQL(Ⅲ)
  • STM32项目分享:心率血氧手环(可报警)
  • 前端面经总结、学习【2023秋招】
  • Linux DMA-Buf驱动框架
  • MySQL之优化服务器设置(三)
  • 如何实现 Python 源码压缩加密常用解决方案详细教程(更新中)
  • SAP Build 2-PDF数据提取与决策
  • 【回溯】Leetcode 77. 组合【中等】
  • 项目中常量的定义方式
  • BL104钡铼多协议采集网关助力企业智能化转型
  • 【LC刷题】DAY08:151 55 28 459
  • Debian 12.5 一键安装 Oracle 19C 单机
  • ARP协议相关
  • Github 2024-06-14 开源项目日报Top10
  • 记录AE快捷键(持续补充中。。。)
  • 基于springboot实现问卷调查系统项目【项目源码+论文说明】计算机毕业设计
  • React@16.x(29)useRef
  • 无人机的力量——在民用方面的应用
  • 探索档案未来,尽在ARCHE-2024
  • Maven 核心插件 maven-clean-plugin 使用详解
  • 金融数据中心布线运维管理解决方案