当前位置: 首页 > 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

相关文章:

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 程序启动参数…...

Hive管理UDF详解

大数据集群下,共有三种管理Hive UDF的方式,如下: 名称重启Hive服务Jar保存目录场景直接JAR配置需要HDFS开发辅助JARs目录配置需要本地目录防止意外覆盖文件可重载辅助JAR配置不需要本地目录频繁更新UDF场景{HIVE_HOME}/auxlib目录需要本地目录不建议{HIVE_HOME}/lib目录需要…...

bug笔记:解决 HTTP Error 500.30 - ASP.NET Core app failed to start

总结下后端部署windos iis环境net6版本&#xff0c;500.30问题报错的一种解决方案&#xff1a; 一、问题描述 二、解决方案 检查下是否安装了net6对应的环境&#xff0c;是否已经安装 然后在事件管理器>Windows日志>应用程序&#xff0c;里面查看详细异常记录 在iis下面…...

理解pytorch系列:transpose是怎么实现的

在PyTorch中&#xff0c;transpose()是一种操作&#xff0c;它交换张量中两个指定维度的位置。实现这一点的关键在于不实际移动数据&#xff0c;而是通过改变张量的元数据&#xff08;包括步长&#xff08;stride&#xff09;和尺寸&#xff08;size&#xff09;&#xff09;来…...

Linux tftp命令教程:文件传输利器(附案例详解和注意事项)

Linux tftp命令介绍 tftp&#xff0c;全称为Trivial File Transfer Protocol&#xff08;简单文件传输协议&#xff09;。tftp是一个用于文件传输的客户端命令&#xff0c;用于从远程主机传输文件&#xff0c;包括一些非常简洁、通常嵌入的系统。 Linux tftp命令适用的Linux版…...

beego的模块篇 - task任务

利用该工具来定时的做一些任务&#xff0c;但是有些时候我们的进程内也希望定时的来处理一些事情&#xff0c;可以使用crontab。 1 任务计划 1.1 初始化一个任务 tk1 : task.NewTask("tk1", "0 12 * * * *", func(ctx context.Context) error { fmt.Pri…...

ThreadLocal工具类

