Springboot项目部署在Jboss上的一些问题

前言



由于公司的问题,重构后的微服务必须要部署在Jboss上, 版本为Jboss EAP 7.1,Springboot 2.1.3.RELEASE。部署时候遇到了一些问题,在这记录下来

一、修改Jboss根目录为应用访问目录



首先将jboos的默认欢迎页修改为空,否则会冲突,打开jboss-eap-7.1\standalone\configuration\standalone.xml, 找到

<subsystem xmlns="urn:jboss:domain:undertow:4.0">
            <buffer-cache name="default"/>
            <server name="default-server">
                <http-listener name="default" socket-binding="http" redirect-socket="https" enable-http2="true"/>
                <https-listener name="https" socket-binding="https" security-realm="ApplicationRealm" enable-http2="true"/>
                <host name="default-host" alias="localhost">
                    <location name="/" handler="welcome-content"/>
                    <filter-ref name="server-header"/>
                    <filter-ref name="x-powered-by-header"/>
                    <http-invoker security-realm="ApplicationRealm"/>
                </host>
            </server>
            <servlet-container name="default">
                <jsp-config/>
                <websockets/>
            </servlet-container>
            <handlers>
                <file name="welcome-content" path="${jboss.home.dir}/welcome-content"/>
            </handlers>
            <filters>
                <response-header name="server-header" header-name="Server" header-value="JBoss-EAP/7"/>
                <response-header name="x-powered-by-header" header-name="X-Powered-By" header-value="Undertow/1"/>
            </filters>
        </subsystem>

修改为

<subsystem xmlns="urn:jboss:domain:undertow:4.0">
            <buffer-cache name="default"/>
            <server name="default-server">
                <http-listener name="default" socket-binding="http" redirect-socket="https" enable-http2="true"/>
                <https-listener name="https" socket-binding="https" security-realm="ApplicationRealm" enable-http2="true"/>
                <host name="default-host" alias="localhost">
                    <!--<location name="/" handler="welcome-content"/>-->
                    <filter-ref name="server-header"/>
                    <filter-ref name="x-powered-by-header"/>
                    <http-invoker security-realm="ApplicationRealm"/>
                </host>
            </server>
            <servlet-container name="default">
                <jsp-config/>
                <websockets/>
            </servlet-container>
            <!--<handlers>
                <file name="welcome-content" path="${jboss.home.dir}/welcome-content"/>
            </handlers>-->
            <filters>
                <response-header name="server-header" header-name="Server" header-value="JBoss-EAP/7"/>
                <response-header name="x-powered-by-header" header-name="X-Powered-By" header-value="Undertow/1"/>
            </filters>
        </subsystem>

修改前记得备份,jboss启动后会将这些注释的部分自动清除

此时的根路径已经为空,我们需要将项目路径映射到根路径,

新建一个文件jboss-web.xml,文件内容如下

<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
    <context-root>/</context-root>
</jboss-web>

将我们的war包用WinRAR打开,这个文件放到WEB-INF目录下

此时启动jboss访问根路径就是我们的项目路径了

二、Springboot项目打包成war的注意事项


<!-- 打war包时加入此项, 告诉spring-boot tomcat相关jar包用外部的,不要打进去 --><dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-tomcat</artifactId>    <scope>provided</scope></dependency>

尤其在使用非tomcat容器时,必须加入将tomcat相关包exclusions,或者像上面一样改为provided,否则启动容器时会有类转换异常

三、Jboss正常启动,但没有启动SpringBoot项目



可以看到Jboss正常启动了,但是没有Springboot项目启动的标识,这个时候是由于Jboss无法识别我们的Servlet

正常的Springboot项目启动类是这样的。

@EnableEurekaServer
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class EurekaApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class,args);
    }
}

这种方式在tomcat容器中启动可以,但是Jboss无法这样启动,需要改成

@EnableEurekaServer
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class EurekaApplication extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(EurekaApplication.class);
    }

    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class,args);
    }
}

这样Jboss启动时才能查找到我们的Servlet

四、Eureka启动成功,可以注册服务但是访问页面空白



...

可以看到此时的Springboot项目已经加载进来,服务也可以正常注册,但打开Eureka页面时一片空白

此时打开控制台发现,访问路径404(这里我没有修改根路径为项目路径,Jboss默认war包名字是访问路径)

这是由于Springboot使用freeMark导致的

解决方案:

yml文件中添加

这个配置的意思是 是否优先从文件系统加载template,默认值为true

修改后再打包启动

页面可以正常访问

原文地址:https://www.cnblogs.com/gtblog/p/11237070.html

时间: 2024-08-28 16:44:57

Springboot项目部署在Jboss上的一些问题的相关文章

如何把springboot项目部署到tomcat上

前言: 开始以为打包springboot项目为war包丢到tomcat上的webapps下面就可以访问controller层的路径了,可是调用接口却报404的错误,而打开8080的主页,不加路径却可以看到index.jsp正常显示,后来查网上的资料才知道是需要添加一个servlet的初始化类 ServletInitializer类 import com.btw.Application; import org.springframework.boot.builder.SpringApplicati

