静态变量读取属性文件

最近,我尝试在应用程序服务器中定义和读取全局属性。 在应用程序服务器中配置的此类属性的好处–可以在此服务器上部署的所有Web应用程序之间共享该属性。 每个部署的应用程序都可以读取同一属性,该属性仅在一个位置配置一次。 我试图做的是一个系统属性,值部分包含另一个系统属性。 在应用服务器JBoss / WildFly中,您可以例如在配置文件standalone.xml定义系统属性。 我设置属性exporting.service.config.file

<system-properties><property name="exporting.service.config.file" value="${jboss.server.config.dir}\exporting\exporting-service.properties"/>
</system-properties>

jboss.server.config.dir指向JBoss中的基本配置目录。 此属性由JBoss自动设置。 在这个例子中,我们有一个所谓的Variable Interpolation 。 维基百科的定义 :“变量插值(也就是变量替换或变量扩展)是评估包含一个或多个占位符的字符串文字的过程,产生的结果是,占位符被其对应的值替换”。 属性值占位符${...}另一个示例是以下配置:

application.name=My App
application.version=2.0
application.title=${application.name} ${application.version}

现在,当我们尝试使用Java的System.getProperty(...)从第一个示例获取系统属性时

String globalConfigFile = System.getProperty("exporting.service.config.file");

我们将获得${jboss.server.config.dir}\exporting\exporting service.properties 。 占位符${jboss.server.config.dir}未解析。 第二个例子中也有同样的麻烦。

用变量插值读取属性的最简单方法是什么? 好吧,这里有带有PlaceholderConfigurerSupport的Spring框架等等。 但是拥有如此大的框架(如依赖关系)是一项开销。 有轻量级的图书馆吗? 是的,可以确定-Apache Commons Configuration 。 Apache Commons Configuration为属性提供了特殊的前缀名称,以便在特定上下文中评估它们。 例如:

  • sys:此前缀将变量标记为系统属性。 Commons Configuration将搜索具有给定名称的系统属性,并将变量替换为其值。
  • const:前缀表示将变量解释为类的常量成员字段。 变量的名称必须是完全限定的类名称。
  • env:前缀引用特定于操作系统的环境属性。

文档中的一些示例:

user.file = ${sys:user.home}/settings.xml
action.key = ${const:java.awt.event.KeyEvent.VK_CANCEL}
java.home = ${env:JAVA_HOME}

现在,我可以将所需的依赖项添加到我的Maven项目中

<dependency><groupId>commons-configuration</groupId><artifactId>commons-configuration</artifactId><version>1.10</version>
</dependency>

jboss.server.config.dir之前设置前缀sys:

<system-properties><property name="exporting.service.config.file" value="${sys:jboss.server.config.dir}\exporting\exporting-service.properties"/>
</system-properties>

并编写以下代码

import org.apache.commons.configuration.SystemConfiguration;...SystemConfiguration systemConfiguration = new SystemConfiguration();
String globalConfigFile = systemConfiguration.getString("exporting.service.config.file");
...

我笔记本上的字符串globalConfigFile的值为C:\Development\Servers\jboss-as-7.1.1.Final\standalone\configuration\exporting\exporting-service.properties 。 前缀sys:将变量标记为系统属性。 Commons Configuration将搜索具有给定名称的系统属性,并将变量替换为其值。 完整的代码:

import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.PropertiesConfiguration;
import org.apache.commons.configuration.SystemConfiguration;...PropertiesConfiguration propertiesConfiguration = new PropertiesConfiguration();
SystemConfiguration systemConfiguration = new SystemConfiguration();
String globalConfigFile = systemConfiguration.getString("exporting.service.config.file");
if (globalConfigFile != null) {try {                propertiesConfiguration.setDelimiterParsingDisabled(true);                propertiesConfiguration.load(globalConfigFile);} catch (ConfigurationException e) {LOG.log(Level.INFO, "Cannot read global properties");}
}

任何单个属性都可以读取,例如

propertiesConfiguration.getString("someKey")
propertiesConfiguration.getString("someKey", someDefaultValue)
propertiesConfiguration.getBoolean("someKey")
propertiesConfiguration.getBoolean("someKey", someDefaultValue)
propertiesConfiguration.getInteger("someKey")
propertiesConfiguration.getInteger("someKey", someDefaultValue)

usw。 就这样。 让我知道是否知道使用变量插值读取属性的另一种简单方法。

翻译自: https://www.javacodegeeks.com/2015/04/a-way-to-read-properties-with-variable-interpolation.html

静态变量读取属性文件

