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

Java获取环境变量和运行时环境信息和自定义配置信息

System.getenv() 获取系统环境变量


public static void main1() {Map<String, String> envMap = System.getenv();envMap.entrySet().forEach(x-> System.out.println(x.getKey() + "=" + x.getValue()));
}

System.getenv() 获取的是操作系统环境变量列表,如下:

 也可以使用System.getenv("环境变量名称")的方式单独获取某一个具体环境变量的值。

比较重要的环境变量包括(Windows操作系统):

  • COMPUTERNAME     返回计算机的名称。
  • COMSPEC     返回命令行解释器可运行程序的准确路径。
  • WINDIR    返回操作系统文件夹的位置。
  • OS     返回操作系统的名称。Windows 2000 将操作系统显示为 Windows_NT。
  • PATH    指定可运行文件的搜索路径。
  • USERDOMAIN    返回包括用户帐户的域的名称。
  • USERNAME    返回当前登录的用户的名称。

System.getProperties()获取运行时环境变量

public static void main2() {Properties props = System.getProperties();props.list(System.out);
}

部分运行时环境信息摘要如下:

-- listing properties --
java.runtime.name=Java(TM) SE Runtime Environment
sun.boot.library.path=D:\Java\jdk1.8.0_172\jre\bin
java.vm.version=25.172-b11
java.vm.vendor=Oracle Corporation
java.vendor.url=http://java.oracle.com/
path.separator=;
java.vm.name=Java HotSpot(TM) 64-Bit Server VM
file.encoding.pkg=sun.io
user.script=
user.country=CN
sun.java.launcher=SUN_STANDARD
sun.os.patch.level=
java.vm.specification.name=Java Virtual Machine Specification
user.dir=D:\bench-cluster\spring_in_action_ecl...
java.runtime.version=1.8.0_172-b11
java.awt.graphicsenv=sun.awt.Win32GraphicsEnvironment
java.endorsed.dirs=D:\Java\jdk1.8.0_172\jre\lib\endorsed
os.arch=amd64
java.io.tmpdir=C:\Users\zhangsan\AppData\Local\Temp\
line.separator=java.vm.specification.vendor=Oracle Corporation
user.variant=
os.name=Windows 10
sun.jnu.encoding=GBK
java.library.path=D:\Java\jdk1.8.0_172\bin;C:\WINDOWS\S...
java.specification.name=Java Platform API Specification
java.class.version=52.0
sun.management.compiler=HotSpot 64-Bit Tiered Compilers
os.version=10.0
user.home=C:\Users\zhangsan
user.timezone=
java.awt.printerjob=sun.awt.windows.WPrinterJob
file.encoding=UTF-8
java.specification.version=1.8
user.name=zhangsan
java.class.path=D:\Java\jdk1.8.0_172\jre\lib\charsets...
java.vm.specification.version=1.8
sun.arch.data.model=64
java.home=D:\Java\jdk1.8.0_172\jre
sun.java.command=com.swjtu.mybatis.main.Main2
java.specification.vendor=Oracle Corporation
user.language=zh
awt.toolkit=sun.awt.windows.WToolkit
java.vm.info=mixed mode
java.version=1.8.0_172
java.ext.dirs=D:\Java\jdk1.8.0_172\jre\lib\ext;C:\W...
sun.boot.class.path=D:\Java\jdk1.8.0_172\jre\lib\resource...
java.vendor=Oracle Corporation
file.separator=\
java.vendor.url.bug=http://bugreport.sun.com/bugreport/
sun.cpu.endian=little
sun.io.unicode.encoding=UnicodeLittle
sun.desktop=windows
sun.cpu.isalist=amd64zheshi 

也可以通过System.getProperty("属性名称")来获取某个具体的属性内容,或者System.getProperties方法的返回值是一个Properties对象,可以使用getProperty("属性名称")来获取某个具体的属性内容。

