gpt4 book ai didi

java - 如何将依赖于部署的参数传递给 webapp

转载 作者:搜寻专家 更新时间:2023-11-01 02:23:58 26 4
gpt4 key购买 nike

在我工作(编辑)的项目中,部署参数(例如存储路径或数据库登录)通常通过参数文件提供,该文件存储在 war 文件中。

我发现这不合适,因为每次为不同的部署打包 webapp 时都需要更改这些值(开发与生产、执行计算机的更改)。源代码被版本控制,这使它更加麻烦。

Is there some better option to pass parameters such as listed above?

更好的意思是:

  • 实用:易于设置、更改和向他人解释
  • 远离 war
  • 尽可能独立于 Web 容器(如果依赖,我在产品中使用 tomcat)

编辑

我选择了 answer of @aksappy奖励答案中所做的工作,因为它提供了几种使用标准工具的方法。但是,根据上下文,我可以选择任何其他解决方案:

最佳答案

您可以根据自己的环境使用多种东西。以下是一些可以考虑的事情

  1. 使用数据源服务器上下文中定义的数据源从 Web 应用程序中删除了管理数据库配置和连接池的硬连线依赖性。在 Tomcat 中,这可以在 context.xml
  2. 中完成,如下所示
<Context>
...
<Resource name="jdbc/EmployeeDB" auth="Container"
type="javax.sql.DataSource"
description="Employees Database for HR Applications"/>
</Context>
  1. 使用上下文

您可以通过在该元素中嵌套条目来配置命名值,这些值将作为环境条目资源对 Web 应用程序可见。例如,您可以创建这样的环境条目:(来源 here)。这可以设置为上下文参数或环境条目。它们等同于在 web.xml 或属性文件中创建的条目,只是它们可从服务器的上下文中获得。

  1. 使用数据库配置并在 ServletContextListener 加载这些配置

我倾向于遵循的另一种方法是在数据库中创建属性的关系模式。不要在服务器启动期间加载属性文件,而是在启动期间从数据库加载属性。

public class ContextInitialize implements ServletContextListener {
private static Properties props;
public void contextInitialized(ServletContextEvent servletContextEvent) {
// connect to DB
// Load all the key values pairs as required
//put this into a Properties object, or create a hashtable, hashmap ..
}
//Getter
public String getProperty(String key){
// get value of key
}
//Setter
public void setProperty(String key, String value){
// set value to a key
}
}

注意:以上仅为示例。

  1. 使用环境变量或类路径变量

在环境变量中使用类路径/路径变量,并在您的 Java 代码中使用 System.getenv() 以根据需要获取这些值。

关于java - 如何将依赖于部署的参数传递给 webapp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30459624/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com