tomcat—配置文件,取决于JavaEE中的环境变量

1rhkuytd  于 2021-10-10  发布在  Java
关注(0)|答案(1)|浏览(287)

我已经用jersey创建了一个RESTAPI,我正试图找出如何根据环境处理配置文件。
主要问题是,我的web应用程序部署在linux服务器上,因此在windows上的开发环境和linux上的暂存和prods环境之间不能有相同的路径。
我的配置文件是一个基本的xml文件。有没有一种方法可以将环境变量添加到该xml文件中,并告诉java在运行时将这些环境变量替换为相应的值?如果可能的话,可以添加一个与配置文件中所有路径的根路径相对应的环境变量,该路径将根据单个环境变量进行更改。
是否有更好的方法根据环境处理配置文件?

chhkpiq4

chhkpiq41#

有许多方法可以将配置外部化。您可以以SpringBoot为例,它目前支持14个配置源(参见外部化配置)。
在您的例子中,您可能希望支持第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系统属性或os环境属性的文件:tomcat替换占位符 ${variable_name} 在其所有xml配置文件中。

相关问题