java - JBOSS AS7 中的环境特定属性

标签 java spring deployment properties jboss

我们有 4 台运行 JBOSS AS7 的服务器:

  • 开发
  • 测试
  • 产品

在每个 jboss 上,一个简单的 webapp 将运行。这个 webapp 将使用 spring 并需要设置一些属性,例如:

webservice.endpoint=interface.url.com
webservice.port=7676

每个环境的属性都不同。目前我们的处理方式如下:

我有一个 JAR 文件,里面只有一个文件,config.properties。此属性文件包含我的所有属性。我将这个 jar 变成一个全局 jboss 模块,并在我的 domain.xml(或 standalone.xml)中配置它以包含在内。这是可行的,因为 spring 可以在制作 bean 时访问这些属性。

但是,将属性转换为 jar、模块似乎过于复杂。我在想我应该使用系统属性来实现这个目标吗?我的问题是:这是放置所有特定于环境、特定于应用程序的属性的好地方吗?它们是否会加载到 JVM 中以便每个人都可以随意访问它们(尤其是 Spring,它使用 ${myProperty} 表示法来访问属性)。此外,当我在浏览器中使用控制台添加属性时,它们是否已存储?我在 domain.xmlhost.xml 中看不到它们。

最佳答案

如果您使用 JAR 解决方案: - 为每个环境使用一个独特的分类器。您将拥有 x 个属性文件:dev_config.properties/test_config.properties 等...

这样你就可以设置一个唯一的 JAVA_OPTS 来设置你所在的环境。 然后你得到正确的属性文件:

使用:System.getenv("ENV")System.getProperty("ENV")

if ("DEV".Equals(System.getenv("ENV"))
  here you load ==> the dev_config.properties

要将属性加载到 JAR 中,使用这个 Maven 插件非常容易。

<plugin>
        <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <executions>
                <execution>
                        <id>packaging-deployment_manifests_bundle</id>
                        <phase>package</phase>
                        <goals>
                            <goal>attached</goal>
                        </goals>
                        <configuration>
                            <descriptors>
                        <descriptor>descriptors/deployment_manifests_bundle.xml</descriptor>
                            </descriptors>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

如果您使用 environment_variables : 我从来没有在我的项目中尝试过这个解决方案,我总是使用属性文件解决方案。但是如果你只有几个变量要设置,这可能会更快......你可以访问这些变量:

import java.util.Map;

public class EnvMap {
    public static void main (String[] args) {
        Map<String, String> env = System.getenv();
        for (String envName : env.keySet()) {
            System.out.format("%s=%s%n",
                              envName,
                              env.get(envName));
        }
    }
}

在环境变量中添加数据是可以的,如果它不是敏感的,比如密码之类的。 IMO 更容易混淆属性文件中的数据。因此,如果安全受到威胁,这是一个需要考虑的问题。

关于java - JBOSS AS7 中的环境特定属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36649258/

相关文章:

java - 使用 pdfbox 在 PDF 中获取正确(旋转)的图像尺寸

Spring MVC : how to get case-insensitive ordering from Pageable

java - 用SwingX的ImageView进行CollorAdjust?

java - 如何对tomcat进行端到端性能分析

java - Xml-用Spring写Hibernate的玄机

java - Oracle Weblogic AS (WebLogic Server : 10. 3.4.0) 上的应用程序部署提示

javascript - AJAX 构建和部署环境,尤其是 javascript 和 css min,完整版本

amazon-web-services - 如何在 .ebextensions 配置中为 crontab 多个环境使用条件 (AWS Elastic Beanstalk)

java - 如何在 log4j2 的 Web 应用程序中查找属性参数?

Java - 我应该使用 AtomicReferenceArray 吗?