JBOSS AS7中的环境特定属性

use*_*155 6 java deployment jboss spring properties

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

  • 开发
  • 测试
  • ACC

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

webservice.endpoint=interface.url.com
webservice.port=7676
Run Code Online (Sandbox Code Playgroud)

每个环境的属性都不同.我们此时处理此问题的方式如下:

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

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

Tom*_*Tom 1

如果您采用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
Run Code Online (Sandbox Code Playgroud)

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

<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>
Run Code Online (Sandbox Code Playgroud)

如果您使用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));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果环境变量中没有任何敏感数据(例如密码等),则可以在环境变量中添加数据。IMO 更容易混淆属性文件中的数据。因此,如果安全受到威胁,这是需要考虑的一点。