当前位置: 首页 > 图灵资讯 > 技术篇> JBoss7怎么加载外部的文件或properties文件

JBoss7怎么加载外部的文件或properties文件

来源:图灵教育
时间:2023-06-09 10:10:01

JBoss 系列14:JBoss7/WildFly如何加载外部文件或properties文件?

www.MyException.2013-10-1212年CN发布 11:54:02浏览:3次

0 JBoss 系列14:JBoss7/WildFly如何加载外部文件或properties文件

内容概述

Modules7/WildFly设置底层框架的亮点 class loading,每个相对独立的模块都被视为Module,每个Module都有自己的classs loader,Module可以相互依赖,如下图所示:

JBoss7安装完成后,JBOSS_HOME/modules目录中有许多目录,每个目录都有一个module.xml文件代表一个 Module,我们也叫他静态module,也部署在服务器上的war,ear也是module,叫动态module,详细点击查看此文档。

在之前版本的JBoss中,比如JBoss 6, JBoss 5, JBoss 在JBOSS_中,我们经常需要这样的操作HOME/server/$PROFILE在/conf下放置文件或properties文件 部署war,通过Classloader().getResourceAsStream(“文件名”)之所以能获得文件内容,是因为之前版本 在JBoss中共享classs loader,JBOSS_HOME/server/$PROFILEclasspath下的文件/conf,JBoss7/WildFly 共享class loader,我们需要加载外部文件或properties文件来解决这个问题。

本文包括以下内容:

  • 给出JBoss7/WildFly如何加载外部文件或properties文件步骤(在独立的Module中定义文件或properties)
  • 一个简单的例子(properties加载在war应用程序中读取外部文件)
JBoss7/WildFly如何加载外部文件或properties文件步骤?

1. 创建新的Module

jboss-as-7/modules/com/yourcompany/configuration/main/module.xml

module.xml内容如下

<?xml version="1.0" encoding="UTF-8"?>      <module xmlns="urn:jboss:module:1.1" name="com.mycompany.configuration">          <resources>              <resource-root path="."/>          </resources>      </module>

jboss-as-7/modules/com/yourcompany/configuration防止在main目录下加载文件

2. jboss在自己的module下定义文件-deployment-structure.xml,本文件位于war WEB-INF或earMETA-INF下,jboss-deployment-structure.xml内容如下:

<?xml version="1.0" encoding="UTF-8"?>      <jboss-deployment-structure>        <deployment>          <dependencies>            <module name="com.mycompany.configuration" />          </dependencies>        </deployment>      </jboss-deployment-structure>

3. 通过class在war或ear中 loader可以获得定义的文件如下:

InputStream settingsStream = this.getClass().getClassLoader().getResourceAsStream("settings.properties");

一个简单的例子

1. jboss-as-7/modules/org/jboss/modules/props/main创建module.xml添加内容如下:

<?xml version="1.0" encoding="UTF-8"?>      <module xmlns="urn:jboss:module:1.1" name="org.jboss.modules.props">    <resources>        <resource-root path="."/>    </resources>    <dependencies>    </dependencies> </module>

2. 创建test.properties 和 test.org///conf文件jboss/modules/props/main下,编辑testtt.添加properties文件的内容如下:

key=This is test props

3. 下载14代码(详见(详见) 编译生成moduless软件安装和数据下载-loadprops.war

git clone git@github.com:kylinsoong/csdn.git

cd csdn/14mvn clean install

4. modules-loadprops.war部署到JBoss7,启动JBoss7后访问httpp://localhost:8080/modules-loadprops/ServiceModuleLoaderLoadProps

JBoss后台输出的信息如下:

22:15:56,049 INFO  [stdout] (http-/127.0.0.1:8080-1) Read test.properties Info: This is test props22:15:56,050 INFO  [stdout] (http-/127.0.0.1:8080-1) Print test.conf Path: file:/home/kylin/work/eap/jboss-eap-6.0/modules/org/jboss/modules/props/main/./test.con

我们可以在WEB-INF下找到分析代码jboss-deployment-structure.xml内容如下:

<?xml version="1.0" encoding="UTF-8"?>  <jboss-deployment-structure>    <deployment>        <dependencies>            <module name="org.jboss.modules.props" />        </dependencies>    </deployment></jboss-deployment-structure>

ModularLoadingProps.java内容如下:

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {   InputStream in = ModularLoadingProps.class.getClassLoader().getResourceAsStream("test.properties");Properties prop = new Properties();prop.load(in);System.out.println("Read test.properties Info: " + prop.get("key"));URL url = ModularLoadingProps.class.getClassLoader().getResource("test.conf");System.out.println("Print test.conf Path: " + url);in.close();}