如何在 jboss(版本 5)服务器中部署 spring 启动 war?

how to deploy spring boot war in jboss(version 5) server?

在 JBoss 服务器中部署 spring 启动 War 时出现异常。

我创建了一个示例应用程序 class,它加载所有 spring 引导配置。

@SpringBootApplication
public class Application extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

控制器class:

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

这是我的 web.xml

<web-app>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>demo.Application</param-value>
    </context-param>

    <listener>
        <listener-class>org.springframework.boot.legacy.context.web.SpringBootContextLoaderListener</listener-class>
    </listener>

    <filter>
        <filter-name>myFilter</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>myFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <servlet>
        <servlet-name>appServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextAttribute</param-name>
            <param-value>org.springframework.web.context.WebApplicationContext.ROOT</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>appServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>

当我将其部署为 war 时,出现以下异常:

2016-06-15 11:47:39,390 +0530 level=INFO  class=org.jboss.web.tomcat.service.deployers.TomcatDeployment              deploy, ctxPath=/spring-boot-demo
2016-06-15 11:47:39,499 +0530 level=ERROR class=STDERR              SLF4J: Class path contains multiple SLF4J bindings.
2016-06-15 11:47:39,500 +0530 level=ERROR class=STDERR              SLF4J: Found binding in [vfszip:/Users/xxx/Downloads/softwares/whp-jboss-web-5/common/lib/slf4j-jboss-logging.jar/org/slf4j/impl/StaticLoggerBinder.class]
2016-06-15 11:47:39,500 +0530 level=ERROR class=STDERR              SLF4J: Found binding in [vfszip:/Users/xxx/Downloads/softwares/whp-jboss-web-5/server/default/deploy/spring-boot-demo.war/WEB-INF/lib/logback-classic-1.1.5.jar/org/slf4j/impl/StaticLoggerBinder.class]
2016-06-15 11:47:39,500 +0530 level=ERROR class=STDERR              SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
2016-06-15 11:47:39,542 +0530 level=ERROR class=STDERR              SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder]
2016-06-15 11:47:42,077 +0530 level=INFO  class=STDOUT                .   ____          _            __ _ _
2016-06-15 11:47:42,077 +0530 level=INFO  class=STDOUT               /\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
2016-06-15 11:47:42,077 +0530 level=INFO  class=STDOUT              ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
2016-06-15 11:47:42,077 +0530 level=INFO  class=STDOUT               \/  ___)| |_)| | | | | || (_| |  ) ) ) )
2016-06-15 11:47:42,077 +0530 level=INFO  class=STDOUT                '  |____| .__|_| |_|_| |_\__, | / / / /
2016-06-15 11:47:42,077 +0530 level=INFO  class=STDOUT               =========|_|==============|___/=/_/_/_/
2016-06-15 11:47:42,079 +0530 level=INFO  class=STDOUT               :: Spring Boot ::        (v1.3.3.RELEASE)
2016-06-15 11:47:42,140 +0530 level=INFO  class=org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/spring-boot-demo]              Initializing Spring embedded WebApplicationContext
2016-06-15 11:47:42,148 +0530 level=INFO  class=STDOUT              2016-06-15 11:47:42.146  INFO 2543 --- [      HDScanner] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 1465971462146 ms
2016-06-15 11:47:42,152 +0530 level=INFO  class=STDOUT              2016-06-15 11:47:42.152  INFO 2543 --- [      HDScanner] o.s.boot.SpringApplication               : Starting application on BANL12f516590.local with PID 2543 (/Users/xxx/Downloads/softwares/whp-jboss-web-5/server/default/deploy/spring-boot-demo.war started by psudheendra in /Users/xxx/Downloads/softwares/whp-jboss-web-5)
2016-06-15 11:47:42,152 +0530 level=INFO  class=STDOUT              2016-06-15 11:47:42.152  INFO 2543 --- [      HDScanner] o.s.boot.SpringApplication               : The following profiles are active: dev
2016-06-15 11:47:42,177 +0530 level=INFO  class=STDOUT              2016-06-15 11:47:42.177  INFO 2543 --- [      HDScanner] onConfigNonEmbeddedWebApplicationContext : Refreshing org.springframework.boot.legacy.context.web.AnnotationConfigNonEmbeddedWebApplicationContext@42bf31dc: startup date [Wed Jun 15 11:47:42 IST 2016]; root of context hierarchy
2016-06-15 11:47:42,222 +0530 level=INFO  class=STDOUT              2016-06-15 11:47:42.222 ERROR 2543 --- [      HDScanner] o.s.boot.SpringApplication               : Application startup failed

