Wildfly加载系统属性

时间:2014-12-09 18:38:00

标签: java java-ee properties wildfly

我在warfly文件中打包的wildfly中部署了一个应用程序。我需要在部署目录下的war文件外部的xml文件中加载一些要在我的java代码中使用的属性。

deployments
 -- myapplication.war
 -- myproperties.xml

我的java代码如何访问此属性? 请指教。

谢谢..

2 个答案:

答案 0 :(得分:1)

与CDI OWNER结合使用确实很好。

<强>更新

Inject Java Properties in Java EE Using CDI提供了一些介绍以及github上的一些示例代码。作为下一步,您可以将属性部分委托给OWNER。

创建注释类型定义Config.java:

@Qualifier
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER})
public @interface Config {
}

获取ConfigProducer.java:

@Produces
@Config
public Configuration produce(InjectionPoint ip) {
    if (config == null) {
        config = ConfigFactory.create(Configuration.class);        
    }
    return config;
}

生成器必须由其自身或具有@Startup @Singleton注释的另一个bean实例化。

设置您的OWNER支持的Configuration.java

@HotReload(type = HotReloadType.SYNC)
@LoadPolicy(LoadType.MERGE)
@Sources("file:${config.filepath}/config.properties")
public interface Configuration extends Config, Reloadable, Mutable, Accessible {

    @Key("server.http.port")
    int port();

    @Key("server.host.name")
    String hostname();

}  

在某个bean中注入并使用配置:

@Stateless
public class SomeBean {

    @Inject
    @Config
    private Configuration config;

}

不要忘记wildfly的standalone.xml中的路径配置:

<system-properties>
        <property name="config.filepath" value="/your/path/"/>
</system-properties>

答案 1 :(得分:0)

如果您可以在系统级访问所有此属性,即System.getProperty(&#34; propertyName&#34;),那么最好的选择是为此属性文件添加自定义模块。

以下是我创建的自定义模块示例,以保留oracle驱动程序jar:

我在wildfly模块下的目录下创建了system \ layers \ base \ com \ oracle \ ojdbc14 \ main

现在将所有罐子放在这个目录中。在同一目录中添加一个module.xml文件,其中包含jar文件的条目:

&#13;
&#13;
<module xmlns="urn:jboss:module:1.1" name="com.oracle.ojdbc14">

<resources>

<resource-root path="ojdbc14.jar"/>

<resource-root path="second jar"/>

<resource-root path="third jar "/>



</resources>

<dependencies>

</dependencies>

</module>

 
&#13;
&#13;
&#13;

注意,我保持我的目录结构与模块中的Name属性一致。您可以根据需要向此目录添加任意数量的jar,并为resource-root path添加条目

现在要使用此模块,您可以在应用程序META-INF中的jboss-deployment-structure.xml中添加条目,如:

&#13;
&#13;
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.1">

    <deployment>

        <dependencies>

              ..

..

..

 

                <module name = "com.oracle.ojdbc14"/>

        </dependencies>

..

..

..

</jboss-deployment-structure>

 
&#13;
&#13;
&#13;

ref @ https://developer.jboss.org/thread/257516

希望这有帮助。

相关问题