Properties properties = System.getProperties();
String p1 = properties.getProperty("user.dir");
System.out.println(p1);
String p2 = System.getProperty("file.encoding");
System.out.println(p2);

几个比较常用的属性是:

  • java.home:Java 安装文件夹 (例如:D:/JavaStudio/jdk15/jre)
  • java.class.path:Java 类路径
  • java.vm.version:Java虚拟机版本(例如:1.5.0-b64)
  • java.version:Java版本(例如:1.5.0)
  • os.name:操作系统的名称(例如:Windows 10)
  • os.version:操作系统的版本号(例如:10.0)
  • user.home:用户的主文件夹 (例如:C:/Users/piglite)
  • user.name:当前用户名
  • user.country:当前所属国家
  • user.dir:当前Java文件运行时的工作文件夹
  • file.separator:文件路径分隔符
  • file.encoding:文件编码

其中 file.encoding 可以通过jvm运行时参数指定, vm 参数如下:

-Dfile.encoding=UTF-8 

在IDEA中处理TOMCAT启动乱码时,经常会采用这种设置方式。

自定义配置信息

做JDBC编程时习惯性的把driver, url, user和password提取到配置文件中。配置文件放的位置不一样,采用的读取方式也有所不同:

放在包中

放在包中的properties文件会随着项目一起编译(类似于maven的resources文件夹中配置文件的处理方式)。这点可以通过IDEA的out文件夹进行确认:

 

读取该配置文件时可以使用ResourceBundel也可以使用Properties。

使用ResourceBundle

ResourceBundle bundle = ResourceBundle.getBundle("config/config");
String url = bundle.getString("url");
System.out.println(url);

 getBundle读取默认安装项目编译后的路径进行读取,它可以省略配置文件的扩展名,整体写法比Properties要简单一些。

使用Properties

使用Properties的关键是获取配置文件流的方式。可以使用ClassLoader和FileInputStream,两者的差异在于ClassLooder的路径是项目编译后目标文件的路径,而FileInputStream的路径是文件在操作系统中保存的路径。

ClassLoader

Properties properties = new Properties();
InputStream stream = ClassLoader.getSystemResourceAsStream("config/config.properties");
properties.load(stream);
String url = properties.getProperty("url");
System.out.println(url);

FileInputStream

Properties properties = new Properties();
String path = System.getProperty("user.dir")+"/out/production/myJdbc/config/config.properties";
properties.load(new FileInputStream(path));
String url = properties.getProperty("url");
System.out.println(url);

使用ClassLoader显然更便捷一些。

放在项目根目录或者其它文件夹中

但是对于配置文件而言,显然放在项目根目录或者用户目录下修改起来更方便。例如:mydb.properties

放在这个位置的配置文件是不会随着项目一起编译的(同样可以out文件夹下内容进行验证),因此读取这个位置的配置文件信息只能依靠Properties+FileInputStream来读取了:

Properties properties = new Properties();
String path = System.getProperty("user.dir")+"/mydb.properties";
properties.load(new FileInputStream(path));
String url = properties.getProperty("url");
System.out.println(url);

最后,如果觉得将数据库用户名、密码、数据库URL等信息写在配置文件中不太妥当,完全可以把配置信息写在运行程序的系统环境变量中,通过前面介绍的System.getenv()的方式进行读取。

相关文章:

Java获取环境变量和运行时环境信息和自定义配置信息

System.getenv() 获取系统环境变量 public static void main1() {Map<String, String> envMap System.getenv();envMap.entrySet().forEach(x-> System.out.println(x.getKey() "" x.getValue())); } System.getenv() 获取的是操作系统环境变量列表&…...

React入门 组件学习笔记

项目页面以组件形式层层搭起来&#xff0c;组件提高复用性&#xff0c;可维护性 目录 一、函数组件 二、类组件 三、 组件的事件绑定 四、获取事件对象 五、事件绑定传递额外参数 六、组件状态 初始化状态 读取状态 修改状态 七、组件-状态修改counter案例 八、this问…...