ThreadLocal工具类 ThreadLocalUtil.java public class ThreadLocalUtil {static final ThreadLocal THREAD_LOCAL new ThreadLocal();public static <T> T get() {return (T) THREAD_LOCAL.get();}public static void set(Object value) {THREAD_LOCAL.set(value);}p…...

【c语言】扫雷(上)

先开一个test.c文件用来游戏的逻辑测试&#xff0c;在分别开一个game.c文件和game.h头文件用来实现游戏的逻辑 主要步骤&#xff1a; 游戏规则&#xff1a; 输入1&#xff08;0&#xff09;开始&#xff08;结束&#xff09;游戏&#xff0c;输入一个坐标&#xff0c;如果该坐…...

Java读取制表符文本转换为JSON

在Java开发中&#xff0c;处理各种数据格式是常见的任务。本文将介绍如何使用Java读取制表符文本文件&#xff0c;并将其转换为JSON格式&#xff0c;以便于后续的数据处理和分析。我们将使用Java中的相关库来实现这个过程&#xff0c;并提供详细的代码示例。 引言&#xff1a;…...

从C到C++:向面向对象过渡的技巧与诀窍

从C到C的过渡是一项对于程序员来说非常重要的转变。C是一种基于C语言的面向对象编程语言&#xff0c;它引入了许多新的概念和功能&#xff0c;如类、对象、继承和多态等。这些新的特性使得C在软件开发中更加灵活、可复用和易于维护。 下面是一些向面向对象过渡的技巧和诀窍&am…...

Vue3中动态组件使用

一&#xff0c;动态组件使用&#xff1a; 应用场景&#xff1a;动态绑定或切换组件 应用Vue3碎片&#xff1a; is 1.使用 a.组件A <div class"layout-base"><Button>红茶</Button> </div>a.组件B <div class"layout-base"&g…...

kubernetes工作负载-DamonSet

一、DemonSet的介绍 1、什么是DemonSet DaemonSet 控制器是用来保证在所有节点上运行一个 Pod 的副本当有节点加入集群时&#xff0c; 也会为他们新增一个 Pod。 当有节点从集群移除时&#xff0c;这些 Pod 也会被回收。删除 DaemonSet 将会删除它创建的所有 Pod。 简而言之…...

zabbix其他配置

自动发现 zabbix server 主动的去发现所有的客户端&#xff0c;然后将客户端的信息登记在服务端上。 缺点是如果定义的网段中的主机数量多&#xff0c;zabbix server 登记耗时较久&#xff0c;且压力会较大。 systemctl disable --now firewalld setenforce 0 hostnamectl se…...

蓝桥杯备战 每日一题 (2)

今天的题目是回忆迷宫 这个题目我们来熟悉一下 弗洛伊德算法 的代码模板 弗洛伊德算法用来处理最短路径问题 弗洛伊德算法&#xff08;Floyd’s algorithm&#xff09;用于解决图中所有节点对之间的最短路径问题。算法的基本思路是通过逐步迭代更新节点对之间的最短路径长度&a…...

GetShell的姿势

0x00 什么是WebShell 渗透测试工作的一个阶段性目标就是获取目标服务器的操作控制权限&#xff0c;于是WebShell便应运而生。Webshell中的WEB就是web服务&#xff0c;shell就是管理攻击者与操作系统之间的交互。Webshell被称为攻击者通过Web服务器端口对Web服务器有一定的操作权…...

workflow源码解析:ThreadTask

1、使用程序&#xff0c;一个简单的加法运算程序 #include <iostream> #include <workflow/WFTaskFactory.h> #include <errno.h>// 直接定义thread_task三要素 // 一个典型的后端程序由三个部分组成&#xff0c;并且完全独立开发。即&#xff1a;程序协议算…...

为何谷歌强制要求安装ssl证书?

在当今数字化的世界中&#xff0c;网络安全已成为至关重要的议题之一。作为全球最大的搜索引擎之一&#xff0c;谷歌一直在推动网络安全标准的提升。其强制要求网站安装SSL证书的决策引起了广泛关注。本文将深入探讨谷歌为何强制要求安装SSL证书&#xff0c;以及这一举措对互联…...

【刷题】 leetcode 2 .两数相加

两数相加 两数相加1 思路一 &#xff08;暴毙版&#xff09;2 思路二 &#xff08;本质出发&#xff09; 谢谢阅读Thanks♪(&#xff65;ω&#xff65;)&#xff89;下一篇文章见&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 两数相加 我们来看…...

Webpack5入门到原理2:基本使用

Webpack 是一个静态资源打包工具。 它会以一个或多个文件作为打包的入口&#xff0c;将我们整个项目所有文件编译组合成一个或多个文件输出出去。 输出的文件就是编译好的文件&#xff0c;就可以在浏览器段运行了。 我们将 Webpack 输出的文件叫做 bundle。 功能介绍 Webp…...

企业微信上传临时素材errcode:44001,errmsg:empty media data

企业微信&#xff0c;上传临时素材&#xff0c;报错&#xff1a; {“errcode”:44001,“errmsg”:“empty media data [logid:]”}&#xff0c; 开发语言C# 重点代码&#xff1a; formData.Headers.ContentType new MediaTypeHeaderValue(“application/octet-stream”); 解…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络&#xff0c;将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具&#xff0c;支持 Chrome、Firefox、Safari 等主流浏览器&#xff0c;提供多语言 API&#xff08;Python、JavaScript、Java、.NET&#xff09;。它的特点包括&a…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

laravel8+vue3.0+element-plus搭建方法

创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?

在工业自动化持续演进的今天&#xff0c;通信网络的角色正变得愈发关键。 2025年6月6日&#xff0c;为期三天的华南国际工业博览会在深圳国际会展中心&#xff08;宝安&#xff09;圆满落幕。作为国内工业通信领域的技术型企业&#xff0c;光路科技&#xff08;Fiberroad&…...

c# 局部函数 定义、功能与示例

C# 局部函数&#xff1a;定义、功能与示例 1. 定义与功能 局部函数&#xff08;Local Function&#xff09;是嵌套在另一个方法内部的私有方法&#xff0c;仅在包含它的方法内可见。 • 作用&#xff1a;封装仅用于当前方法的逻辑&#xff0c;避免污染类作用域&#xff0c;提升…...

Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践

在 Kubernetes 集群中&#xff0c;如何在保障应用高可用的同时有效地管理资源&#xff0c;一直是运维人员和开发者关注的重点。随着微服务架构的普及&#xff0c;集群内各个服务的负载波动日趋明显&#xff0c;传统的手动扩缩容方式已无法满足实时性和弹性需求。 Cluster Auto…...

【Kafka】Kafka从入门到实战:构建高吞吐量分布式消息系统

Kafka从入门到实战:构建高吞吐量分布式消息系统 一、Kafka概述 Apache Kafka是一个分布式流处理平台,最初由LinkedIn开发,后成为Apache顶级项目。它被设计用于高吞吐量、低延迟的消息处理,能够处理来自多个生产者的海量数据,并将这些数据实时传递给消费者。 Kafka核心特…...

OCR MLLM Evaluation

为什么需要评测体系&#xff1f;——背景与矛盾 ​​ 能干的事&#xff1a;​​ 看清楚发票、身份证上的字&#xff08;准确率>90%&#xff09;&#xff0c;速度飞快&#xff08;眨眼间完成&#xff09;。​​干不了的事&#xff1a;​​ 碰到复杂表格&#xff08;合并单元…...

pgsql:还原数据库后出现重复序列导致“more than one owned sequence found“报错问题的解决

问题&#xff1a; pgsql数据库通过备份数据库文件进行还原时&#xff0c;如果表中有自增序列&#xff0c;还原后可能会出现重复的序列&#xff0c;此时若向表中插入新行时会出现“more than one owned sequence found”的报错提示。 点击菜单“其它”-》“序列”&#xff0c;…...

字符串哈希+KMP

P10468 兔子与兔子 #include<bits/stdc.h> using namespace std; typedef unsigned long long ull; const int N 1000010; ull a[N], pw[N]; int n; ull gethash(int l, int r){return a[r] - a[l - 1] * pw[r - l 1]; } signed main(){ios::sync_with_stdio(false), …...