我已经使用 Jersey 创建了一个 REST API,我正在尝试找出如何根据环境处理配置文件。
主要问题是我的 Web 应用程序部署在 Linux 服务器上,因此 Windows 上的开发环境与 Linux 上的暂存和产品环境之间无法具有相同的路径。
我的配置文件是一个基本的 XML 文件。有没有办法将环境变量添加到该 XML 文件并告诉 Java 在运行时将这些环境变量替换为其相应的值?如果可能的话,可以添加一个与配置文件中所有路径的根路径相对应的环境变量,该环境变量将根据单个环境变量进行更改。
有没有更好的方法来根据环境处理配置文件?
有很多方法可以外部化您的配置。您可以以 Spring Boot 为例,它目前支持 14 种配置源(参见外部化配置 https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.external-config).
在您的情况下,您可能希望支持第 5 点到第 9 点,这可以在 JAX-RS 应用程序中轻松实现。例如你可以使用这样的东西:
@Path("/hello")
public class Hello {
@Context
private ServletConfig servletConfig;
public static String getProperty(ServletConfig config, String key) {
// ServletConfig
String value = config.getInitParameter(key);
// ServletContext
if (value == null) {
value = config.getServletContext().getInitParameter(key);
}
// JNDI
if (value == null) {
try {
value = InitialContext.doLookup("java:comp/env/" + key);
} catch (ClassCastException | NamingException e) {
// No JNDI
}
}
// Java system property
if (value == null) {
value = System.getProperty(key);
}
// OS environment variable
if (value == null) {
value = System.getenv(value);
}
return value;
}
@GET
public String sayHello(@PathParam("id") String who) {
return getProperty(servletConfig, "who");
}
}
您还可以坚持使用一种属性来源,例如ServerContext
初始化参数并覆盖它们context.xml
使用 Java 系统属性或操作系统环境属性的文件:Tomcat 替换占位符${variable_name}
在其所有 XML 配置文件中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)