Windows商店引入SUSE Linux Enterprise Server和openSUSE Leap

在上个月的Build 2017开发者大会上&#xff0c;微软宣布将SUSE&#xff0c;Ubuntu和Fedora引入Windows 商店&#xff0c;反应出微软对开放源码社区的更多承诺。 该公司去年以铂金会员身份加入Linux基金会。现在&#xff0c;微软针对内测者的Windows商店已经开始提供 部分Linux发…...

[NLP]深入理解 Megatron-LM

一. 导读 NVIDIA Megatron-LM 是一个基于 PyTorch 的分布式训练框架&#xff0c;用来训练基于Transformer的大型语言模型。Megatron-LM 综合应用了数据并行&#xff08;Data Parallelism&#xff09;&#xff0c;张量并行&#xff08;Tensor Parallelism&#xff09;和流水线并…...

软考高级系统架构设计师系列论文七十八:论软件产品线技术

软考高级系统架构设计师系列论文七十八:论软件产品线技术 一、摘要二、正文三、总结一、摘要 本人作为某软件公司负责人之一,通过对位于几个省的国家甲级、乙级、丙级设计院的考查和了解,我决定采用软件产品线方式开发系列《设计院信息管理平台》产品。该产品线开发主要有如…...

yolov5中添加ShuffleAttention注意力机制

ShuffleAttention注意力机制简介 关于ShuffleAttention注意力机制的原理这里不再详细解释.论文参考如下链接here   yolov5中添加注意力机制 注意力机制分为接收通道数和不接受通道数两种。这次属于接受通道数注意力机制,这种注意力机制由于有通道数要求,所示我们添加的时候…...

Effective C++条款17——以独立语句将newed 对象置入智能指针(资源管理)

假设我们有个函数用来揭示处理程序的优先权&#xff0c;另一个函数用来在某动态分配所得的widget上进行某些带有优先权的处理: void priority(); void processWidget(std::tr1::shared_ptr<Widget>pw, int priority);由于谨记“以对象管理资源”&#xff08;条款13&…...

奇迹MU服务器如何选择配置?奇迹MU服务器租用

不同的服务器&#xff0c;根据其特点与性能适用于不同的应用场景&#xff0c;为了让你们更好的理解&#xff0c;我们对服务器进行了分类归纳&#xff0c;结合了服务器不同的特点以及价位进行一个区分&#xff0c;帮助我们更好的选择合适的服务器配置。 VPS服务器 VPS服务器又…...

如何远程管理服务器详解

文章目录 前言一、远程管理类型二、远程桌面三、telnet 命令行远程四、查看本地开放端口 前言 很多公司是有自己的机房的&#xff0c;机房里面会有若干个服务器为员工和用户提供服务。大家可以想想&#xff1a;假设这家公司有上百台服务器&#xff0c;我们作为网络工程师&…...

JavaScript——为什么静态方法不能调用非静态方法

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1f4c3;个人状态&#xff1a; 研发工程师&#xff0c;现效力于中国工业软件事业 &#x1f680;人生格言&#xff1a; 积跬步…...

Python实现常见的排序算法

当涉及到排序算法时&#xff0c;一些常见的排序算法包括插入排序、选择排序、冒泡排序、快速排序、归并排序和堆排序。以下是使用Python实现这些常见排序算法的示例代码&#xff1a; 插入排序&#xff08;Insertion Sort&#xff09;&#xff1a; def insertionSort(arr):for…...

【git】fatal: refusing to merge unrelated histories

在一次重新初始化本地仓库后&#xff0c;拉取远程仓库时提示&#xff1a; fatal: refusing to merge unrelated histories 在“fatal: refusing to merge unrelated histories”&#xff08;即&#xff0c;不知道彼此的存在&#xff0c;并已不匹配的项目提交历史&#xff09;…...

在编辑器中使用正则

