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

Spring Boot各类变量的使用

文章目录

  • 1. 变量类型
  • 2. 获取变量
    • 2.1 获取方式
    • 2.2 获取方法
      • 2.2.1 通过@Value注入获取变量值
      • 2.2.2 System.genenv 获取变量值
      • 2.2.3 System.getProperty 获取变量值
      • 2.2.4 Environment 获取变量值
      • 2.2.5 @ConfigurationProperties 获取变量值
      • 2.2.6 SpringApplication.run 程序启动参数中获取变量值

1. 变量类型

  • 操作系统环境变量
  • JVM环境变量
  • 配置文件变量
  • 程序启动参数变量

2. 获取变量

2.1 获取方式

  • @Value 注入获取变量值
  • System.genenv 获取变量值
  • System.getProperty 获取变量值
  • Environment 获取变量值
  • @ConfigurationProperties 获取变量
  • args 程序参数变量

2.2 获取方法

2.2.1 通过@Value注入获取变量值

  @Value注入变量用于从SpringBoot项目Environment对象中获取变量值,Environment 对象中的变量来源于配置文件,程序启动参数、JVM环境变量、操作系统环境变量。程序启动参数与配置文件中定义了相同的变量时,程序启动参数将会覆盖配置文件中变量的值。

@Value("${gateway.whitelist}")
private String[] whiteList;

  从配置文件中获取变量值,如在 application.propertiesbootstrap.yml 等定义好环境变量后,程序中可通过 @Value 注入变量的方式获取变量值。例如在 application.properties 中定义变量:

gateway.whitelist=/abc,/def

  如果在JVM环境变量、操作系统环境变量、配置文件,程序启动参数中定义了相同的变量名,变量值的优先级是:JVM环境变量 > 程序启动参数 > 操作系统环境变量 > 配置文件参数

2.2.2 System.genenv 获取变量值

  System.getenv() 是 Java 内置方法,用于获取操作系统环境变量。

String password = System.getProperty("jasypt_encryptor_password");

  获取操作系统环境变量,采用这种方式获取 jasypt_encryptor_password 变量的值,一定要将这个变量在操作系统环境变量中定义,如果这个变量在 application.propertiesbootstrap.yml 中定义则将无法被获取。
  在操作系统中定义环境变量时,变量名中不能有 . 号,例如 jasypt.encryptor.password 不能设置成操作系统的环境变量。可以使用 _ 来代替 . 号。

2.2.3 System.getProperty 获取变量值

  System.getProperty() 是Java 内置方法,用于获取JVM环境变量。

String password = System.getProperty("jasypt.encryptor.password");

  获取JVM环境中的变量值,需要在JVM环境中定义 jasypt.encryptor.password 。通过 java -jar 启动 spring boot 程序时,可通过使用 -Djasypt.encryptor.password=xxx 的方式设置JVM环境中的变量,示例如下:

java -jar -Djasypt.encryptor.password=xxx demo.jar

2.2.4 Environment 获取变量值

  从SpringBoot项目Environment对象中获取变量值,Environment 对象中的变量来源于配置文件,程序启动参数、JVM环境变量、操作系统环境变量。程序启动参数与配置文件中定义了相同的变量时,程序启动参数将会覆盖配置文件中变量的值。

@Autowired
private Environment environment;String password = environment.getProperty("jasypt.encryptor.password");

  如果操作系统环境变量中定义了 jasypt_encryptor_password 变量,则变量值为操作系统环境变量中的值,如果操作系统环境变量中未定义这个变量,则从配置文件(application.propertiesbootstrap.yml)中获取变量值。假设 bootstrap.yml 中定义了

jasypt:encryptor:password: 123456789

通过 environment.getProperty("jasypt.encryptor.password") 将会获取到变量的值为 123456789。
  如果在JVM环境变量、操作系统环境变量、配置文件,程序启动参数中定义了相同的变量名,变量值的优先级是:JVM环境变量 > 程序启动参数 > 操作系统环境变量 > 配置文件参数

2.2.5 @ConfigurationProperties 获取变量值

@Configuration
@ConfigurationProperties(prefix = "demo.kv")
@Data
public class AppSecurity {private Map<String, String> apps;
}

  从配置文件(application.propertiesbootstrap.yml)中获取变量。在 bootstrap.yml 中定义变量:

demo:kv:apps:key111: 1230678913234key112: 12306789fdfdf4

2.2.6 SpringApplication.run 程序启动参数中获取变量值

public static void main(String[] args) {SpringApplication.run(BootstrapApplication.class, args);for (String arg : args) {System.out.println(arg);}
}// output: --demo.name=abc

  程序启动参数变量是程序启动时传入的变量. java -jar 启动程序时使用 -- 传入程序启动参数变量。例如在程序启动时,传入 demo.name 的变量:

java -jar demo.jar --demo.name=abc

  采用这种方式定义变量后,这些参数会被添加到 Environment 环境变量中,如果在配置文件中已经定义了 demo.name 变量,则通过 --demo.name 变量将会覆盖之前在配置文件中定义的变量值。例如:application.properties 中配置信息是:

demo.name=hello

  程序启动时使用 java -jar demo.jar --demo.name=abc 启动程序,在程序中使用 Environment 对象获取 demo.name 变量时,获取到的值是:abc

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Redis原理篇(String)
  • MVC的设计理念
  • NLP自然语言处理介绍
  • openssl3.2 - linux脚本(.sh)调用openssl命令行参数的简单确认方法
  • 【迅搜19】扩展(二)TNTSearch和JiebaPHP方案
  • 5G_射频测试_参考规范(一)
  • ssh:connect to host github.com port 22: Connection timed out
  • pyspark笔记:over
  • Halcon 边缘提取
  • 【JavaWeb】XML Tomcat10 HTTP
  • 计算机组成原理 第一弹
  • [GN] Vue3.2 快速上手 ---- 核心语法2
  • flask 与小程序 菜品详情和分享功能
  • 全球光伏知名企业-晶科能源联合泛微采知连,建立文控管理平台
  • C#基础:通过QQ邮件发送验证码到指定邮箱
  • 【翻译】babel对TC39装饰器草案的实现
  • Akka系列(七):Actor持久化之Akka persistence
  • docker容器内的网络抓包
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • java中具有继承关系的类及其对象初始化顺序
  • JSDuck 与 AngularJS 融合技巧
  • text-decoration与color属性
  • V4L2视频输入框架概述
  • Vue.js源码(2):初探List Rendering
  • 测试如何在敏捷团队中工作?
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 前端学习笔记之观察者模式
  • 运行时添加log4j2的appender
  • 扩展资源服务器解决oauth2 性能瓶颈
  • ​什么是bug?bug的源头在哪里?
  • ​字​节​一​面​
  • # 利刃出鞘_Tomcat 核心原理解析(八)-- Tomcat 集群
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (2)STL算法之元素计数
  • (2024最新)CentOS 7上在线安装MySQL 5.7|喂饭级教程
  • (C++)八皇后问题
  • (二)windows配置JDK环境
  • (利用IDEA+Maven)定制属于自己的jar包
  • (十七)Flink 容错机制
  • (一一四)第九章编程练习
  • (转)人的集合论——移山之道
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .NET 事件模型教程(二)
  • .NET处理HTTP请求
  • .NET周刊【7月第4期 2024-07-28】
  • @for /l %i in (1,1,10) do md %i 批处理自动建立目录
  • @RunWith注解作用
  • @SentinelResource详解
  • [3D游戏开发实践] Cocos Cyberpunk 源码解读-高中低端机性能适配策略
  • [ANT] 项目中应用ANT
  • [AR]Vumark(下一代条形码)