java.lang.ExceptionInInitializerError: null
        at org.springframework.core.io.support.PathMatchingResourcePatternResolver$VfsResourceMatchingDelegate.findMatchingResources(PathMatchingResourcePatternResolver.java:736) ~[spring-core-4.2.5.RELEASE.jar:4.2.5.RELEASE]
        at org.springframework.core.io.support.PathMatchingResourcePatternResolver.findPathMatchingResources(PathMatchingResourcePatternResolver.java:420) ~[spring-core-4.2.5.RELEASE.jar:4.2.5.RELEASE]
        at org.springframework.core.io.support.PathMatchingResourcePatternResolver.getResources(PathMatchingResourcePatternResolver.java:274) ~[spring-core-4.2.5.RELEASE.jar:4.2.5.RELEASE]
        at org.springframework.context.support.AbstractApplicationContext.getResources(AbstractApplicationContext.java:1269) ~[spring-context-4.2.5.RELEASE.jar:4.2.5.RELEASE]
        at org.springframework.context.support.GenericApplicationContext.getResources(GenericApplicationContext.java:225) ~[spring-context-4.2.5.RELEASE.jar:4.2.5.RELEASE]
        at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.findCandidateComponents(ClassPathScanningCandidateComponentProvider.java:270) ~[spring-context-4.2.5.RELEASE.jar:4.2.5.RELEASE]
        at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.doScan(ClassPathBeanDefinitionScanner.java:248) ~[spring-context-4.2.5.RELEASE.jar:4.2.5.RELEASE]
        at org.springframework.context.annotation.ComponentScanAnnotationParser.parse(ComponentScanAnnotationParser.java:137) ~[spring-context-4.2.5.RELEASE.jar:4.2.5.RELEASE]
        at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:268) ~[spring-context-4.2.5.RELEASE.jar:4.2.5.RELEASE]
         at org.springframework.context.annotation.ComponentScanAnnotationParser.parse(ComponentScanAnnotationParser.java:137) ~[spring-context-4.2.5.RELEASE.jar:4.2.5.RELEASE]
        at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:268) ~[spring-context-4.2.5.RELEASE.jar:4.2.5.RELEASE]
        at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:232) ~[spring-context-4.2.5.RELEASE.jar:4.2.5.RELEASE]
        at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:199) ~[spring-context-4.2.5.RELEASE.jar:4.2.5.RELEASE]
        at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:168) ~[spring-context-4.2.5.RELEASE.jar:4.2.5.RELEASE]
        at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:321) ~[spring-context-4.2.5.RELEASE.jar:4.2.5.RELEASE]
        at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:243) ~[spring-context-4.2.5.RELEASE.jar:4.2.5.RELEASE]
        at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:273) ~[spring-context-4.2.5.RELEASE.jar:4.2.5.RELEASE]
        at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:98) ~[spring-context-4.2.5.RELEASE.jar:4.2.5.RELEASE]
        at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:678) ~[spring-context-4.2.5.RELEASE.jar:4.2.5.RELEASE]
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:520) ~[spring-context-4.2.5.RELEASE.jar:4.2.5.RELEASE]
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:766) ~[spring-boot-1.3.3.RELEASE.jar:1.3.3.RELEASE]
        at org.springframework.boot.SpringApplication.createAndRefreshContext(SpringApplication.java:361) ~[spring-boot-1.3.3.RELEASE.jar:1.3.3.RELEASE]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) ~[spring-boot-1.3.3.RELEASE.jar:1.3.3.RELEASE]
        at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.java:134) ~[spring-boot-1.3.3.RELEASE.jar:1.3.3.RELEASE]
        at org.springframework.boot.legacy.context.web.SpringBootContextLoaderListener.initWebApplicationContext(SpringBootContextLoaderListener.java:61) ~[spring-boot-legacy-1.0.2.RELEASE.jar:1.0.2.RELEASE]
        at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107) ~[spring-web-4.2.5.RELEASE.jar:4.2.5.RELEASE]
        at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3910) [jbossweb.jar!/:na]
        at org.apache.catalina.core.StandardContext.start(StandardContext.java:4389) [jbossweb.jar!/:na]
        at org.jboss.web.tomcat.service.deployers.TomcatDeployment.performDeployInternal(TomcatDeployment.java:313) [jboss-web-service.jar!/:5.1.2 (build: SVNTag=JBPAPP_5_1_2 date=201111102209)]
        at org.jboss.web.tomcat.service.deployers.TomcatDeployment.performDeploy(TomcatDeployment.java:145) [jboss-web-service.jar!/:5.1.2 (build: SVNTag=JBPAPP_5_1_2 date=201111102209)]
        at org.jboss.web.deployers.AbstractWarDeployment.start(AbstractWarDeployment.java:461) [jboss.jar!/:5.1.2 (build: SVNTag=JBPAPP_5_1_2 date=201207160006)]
        at org.jboss.web.deployers.WebModule.startModule(WebModule.java:122) [jboss.jar!/:5.1.2 (build: SVNTag=JBPAPP_5_1_2 date=201207160006)]
        at org.jboss.web.deployers.WebModule.start(WebModule.java:97) [jboss.jar!/:5.1.2 (build: SVNTag=JBPAPP_5_1_2 date=201207160006)]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_60]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_60]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_60]
        at java.lang.reflect.Method.invoke(Method.java:497) ~[na:1.8.0_60]
        at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:157) [jboss-mbeans.jar!/:5.1.2 (build: SVNTag=JBPAPP_5_1_2 date=201207160006)]
        at org.jboss.mx.server.Invocation.dispatch(Invocation.java:96) [jboss-mbeans.jar!/:5.1.2 (build: SVNTag=JBPAPP_5_1_2 date=201111102209)]
        at org.jboss.mx.server.Invocation.invoke(Invocation.java:88) [jboss-mbeans.jar!/:5.1.2 (build: SVNTag=JBPAPP_5_1_2 date=201111102209)]
        at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264) [jboss-mbeans.jar!/:5.1.2 (build: SVNTag=JBPAPP_5_1_2 date=201111102209)]
        at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:668) [jboss-jmx.jar!/:5.1.2 (build: SVNTag=JBPAPP_5_1_2 date=201111102209)]
        at org.jboss.system.microcontainer.ServiceProxy.invoke(ServiceProxy.java:206) [jboss-system-jmx.jar!/:5.1.2 (build: SVNTag=JBPAPP_5_1_2 date=201207160006)]
        at com.sun.proxy.$Proxy39.start(Unknown Source) [na:na]
        at org.jboss.system.microcontainer.StartStopLifecycleAction.installAction(StartStopLifecycleAction.java:42) [jboss-system-jmx.jar!/:5.1.2 (build: SVNTag=JBPAPP_5_1_2 date=201207160006)]
        at org.jboss.system.microcontainer.StartStopLifecycleAction.installAction(StartStopLifecycleAction.java:37) [jboss-system-jmx.jar!/:5.1.2 (build: SVNTag=JBPAPP_5_1_2 date=201207160006)]
        at org.jboss.dependency.plugins.action.SimpleControllerContextAction.simpleInstallAction(SimpleControllerContextAction.java:62) [jboss-dependency.jar:2.0.10.GA]
        at org.jboss.dependency.plugins.action.AccessControllerContextAction.install(AccessControllerContextAction.java:71) [jboss-dependency.jar:2.0.10.GA]
        at org.jboss.dependency.plugins.AbstractControllerContextActions.install(AbstractControllerContextActions.java:51) [jboss-dependency.jar:2.0.10.GA]
        at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348) [jboss-dependency.jar:2.0.10.GA]
        at org.jboss.system.microcontainer.ServiceControllerContext.install(ServiceControllerContext.java:297) [jboss-system-jmx.jar!/:5.1.2 (build: SVNTag=JBPAPP_5_1_2 date=201207160006)]
        at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1652) [jboss-dependency.jar:2.0.10.GA]
        at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:938) [jboss-dependency.jar:2.0.10.GA]
        at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1082) [jboss-dependency.jar:2.0.10.GA]
        at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:988) [jboss-dependency.jar:2.0.10.GA]
        at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:826) [jboss-dependency.jar:2.0.10.GA]
