最近,我尝试在应用程序服务器中定义和读取全局属性。 在应用程序服务器中配置的此类属性的好处–可以在此服务器上部署的所有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:前缀引用特定于OS的环境属性。

文档中的一些示例:

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. 静态变量读取属性文件_一种通过变量插值读取属性的方法

    静态变量读取属性文件 最近,我尝试在应用程序服务器中定义和读取全局属性. 在应用程序服务器中配置的此类属性的好处–可以在此服务器上部署的所有Web应用程序之间共享该属性. 每个部署的应用程序都可以读取 ...

  2. r语言 发送邮件html,r语言读取数据的方法

    R 对于基于 SQL 语言的关系型数据库有良好的支持,这些数据库既有商业数据库 Oracle.Microsoft SQL Server.IBM DB2 等,也包含在 GNUGeneral Public ...

  3. JAVA读取属性文件的几种方法

    1.使用java.util.Properties类的load()方法 示例:Java代码 InputStream in = lnew BufferedInputStream(new FileInput ...

  4. python类中的属性分为类属性和实例属性两种_python中类和实例如何绑定属性与方法示例详解...

    前言 python类与实例的方法的调用中觉得云里雾里,思考之后将自己的想法记录下,一来加深自己理解,巩固自己记忆,而来帮助一些想要学习python的朋友理解这门抽象的语言,由于Python是动态语言, ...

  5. 如何使用包含属性名称的变量检查对象属性是否存在?

    本文翻译自:How to check if object property exists with a variable holding the property name? I am checkin ...

  6. C语言中变量的链接属性

    当组成一个程序的各个源文件分别被编译之后,所有的目标文件以及那些从一个或多个函数库中引用的函数链接在一起,形成可执行程序.如果相同的标识符出现在几个不同的源文件中时,它们是表示同一个变量还是不同的变量 ...

  7. 如何在Python中读取属性文件?

    We can use jproperties module to read properties file in Python. A properties file contains key-valu ...

  8. Python设置属性值方法setattr()和判断变量是否存在的方法

    介绍Python设置属性值方法setattr()和判断变量是否存在的方法 1.以属性名为变量的方式给一个对象添加属性 使用 setattr 方法 obj = SomeClass() key = 'ke ...

  9. Spring Boot——读取属性文件的多种方法

    前言 在程序开发中,为了减少程序中的"硬编码",我们通常会将一些信息放在属性文件中,再读取到程序中.Spring 提供了多种便利的方法帮助我们从属性文件中读取数据. 一.属性文件加 ...

最新文章

  1. 从源代码编译里程碑的 ICS ROM
  2. MIT联合波士顿咨询:全球21个行业,对话3000名高管,AI如何重塑商业形态? | 雷报
  3. html标签简介(常用)
  4. dag见证服务器是虚拟ip吗,exchange后端和DAG搭建.docx
  5. java关于泛型的实验代码_[改善Java代码]强制声明泛型的实际类型
  6. python开发wince软件_Wince6.0应用开发:二、模拟器的使用
  7. CANopen | 对象字典OD 01 - canfestival对象字典编辑软件安装与使用
  8. HTTP和HTTPS回顾
  9. threejs球体旋转与场景旋转_three.js实现围绕某物体旋转
  10. zookeeper入门学习《一》
  11. 从零开始学习makefile(7) makefile的filter的作用
  12. 【STM32F407开发板用户手册】第14章 STM32F407的电源,复位和时钟系统
  13. 破解有道翻译反爬虫机制
  14. Android开发 个人开发者几大后端云比较
  15. ABP框架系列之三十一:(Localization-本地化)
  16. html绝对定位怎么页面居中,绝对定位元素设置水平居中
  17. 2021旗舰机选购指南
  18. 2019全国大学生软件测试比赛,原创 安恒信息圆满支撑“2019全国大学生软件测试大赛”...
  19. php个框架的优缺点,PHP主流框架优缺点分析
  20. MAC下SSL通讯问题、解决办法

热门文章

  1. 判断个十百千位之后是否大于20 java——CSDN博客
  2. Python解决中文乱码问题
  3. StringBuilder的使用
  4. 对应node版本_安装Node.js教程
  5. 转-Redis AOF 持久化详解
  6. spring boot 入门荔枝
  7. java数据库编程——元数据(metadata)+web 与企业应用中的连接管理
  8. java数据库编程——Insert and Retrieve Images from MySql Table Using Java
  9. jstat分析_jstat –分析
  10. apache poi_将HTML转换为Apache POI的RichTextString