正则是一种文本处理工具&#xff0c;常见的功能有文本验证、文本提取、文本替换、文本切割等。有一些地方说的正则匹配&#xff0c;其实是包括了校验和提取两个功能。 校验常用于验证整个文本的组成是不是符合规则&#xff0c;比如密码规则校验。提取则是从大段的文本中抽取出…...

【Linux】腾讯云服务器(Linux版)如果获取UUID(通用唯一标识符)

1、通过命令获取 sudo /usr/local/qcloud/YunJing/YDEyes/YDService -uuid -v2、通过API获取 curl http://metadata.tencentyun.com/latest/meta-data/uuid3、获取实例唯一ID curl http://metadata.tencentyun.com/latest/meta-data/instance-id4、实例元数据 实例元数据包…...

CSerialPort教程4.3.x (4) - CSerialPort在QT中的使用

CSerialPort教程4.3.x (4) - CSerialPort在QT中的使用 环境&#xff1a; QT: 5.6.3前言 CSerialPort项目是一个基于C/C的轻量级开源跨平台串口类库&#xff0c;可以轻松实现跨平台多操作系统的串口读写&#xff0c;同时还支持C#, Java, Python, Node.js等。 CSerialPort项目…...

自然语言处理从入门到应用——LangChain:链(Chains)-[基础知识]

分类目录&#xff1a;《自然语言处理从入门到应用》总目录 在本文中&#xff0c;我们将学习如何在LangChain中创建简单的链式连接并添加组件以及运行它。链式连接允许我们将多个组件组合在一起&#xff0c;创建一个统一的应用程序。例如&#xff0c;我们可以创建一个链式连接&a…...

[ubuntu]linux服务器每次重启anaconda环境变量失效

云服务器每次重启后conda不能用了&#xff0c;应该是系统自动把设置环境变量清除了。如果想继续使用&#xff0c;则可以运行一下 minconda3激活方法&#xff1a; source ~/miniconda3/bin/activate anaconda3激活方法&#xff1a; source ~/anaconda3/bin/activate 你也修改b…...

【数据结构】如何用栈实现队列?图文解析(LeetCode)

LeetCode链接&#xff1a;232. 用栈实现队列 - 力扣&#xff08;LeetCode&#xff09; 注&#xff1a;本文默认读者已掌握栈与队列的基本操作 可以看这篇文章熟悉知识点&#xff1a;【数据结构】栈与队列_字节连结的博客-CSDN博客 目录 做题思路 代码实现 1. MyQueue 2. …...

蓝桥杯上岸每日N题 (闯关)

大家好 我是寸铁 希望这篇题解对你有用&#xff0c;麻烦动动手指点个赞或关注&#xff0c;感谢您的关注 不清楚蓝桥杯考什么的点点下方&#x1f447; 考点秘籍 想背纯享模版的伙伴们点点下方&#x1f447; 蓝桥杯省一你一定不能错过的模板大全(第一期) 蓝桥杯省一你一定不…...

基于Python3 的 简单股票 可转债 提醒逻辑

概述 通过本地的定时轮训&#xff0c;结合本地建议数据库。检查股票可转债价格的同事&#xff0c;进行策略化提醒 详细 前言 为什么会有这么个东西出来呢&#xff0c;主要是因为炒股软件虽然有推送&#xff0c;但是设置了价格之后&#xff0c;看到推送也未必那么及时&#…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲&#xff1a; 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年&#xff0c;数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段&#xff0c;基于数字孪生的水厂可视化平台的…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

SpringCloudGateway 自定义局部过滤器

场景&#xff1a; 将所有请求转化为同一路径请求&#xff08;方便穿网配置&#xff09;在请求头内标识原来路径&#xff0c;然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章&#xff0c;二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑&#xff1a; &#x1f504; 一、起源与初创期&#xff1a;Swagger的诞生&#xff08;2010-2014&#xff09; 核心…...