近期遇到部署springboot项目到jboss项目,遇到了jboss服务器日志显示部署成功且生成上下文,但是访问出线404。

springboot version:1.5.9.RELEASE
jboss version:EPA 6.4
猜测是项目虽然部署jboss成功但是jboss无法找到上下文。解决方案如下:
1.pom.xml添加servlet依赖
<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <scope>provided</scope> </dependency>
2 自定义webApplicationInitializer
import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.ServletRegistration.Dynamic; import org.springframework.context.annotation.Configuration; import org.springframework.web.WebApplicationInitializer; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; import org.springframework.web.servlet.DispatcherServlet; @Configuration public class WebApplicationInitializerImpl implements WebApplicationInitializer{ @Override public void onStartup(ServletContext container) throws ServletException { WebApplicationContext context = getContext(); Dynamic registration = container.addServlet("dispatcher", new DispatcherServlet(context)); registration.setLoadOnStartup(1); registration.addMapping("/*"); } private WebApplicationContext getContext() { AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext(); context.setConfigLocation(ApplicationMain.class.getName()); return context; } }3.把ApplicationMain启动类添加到SpringApplicationBuilder
@SpringBootApplication public class ApplicationMain extends SpringBootServletInitializer{ @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(ApplicationMain.class); } public static void main(String[] args) { SpringApplication.run(ApplicationMain.class, args); } }
4 在application.yml文件把该项目的domain指定好,JBOSS容器中如果超过2个springboot项目需要添加。
spring: jmx: default-domain: leotest
endpoints: jmx: domain: leotest unique-names: true