我有一个非常简单的Spring启动应用程序,我想部署到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,并将其转换为war项目。 (如文章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.
我做错了什么?
答案 0 :(得分:17)
在Spring Boot Reference Guide中找到此内容,在application.properties文件中添加以下行
server.servlet-path=/*
在jBoss EAP 6.2中进行了测试并且工作正常。
答案 1 :(得分:6)
答案在这里:Spring Java Config vs Jboss 7
显然“/”在Jboss EAP 6.3上不起作用,但“/ *”有效。 他们似乎已经用wildfly 8修复了它
答案 2 :(得分:2)
你在标签中提到了JBoss 6。根据我的经验,Spring Boot Autoconfigure 和JBoss 6(具体)是不行的。如果打开了Hot Deploy或者某些其他条件,JBoss VFS会对war文件中的所有jar执行一些积极的扫描。一旦它开始扫描autoconfigure模块中的类,它将因类似于ClassNotFoundException的错误而中止。如果使用自动配置,一种解决方案可能是将弹簧模块放在Container的lib中。但这会使部署变得笨拙。我没有在JBoss 7和Wildfly 8上看到这种行为。