• Jboss部署war以及获取Resource的真实路径


    Jboss部署war以及获取Resource的真实路径

    最近在将一个SpringBoot项目打成war包部署到Jboss中,中途遇到一些问题记录。

    Jboss上部署war

    普通的SpringBoot项目目录结构如下

    .
    ├── src
         └── main
            ├── java
            └── resources
    

    当我们打出war包后,想在Jboss中部署时需要添加jboss-deployment-structure.xml文件

    关于此文件的配置可参考Jboss as 7 Developer Guide

    加入后目录结构如下

    ├── src
    │   ├── main
    │   │   ├── java
    │   │   │   └── com
    │   │   ├── resources
    │   │   │   ├── application.yml
    │   │   │   └── META-INF
    │   │   └── webapp
    │   │       └── WEB-INF
    │   │           ├── jboss-deployment-structure.xml
    │   │           └── jboss-web.xml
    
    

    jboss-deployment-structure.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <jboss-deployment-structure>
    	<deployment>
                <!-- 需要排除的 -->
                <exclusions>
                    <module name="javax.validation.api" />
                    <module name="org.hibernate.validator" />
                    <!--Log4j exclude-->
                    <module name="org.slf4j" />
                    <module name="org.slf4j.impl" />
                </exclusions>
    
                <!-- 需要依赖的模块 -->
                <dependencies>
                    <!-- This one always goes last. -->
                    <module name="javax.api" export="true"/>
                </dependencies>
    	</deployment>
    </jboss-deployment-structure>
    

    jboss-web.xml

    <!DOCTYPE jboss-web PUBLIC "-//JBoss//DTD Web Application 5.0//EN"  
    "http://www.jboss.org/j2ee/dtd/jboss-web_5_0.dtd"> 
    <jboss-web>
    	<context-root>app</context-root>
    </jboss-web>
    
    

    Jboss中获取Resource的真实路径

    在使用过程中,因为在Resouce中放了一些文件,需要去获取文件内容

    最开始使用如下方法去获取

    // vfs:/content/app.war/WEB-INF/classes/data/data.yaml
    new ClassPathResource("data/data.yaml")).getURI()
    

    当我尝试创建一个File时报错找不到

    因此借助JBoss VFS去获取当前资源的真实路径

    MAVEN中添加

            <!-- JBoss is using Virtual File System (VFS) -->
            <dependency>
                <groupId>org.jboss</groupId>
                <artifactId>jboss-vfs</artifactId>
                <version>3.2.14.Final</version>
            </dependency>
    

    具体使用:

    
     VirtualFile content = (VirtualFile) this.getClass().getClassLoader().getResource("data/data.yaml").getContent();
    
    // $JBOSS_HOME/tmp/vfs/temp/tempc755413fe36e407c/app.war-64dfd9c1b9e1463e/WEB-INF/classes/data/data.yaml
     String realPath = content.getPhysicalFile().getPath()
    

    参考

    JBoss VFS

    VFS3 User Guide

    Jboss as 7 Developer Guide

    StackOverflow:Not getting absolute file path from resources

  • 相关阅读:
    Java异常简介
    Java中的接口
    Java中的抽象类
    Java的多态
    关于this
    面向对象的继承方式详解
    1像素边框问题
    HTML5之本地存储SessionStorage
    js数组去重的4个方法
    前端模块化
  • 原文地址:https://www.cnblogs.com/xcmelody/p/11214469.html
Copyright © 2020-2023  润新知