最近,我尝试在应用程序服务器中定义和读取全局属性。 在应用程序服务器中配置的此类属性的好处–可以在此服务器上部署的所有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. C++中stl使用过程中的一些tips
  2. iOS开发技巧(系列十八:扩展UIColor,支持十六进制颜色设置)
  3. JQuery获取append后的动态元素:live()和on()
  4. Spark创建RDD的四种方式(一):从集合(内存)中创建 RDD代码示例
  5. 一文读懂开源许可证异同
  6. MySQL数据库创建用户_修改用户_删除用户_设置用户
  7. 尚硅谷面试第一季-21消息队列在项目中的应用
  8. IDL | 实验六、ENVI波段运算与功能扩展
  9. Builder模式的误区:将复杂对象的构建进行封装,就是Builder模式了吗?
  10. c++ 网络编程课设入门超详细教程 ---目录
  11. 基于扩频信号的水声信道数据传输系统仿真,研究满足了WSSUS假设的瑞利信道模型,采用相干BPSK调制,联合多普勒Rake接收机
  12. Java项目源码下载SSM网上水果生鲜超市商城|电商购物系统
  13. 用Python做图片分类:前置处理,图片的缩小保存
  14. IIS 405 Method Not Allowed
  15. 网络中的海底隧道——MPLS
  16. 设置Linux在未登录账号情况下自动连接wifi
  17. Linux 安装 Intel 网卡驱动
  18. html表单中怎么写年份,HTML表单
  19. 华为“天才少年”的200万年薪里,藏着人力资源管理的下一个10年
  20. kali监听拦截局域网主机上网记录

热门文章

  1. SpringMVC中使用作用域对象完成数据的流转
  2. python的三元运算
  3. 变量的分类(按数据类型)
  4. 2015蓝桥杯省赛---java---A---3(九数分三组)
  5. bs架构 erp 进销存_从应用架构看生鲜电商信息化建设
  6. [译] RESTful API 设计最佳实践
  7. (转-这篇文章非常棒) Thread的中断机制(interrupt)
  8. 关于es查询dsl的filter与must,term与match的区别
  9. Spring boot(十二):Spring boot 如何测试、打包、部署
  10. javadoc提取工具_使JavaDoc保持最新状态的工具