【问题标题】:Java web app and properties fileJava Web 应用程序和属性文件
【发布时间】:2015-10-23 08:13:19
【问题描述】:
我正在尝试使用 Java Jersey 创建一个 Web 应用程序。该项目(动态 Web 项目)应具有可由客户端/服务器管理员在运行时更改的参数。管理员无权访问数据库。
在将我们的应用程序转换为 Web 服务之前,我们在主 jar 旁边的文件夹中定义了属性文件。有没有办法让动态网络应用程序拥有类似的东西?
我的想法是有一个包含属性文件的文件夹,服务器管理员可以访问和更改(以便 Web 服务可以在运行时更改它的工作参数)。将属性存储在数据库而不是文件中是不行的。它必须是一个配置文件:)
您是否知道我应该如何将我的属性文件放在相对路径中,以便服务器管理员使用该文件可以在 WS 已经部署和工作时更改某些 Web 服务参数?
【问题讨论】:
-
-
如果您使用 CDI,您可以考虑使用 Apache DeltaSpike 配置机制。看看here。
标签:
java
web-services
properties
jersey
【解决方案1】:
根据您的要求,您可以使用属性文件,但问题是 WS 仅在启动时才加载属性文件。因此,您必须在程序代码中加载该属性文件。并且您需要在一段时间后重新加载文件。
请参考以下代码供您参考:
公共类 ResourceHandler {
/** The service end points. Creates properties file object. */
Properties serviceEndPoints = new Properties();
/** The resource handler. */
private static ResourceHandler resourceHandler = new ResourceHandler();
/**
* Instantiates a new resource handler.
*/
ResourceHandler() {
try {
/* Load the properties file from class path, you can use reguler file path instead of this. */
serviceEndPoints.load(this.getClass().getResourceAsStream(
"serviceEndPoints.properties"));
} catch (IOException e) {
}
}
/**
* Instance.
*
* @return the resource handler
*/
public static synchronized ResourceHandler instance() {
if (resourceHandler == null)
resourceHandler = new ResourceHandler();
return resourceHandler;
}
/**
* Gets the service end points.
*
* @param key
* the key
* @return the service end points
* Use this method to get values of parameters from properties file.
*/
public String getServiceEndPoints(String key) {
return ((String) serviceEndPoints.get(key));
}
}
以上代码用于一次加载文件。当您想获取那些立即更改的参数时,您必须在一段时间后加载该文件。但肯定是有可能的!