at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:826) [jboss-dependency.jar:2.0.10.GA]
        at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:556) [jboss-dependency.jar:2.0.10.GA]
        at org.jboss.system.ServiceController.doChange(ServiceController.java:688) [jboss-system-jmx.jar!/:5.1.2 (build: SVNTag=JBPAPP_5_1_2 date=201207160006)]
        at org.jboss.system.ServiceController.start(ServiceController.java:460) [jboss-system-jmx.jar!/:5.1.2 (build: SVNTag=JBPAPP_5_1_2 date=201207160006)]
        at org.jboss.system.deployers.ServiceDeployer.start(ServiceDeployer.java:163) [jboss-system-jmx.jar!/:5.1.2 (build: SVNTag=JBPAPP_5_1_2 date=201207160006)]
        at org.jboss.system.deployers.ServiceDeployer.deploy(ServiceDeployer.java:99) [jboss-system-jmx.jar!/:5.1.2 (build: SVNTag=JBPAPP_5_1_2 date=201207160006)]
        at org.jboss.system.deployers.ServiceDeployer.deploy(ServiceDeployer.java:46) [jboss-system-jmx.jar!/:5.1.2 (build: SVNTag=JBPAPP_5_1_2 date=201207160006)]
        at org.jboss.deployers.spi.deployer.helpers.AbstractSimpleRealDeployer.internalDeploy(AbstractSimpleRealDeployer.java:62) [jboss-deployers-spi.jar!/:2.0.10.GA]
        at org.jboss.deployers.spi.deployer.helpers.AbstractRealDeployer.deploy(AbstractRealDeployer.java:55) [jboss-deployers-spi.jar!/:2.0.10.GA]
        at org.jboss.deployers.plugins.deployers.DeployerWrapper.deploy(DeployerWrapper.java:179) [jboss-deployers-impl.jar!/:2.0.10.GA]
        at org.jboss.deployers.plugins.deployers.DeployersImpl.doDeploy(DeployersImpl.java:1454) [jboss-deployers-impl.jar!/:2.0.10.GA]
        at org.jboss.deployers.plugins.deployers.DeployersImpl.doInstallParentFirst(DeployersImpl.java:1172) [jboss-deployers-impl.jar!/:2.0.10.GA]
        at org.jboss.deployers.plugins.deployers.DeployersImpl.doInstallParentFirst(DeployersImpl.java:1193) [jboss-deployers-impl.jar!/:2.0.10.GA]
        at org.jboss.deployers.plugins.deployers.DeployersImpl.install(DeployersImpl.java:1113) [jboss-deployers-impl.jar!/:2.0.10.GA]
        at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348) [jboss-dependency.jar:2.0.10.GA]
        at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1652) [jboss-dependency.jar:2.0.10.GA]
        at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:938) [jboss-dependency.jar:2.0.10.GA]
        at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1082) [jboss-dependency.jar:2.0.10.GA]
        at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:988) [jboss-dependency.jar:2.0.10.GA]
        at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:826) [jboss-dependency.jar:2.0.10.GA]
        at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:556) [jboss-dependency.jar:2.0.10.GA]
        at org.jboss.deployers.plugins.deployers.DeployersImpl.process(DeployersImpl.java:789) [jboss-deployers-impl.jar!/:2.0.10.GA]
        at org.jboss.deployers.plugins.main.MainDeployerImpl.process(MainDeployerImpl.java:699) [jboss-deployers-impl.jar!/:2.0.10.GA]
        at org.jboss.system.server.profileservice.repository.MainDeployerAdapter.process(MainDeployerAdapter.java:117) [jboss-system.jar!/:5.1.2 (build: SVNTag=JBPAPP_5_1_2 date=201207160006)]
        at org.jboss.system.server.profileservice.hotdeploy.HDScanner.scan(HDScanner.java:409) [jboss-system.jar!/:5.1.2 (build: SVNTag=JBPAPP_5_1_2 date=201207160006)]
        at org.jboss.system.server.profileservice.hotdeploy.HDScanner.run(HDScanner.java:294) [jboss-system.jar!/:5.1.2 (build: SVNTag=JBPAPP_5_1_2 date=201207160006)]
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_60]
        at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) [na:1.8.0_60]
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access1(ScheduledThreadPoolExecutor.java:180) [na:1.8.0_60]
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) [na:1.8.0_60]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_60]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_60]
        at java.lang.Thread.run(Thread.java:745) [na:1.8.0_60]
Caused by: java.lang.IllegalStateException: Could not detect JBoss VFS infrastructure
        at org.springframework.core.io.VfsUtils.(VfsUtils.java:94) ~[spring-core-4.2.5.RELEASE.jar:4.2.5.RELEASE]
        ... 86 common frames omitted
Caused by: java.lang.ClassNotFoundException: org.jboss.vfs.VFS from BaseClassLoader@33fb67db{vfszip:/Users/xxx/Downloads/softwares/whp-jboss-web-5/server/default/deploy/spring-boot-demo.war/}
        at org.jboss.classloader.spi.base.BaseClassLoader.loadClass(BaseClassLoader.java:477) ~[jboss-classloader.jar:2.0.10.GA]
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_60]
        at org.springframework.core.io.VfsUtils.(VfsUtils.java:71) ~[spring-core-4.2.5.RELEASE.jar:4.2.5.RELEASE]
        ... 86 common frames omitted

pom.xml

中的依赖项
<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-legacy</artifactId>
            <version>1.0.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

您正在尝试在不受支持的 JBoss 服务器版本上 运行 Spring 4.2 应用程序。由于 Spring 4.0,最低 JBoss 版本为 6.1,请参阅维基上的 migration from earlier version of the spring framework 部分。