SpringBoot项目部署到服务器上,tomcat不启动该项目

今天lz把项目重新传到服务器上后,重启tomcat遇到个问题,就是这个tomcat怎么都不启动这个项目,别的项目都没事,一番查找后发现问题所在. 我们先建个SpringBoot工程,重现一下问题: 写了一个简单的controller便于访问测试 可以看到是可以访问到的,接下下我们删除 ServletInitializer 类. 现在的项目结构变成这样: 重新运行一下工程,然后可以看到还是可以访问到的. 然后我们将删掉ServletInitializer 类的项目上传到服务器,看下tomcat启动

用GitBash将eclipse的一个Java项目部署到Github上

花了一下午功夫总算是把这个拼图游戏小项目部署到Github上了,用GitBash命令出现的问题很多,原因当然是自己没玩熟,一些说明都是纯英文的,诶. http://blog.csdn.net/pony_maggie/article/details/42201435,这个博客讲的就是针对这个操作的,至于其他clone什么的,暂时用不上.下面是我的依次命令. 先建一个空仓库,默认都None,别慌初始化一个README.md,等上传上去了再add一个. init会初始化一个.git隐藏文件,将这个文件

将asp.net core2.0项目部署在IIS上运行

原文:将asp.net core2.0项目部署在IIS上运行 前言: ?与ASP.NET时代不同,ASP.NET Core不再是由IIS工作进程(w3wp.exe)托管,而是独立运行的.它独立运行在控制台应用程序中,并通过dotnet运行时命令调用.它并没有被加载到IIS工作进程中,但是IIS却加载了名为AspNetCoreModule的本地Module,这个Module用于执行外部的控制台程序. ?部署之前要确保你的IIS上已经安装了AspNetCoreModule托管模块,如果没有的话,点击

2019-03-26 SpringBoot项目部署遇到跨域问题,记录一下解决历程

近期SpringBoot项目部署遇到跨域问题,记录一下解决历程. 要严格限制,允许哪些域名访问,在application.properties文件里添加配置,配置名可以自己起: cors.allowed.origin=http://10.xx.253.xx:8081,http://localhost:4200 做前后端分离的时候,这里允许的域名/IP一般都是前端项目所部署的机器. 添加一个配置类.@Configuration和@Bean注解一定要加上的.这样SpringBoot在启动的时候才会扫

原来的SpringBoot项目注册到Eureka上

原来的SpringBoot项目注册到Eureka上 项目开发过程中原来是SpringBoot项目,并没有用到SpringCloud,现在改成微服务项目,将pom文件,启动APP,yml都修改了,但是一直注册不上去,查了好长时间,原因是:pom文件中Eureka客户端的版本号问题. springboot的版本一定要和对应的springcloud版本使用,不然服务提供者启动服务,注册中心找不到注册服务,引入的依赖应该是新的依赖 是2.0.0以上版本的依赖 以前的依赖不能使用,引入的时候不加版本号就可

如何将Java Web项目部署到服务器上

项目部署 我们对于 Java Web 项目在本地机器(无论是 Windows 还是 Linux)上的部署已经了然于心了,那么对于在云服务器上部署 Java Web 项目又是如何操作的呢? 其实很简单,还是离不开 Web 项目部署的那三点:① 基础的 JDK 环境② 一个 Web 服务器.如 Tomcat.JBoss③ 一款数据库.如:mysql 对于云服务器上 Java Web 项目的部署,和平时在 Windows.Linux 下部署是一样的.最多也就是只能使用纯命令模式来操作而已,其实过程都一

SpringBoot项目部署初体验

前言 一个微服务项目,小到几个模块,大到十几二十几个模块,每个模块都是单独的SpringBoot工程,这么多模块的部署,部署成本真的很高,而且每个服务的部署,都是手动部署,打成war或者jar ?,一个一个的部署也是相当的麻烦,介于此: 我前段时间倒腾了一个博客系统,昨天测试基本功能已经跑通了,可能再过段时间我就要买服务器架设自己的博客系统了,这个系统由SpringBoot支撑,我们就把它当作一个微服务项目的一个一个模块,进行学习微服务项目的部署 北京人原始部署:全程手动 基于前面的介绍,测试项

SpringBoot 项目运行在 tomcat7 上

SpringBoot 项目如何打成 war 包 SpringBoot项目的默认打包方式是将工程打包成为一个 jar 包.部分情况下,我们需要将项目打包成一个 war 包,以方便我们将工程部署在 tomcat 上运行. 那如何将 SpringBoot 项目打包成一个 war 包呢? pom 文件修改 修改打包方式.由于 SpringBoot 的默认打包方式将其打包成 jar 包,所以创建出来的项目的 pom是没有特殊声明 packaging 的元素.所以首先要在 pom 坐标处增加<packagi