静态变量读取属性文件_一种通过变量插值读取属性的方法相关推荐

  1. python读取pdf文件_深入学习python解析并读取PDF文件内容的方法

    这篇文章主要学习了python解析并读取PDF文件内容的方法,包括对学习库的应用,python2.7和python3.6中python解析PDF文件内容库的更新,包括对pdfminer库的详细解释和应 ...

  2. python打开并读取csv文件_!python3中使用使用read_csv( )读取csv文件,文件路径中含有中文,无法读取怎么处理?...

    python3如何根据csv文件的列的内容,自动建数据库表 你好,csv格式的和excel格式是差不多的, 下面是读取excel的一些函数,希望帮到你: # -*- coding: cp936 -*- ...

  3. python读取xls文件_从python中的xls读取unicode

    我正在尝试使用 Python读取.xls文件.该文件包含多个非ascii字符(即äöü).我已经尝试过使用openpyxls和xlrd(我对xlrd寄予厚望,因为它无论如何都会读取unicode中的所 ...

  4. Java多线程读取excel文件_解决springboot 多线程使用MultipartFile读取excel文件内容报错问题...

    springboot项目开启多线程 启动类加注解开启 @EnableAsync,实现类方法加注解 @Async 前端页面 报错信息 java.io.FileNotFoundException: C:\ ...

  5. qnx 镜像文件_一种基于Hypervisor的QNX操作系统启动方法及装置与流程

    本发明涉及计算机领域,尤其涉及一种基于Hypervisor的QNX操作系统启动方法及装置. 背景技术: 基于Hypervisor的QNX是一种商用的遵从POSIX规范,常用用在汽车及路由器上,QNX是 ...

  6. python读取rar文件_在 python 中,如何读取由 7z 压缩的文本文件_python_酷徒编程知识库...

    这允许你stream行.import os import py7zlib class SevenZFileError(py7zlib.ArchiveError): pass class SevenZF ...

  7. 第四章:数据存储-csv文件处理-读取csv文件的两种方式

    直接学习:https://edu.csdn.net/course/play/24756/280718 csv文件处理-读取csv文件的两种方式: # 这种方式读取到的每一条数据是个列表,所以需要通过下 ...

  8. java读取csv文件的两种方式

    java读取csv文件的两种方式 1.CsvReader读取 import com.csvreader.CsvReader; /*** CsvReader 读取* @param filePath* @ ...

  9. matlab中读文件的行数_Matlab中读取txt文件的几种方法

    Matlab中读取txt文件的几种方法 一.纯数据文件(没有字母和中文,纯数字) 对于这种txt文档,从matalb中读取就简单多了 例如test.txt文件,内容为"17.901 -1.1 ...

最新文章

  1. Active Directory数据库复制原理
  2. 简单明了!OLTP场景下的数据分布式设计原则
  3. 使用GitList查看git修改记录
  4. c+和python的区别-c语言和python之间有什么区别
  5. oracle 重建em失败,11gr2 EM重建出现问题,求高人指点
  6. idea社区版和企业版区别_IntelliJ IDEA 旗舰版与社区版有什么不同
  7. 内存溢出与内存泄漏区别
  8. Visual Studio 2015 前瞻 属性初始化赋值!
  9. python 动态调整控件大小_python GUI库图形界面开发之PyQt5动态(可拖动控件大小)布局控件QSplitter详细使用方法与实例...
  10. tab vue 竖排_vue 实现tab切换保持数据状态
  11. Microsoft Jet 数据库引擎打不开文件,它已经被别的用户以独占方式打开,或没有查看数据的权限。...
  12. Servlet+jsp用户登录加上验证码
  13. 软件工程结对编程博客
  14. TinyMind 和机器之心收藏
  15. websphere设置共享库
  16. 分享四个无版权,高清的图片素材网站
  17. Mysql如何跨库查询数据?
  18. [转]李商隐《嫦娥》赏析
  19. 菜鸟学习c语言之路开始
  20. 纯jquery 前端导入 Excel数据 减少服务端压力

热门文章

  1. 【决策单调性】玩具装箱(金牌导航 决策单调性优化DP-1)
  2. 纪中B组模拟赛总结(2019.12.21)
  3. 是男人就过 8 题--Pony.AI 题 - A String Game
  4. 数学推导题,NTT,快速数论变换,Wannafly-导数卷积
  5. [系统安全]使用OD编写连连看外挂
  6. Prufer序列 生成树定理
  7. Java 并发总结——高并发与同步锁
  8. JavaFX UI控件教程(十九)之Hyperlink
  9. Hibernate注解(一)之持久化实体
  10. spring boot输出hello world几种方法