【问题标题】:springBoot application on Jboss EAP, servlet context not lodaedJboss EAP上的spring Boot应用程序,未加载servlet上下文
【发布时间】:2015-02-19 00:20:16
【问题描述】:

我有一个非常简单的 Spring Boot 应用程序,我想将它部署到 Jboss EAP。这是我的简单应用程序类:

@SpringBootApplication

public class MayurApplication extends SpringBootServletInitializer{

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

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(applicationClass);
    }

    private static Class<MayurApplication> applicationClass = MayurApplication.class;
}

@RestController
class GreetingController {

    @RequestMapping("/hello/{name}")
    String hello(@PathVariable String name) {
        return "Hello, " + name + "!";
    }
}

而且我的 pom.xml 也很基础。当我在 Tomcat 上运行此应用程序时,使用 Spring Boot 附带的嵌入式 Tomcat。只需单击一下,一切都像魅力一样。我可以访问http://localhost:8080/demo/hello/World,它也可以。

现在我试图让它与 Jboss EAP 兼容战争,我通过从 spring-boot-starter-web 中排除来禁用 Tomcat,并将其转换为战争项目。 (正如文章http://spring.io/blog/2014/03/07/deploying-spring-boot-applications 所建议的那样)。

我还补充了:

<dependency>
                  <groupId>javax.servlet</groupId>
                  <artifactId>javax.servlet-api</artifactId>
                 <scope>provided</scope>
            </dependency>,

因为它在抱怨。

现在,在这一切之后,它编译得很好并且也产生了战争。当我将此战争复制到 jboss 部署时,我可以看到它成功部署在控制台上。 但是其余的 api http://localhost:8080/demo/hello/World 只是不起作用,并且不断在浏览器上抛出错误:

JBWEB000068: message /demo/hello/World
JBWEB000069: description JBWEB000124: The requested resource is not available.

我做错了什么?

【问题讨论】:

    标签: maven-3 spring-boot jboss-eap-6


    【解决方案1】:

    答案在这里:Spring Java Config vs Jboss 7

    显然 "/" 在 Jboss EAP 6.3 上不起作用,但 "/*" 有效。 他们似乎已经用 wildfly 8 修复了它

    【讨论】:

      【解决方案2】:

      您在标签中提到了 JBoss 6。根据我的经验,Spring Boot Autoconfigure 和 JBoss 6(特别是)是不行的。如果打开 Hot Deploy 或者可能是其他一些情况,JBoss VFS 会对 war 文件中的所有 jars 执行一些激进的扫描。一旦它开始扫描自动配置模块中的类,它将由于类似于 ClassNotFoundException 的错误而中止。如果您使用自动配置,一种解决方案可能是将弹簧模块放在容器的库中。但这会使部署变得笨拙。我在 JBoss 7 和 Wildfly 8 上都没有看到这种行为。

      【讨论】:

      • 实际上 - 我现在能够使用 JBoss 6 成功部署多个 Spring Boot 应用程序。这一成就的关键是使用部署在 jar 中的 jboss-scanning.xml 来告诉 JBoss 不要尝试加载自动配置库中的每个类。还有一些其他的调整,我一直想写,但 jboss-scanning.xml 是关键。
      • 您能提供解决问题的 jboss-scanning.xml 吗?
      • @ddcruver - 我参与这个项目已经有几年了,但如果你把你当前的正在扫描的 .xml 文件发给我,我可能会指出我所做的更改。跨度>
      【解决方案3】:

      Spring Boot Reference Guide 找到这个,在 application.properties 文件中添加以下行

      server.servlet-path=/*
      

      在 jBoss EAP 6.2 中对此进行了测试并且运行良好。

      【讨论】:

      • 这行得通。我认为解释在正确标记的答案中。
      • 请修正这个答案:使用 server.servlet.path
      • 我的意思是,- 应该是一个点。
      猜你喜欢
      • 1970-01-01
      • 2019-08-13
      • 2018-11-19
      • 2019-06-16
      • 2014-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-11
      相关资源
      最近更新 更多