java - 部署 Spring Boot 1.3.2 IBM WAS 8.5

标签 java spring-boot websphere-8 spring-boot-maven-plugin

我在使用完整配置文件在 IBM Websphere 8.5.5.8 上部署简单的 spring boot web 时遇到问题

WAS 默认使用 servlet 3.0 和 java 1.7。

该应用程序没有做太多事情,只是显示一个带有“您好 - [当前日期]”的页面。

部署 war 文件时,我们在服务器日志输出中看到以下内容:

[2/3/16 13:30:44:857 AST] 00000078 AdminHelper   A   ADMN1008I: An attempt is made to start the simpledemo_war application. (User ID = defaultWIMFileBasedRealm/wps_admin)
[2/3/16 13:30:44:871 AST] 00000078 CompositionUn A   WSVR0190I: Starting composition unit WebSphere:cuname=simpledemo_war in BLA WebSphere:blaname=simpledemo_war.
[2/3/16 13:30:44:958 AST] 00000078 ApplicationMg A   WSVR0200I: Starting application: simpledemo_war
[2/3/16 13:30:44:959 AST] 00000078 ApplicationMg A   WSVR0203I: Application: simpledemo_war  Application build level: 0.0.1-SNAPSHOT
[2/3/16 13:30:46:347 AST] 00000078 webapp        I com.ibm.ws.webcontainer.webapp.WebGroupImpl WebGroup SRVE0169I: Loading Web Module: simpledemo.war.
[2/3/16 13:30:46:356 AST] 00000078 MethodMap     W   CWNEN0049W: Resource annotations on the methods of the org.springframework.boot.autoconfigure.jdbc.DataSourceInitializer class will be ignored. The annotations could not be obtained because of the exception : java.lang.NoClassDefFoundError: org.springframework.jdbc.datasource.init.DatabasePopulator
[2/3/16 13:30:46:357 AST] 00000078 InjectionProc W   CWNEN0047W: Resource annotations on the fields of the org.springframework.boot.autoconfigure.jdbc.DataSourceInitializer class will be ignored. The annotations could not be obtained because of the exception : java.lang.NoClassDefFoundError: org.springframework.jdbc.datasource.init.DatabasePopulator
        at java.lang.J9VMInternals.verifyImpl(Native Method)
        at java.lang.J9VMInternals.verify(J9VMInternals.java:93)
        at java.lang.J9VMInternals.prepare(J9VMInternals.java:490)
        at java.lang.Class.getDeclaredFields(Class.java:605)
        at com.ibm.wsspi.injectionengine.InjectionProcessor.getAllDeclaredFields(InjectionProcessor.java:548)
        at com.ibm.wsspi.injectionengine.InjectionProcessor.processAllAnnotations(InjectionProcessor.java:716)
        at com.ibm.wsspi.injectionengine.InjectionProcessorContextImpl.processAllAnnotations(InjectionProcessorContextImpl.java:61)
        at com.ibm.ws.injectionengine.AbstractInjectionEngine.processAnnotations(AbstractInjectionEngine.java:741)
        at com.ibm.ws.injectionengine.AbstractInjectionEngine.processInjectionMetaData(AbstractInjectionEngine.java:561)
        at com.ibm.ws.injectionengine.SharedInjectionEngineImpl.processInjectionMetaData(SharedInjectionEngineImpl.java:229)
        at com.ibm.ws.injectionengine.ReferenceContextImpl.processImpl(ReferenceContextImpl.java:789)
        at com.ibm.ws.injectionengine.ReferenceContextImpl.process(ReferenceContextImpl.java:390)
        at com.ibm.ws.webcontainer.webapp.WebAppImpl.populateJavaNameSpace(WebAppImpl.java:1112)
        at com.ibm.ws.webcontainer.webapp.WebAppImpl.initialize(WebAppImpl.java:328)
        at com.ibm.ws.webcontainer.webapp.WebGroupImpl.addWebApplication(WebGroupImpl.java:88)
        at com.ibm.ws.webcontainer.VirtualHostImpl.addWebApplication(VirtualHostImpl.java:169)
        at com.ibm.ws.webcontainer.WSWebContainer.addWebApp(WSWebContainer.java:746)
        at com.ibm.ws.webcontainer.WSWebContainer.addWebApplication(WSWebContainer.java:634)
        at com.ibm.ws.webcontainer.component.WebContainerImpl.install(WebContainerImpl.java:426)
        at com.ibm.ws.webcontainer.component.WebContainerImpl.start(WebContainerImpl.java:718)
        at com.ibm.ws.runtime.component.ApplicationMgrImpl.start(ApplicationMgrImpl.java:1175)
        at com.ibm.ws.runtime.component.DeployedApplicationImpl.fireDeployedObjectStart(DeployedApplicationImpl.java:1370)
        at com.ibm.ws.runtime.component.DeployedModuleImpl.start(DeployedModuleImpl.java:639)
        at com.ibm.ws.runtime.component.DeployedApplicationImpl.start(DeployedApplicationImpl.java:968)
        at com.ibm.ws.runtime.component.ApplicationMgrImpl.startApplication(ApplicationMgrImpl.java:774)
        at com.ibm.ws.runtime.component.ApplicationMgrImpl.startApplicationDynamically(ApplicationMgrImpl.java:1374)
        at com.ibm.ws.runtime.component.ApplicationMgrImpl.start(ApplicationMgrImpl.java:2179)
        at com.ibm.ws.runtime.component.CompositionUnitMgrImpl.start(CompositionUnitMgrImpl.java:445)
        at com.ibm.ws.runtime.component.CompositionUnitImpl.start(CompositionUnitImpl.java:123)
        at com.ibm.ws.runtime.component.CompositionUnitMgrImpl.start(CompositionUnitMgrImpl.java:388)
        at com.ibm.ws.runtime.component.CompositionUnitMgrImpl.access$500(CompositionUnitMgrImpl.java:116)
        at com.ibm.ws.runtime.component.CompositionUnitMgrImpl$1.run(CompositionUnitMgrImpl.java:663)
        at com.ibm.ws.security.auth.ContextManagerImpl.runAs(ContextManagerImpl.java:5474)
        at com.ibm.ws.security.auth.ContextManagerImpl.runAsSystem(ContextManagerImpl.java:5600)
        at com.ibm.ws.security.core.SecurityContext.runAsSystem(SecurityContext.java:255)
        at com.ibm.ws.runtime.component.CompositionUnitMgrImpl.startCompositionUnit(CompositionUnitMgrImpl.java:677)
        at com.ibm.ws.runtime.component.CompositionUnitMgrImpl.startCompositionUnit(CompositionUnitMgrImpl.java:621)
        at com.ibm.ws.runtime.component.ApplicationMgrImpl.startApplication(ApplicationMgrImpl.java:1266)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
        at java.lang.reflect.Method.invoke(Method.java:611)
        at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:49)
        at sun.reflect.GeneratedMethodAccessor33.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
        at java.lang.reflect.Method.invoke(Method.java:611)
        at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:256)
        at javax.management.modelmbean.RequiredModelMBean$4.run(RequiredModelMBean.java:1148)
        at java.security.AccessController.doPrivileged(AccessController.java:252)
        at com.ibm.oti.security.CheckedAccessControlContext.securityCheck(CheckedAccessControlContext.java:30)
        at sun.misc.JavaSecurityAccessWrapper.doIntersectionPrivilege(JavaSecurityAccessWrapper.java:41)
        at javax.management.modelmbean.RequiredModelMBean.invokeMethod(RequiredModelMBean.java:1142)
        at javax.management.modelmbean.RequiredModelMBean.invoke(RequiredModelMBean.java:995)
        at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:848)
        at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:774)
        at com.ibm.ws.management.AdminServiceImpl$1.run(AdminServiceImpl.java:1335)
        at com.ibm.ws.security.util.AccessController.doPrivileged(AccessController.java:118)
        at com.ibm.ws.management.AdminServiceImpl.invoke(AdminServiceImpl.java:1228)
        at com.ibm.ws.management.commands.AdminServiceCommands$InvokeCmd.execute(AdminServiceCommands.java:251)
        at com.ibm.ws.console.core.mbean.MBeanHelper.invoke(MBeanHelper.java:241)
        at com.ibm.ws.console.appdeployment.ApplicationDeploymentCollectionAction.execute(ApplicationDeploymentCollectionAction.java:578)
        at org.apache.struts.action.RequestProcessor.processActionPerform(Unknown Source)
        at org.apache.struts.action.RequestProcessor.process(Unknown Source)
        at org.apache.struts.action.ActionServlet.process(Unknown Source)
        at org.apache.struts.action.ActionServlet.doPost(Unknown Source)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:595)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:668)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1227)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:776)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:458)
        at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:178)
        at com.ibm.ws.webcontainer.filter.WebAppFilterChain.invokeTarget(WebAppFilterChain.java:136)
        at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:79)
        at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:928)
        at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1025)
        at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java:1385)
        at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:194)
        at org.apache.struts.action.RequestProcessor.doForward(Unknown Source)
        at org.apache.struts.tiles.TilesRequestProcessor.doForward(Unknown Source)
        at org.apache.struts.action.RequestProcessor.processForwardConfig(Unknown Source)
        at org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(Unknown Source)
        at org.apache.struts.action.RequestProcessor.process(Unknown Source)
        at org.apache.struts.action.ActionServlet.process(Unknown Source)
        at org.apache.struts.action.ActionServlet.doPost(Unknown Source)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:595)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:668)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1227)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:776)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:458)
        at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:178)
        at com.ibm.ws.webcontainer.filter.WebAppFilterChain.invokeTarget(WebAppFilterChain.java:136)
        at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:97)
        at com.ibm.ws.console.core.servlet.WSCUrlFilter.setUpCommandAssistance(WSCUrlFilter.java:955)
        at com.ibm.ws.console.core.servlet.WSCUrlFilter.continueStoringTaskState(WSCUrlFilter.java:504)
        at com.ibm.ws.console.core.servlet.WSCUrlFilter.doFilter(WSCUrlFilter.java:325)
        at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:195)
        at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:91)
        at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:928)
        at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1025)
        at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:87)
        at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:909)
        at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1662)
        at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:200)
        at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:459)
        at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:526)
        at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:312)
        at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:283)
        at com.ibm.ws.ssl.channel.impl.SSLConnectionLink.determineNextChannel(SSLConnectionLink.java:1048)
        at com.ibm.ws.ssl.channel.impl.SSLConnectionLink.readyInboundPostHandshake(SSLConnectionLink.java:716)
        at com.ibm.ws.ssl.channel.impl.SSLConnectionLink$MyHandshakeCompletedCallback.complete(SSLConnectionLink.java:412)
        at com.ibm.ws.ssl.channel.impl.SSLUtils.handleHandshake(SSLUtils.java:1066)
        at com.ibm.ws.ssl.channel.impl.SSLHandshakeIOCallback.complete(SSLHandshakeIOCallback.java:87)
        at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:175)
        at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
        at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
        at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138)
        at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204)
        at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775)
        at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905)
        at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1862)
Caused by: java.lang.ClassNotFoundException: org.springframework.jdbc.datasource.init.DatabasePopulator
        at java.net.URLClassLoader.findClass(URLClassLoader.java:434)
        at com.ibm.ws.bootstrap.ExtClassLoader.findClass(ExtClassLoader.java:204)
        at java.lang.ClassLoader.loadClassHelper(ClassLoader.java:688)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:667)
        at com.ibm.ws.bootstrap.ExtClassLoader.loadClass(ExtClassLoader.java:119)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:650)
        at com.ibm.ws.classloader.ProtectionClassLoader.loadClass(ProtectionClassLoader.java:62)
        at com.ibm.ws.classloader.ProtectionClassLoader.loadClass(ProtectionClassLoader.java:58)
        at com.ibm.ws.classloader.CompoundClassLoader.loadClass(CompoundClassLoader.java:616)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:650)
        at com.ibm.ws.classloader.CompoundClassLoader.loadClass(CompoundClassLoader.java:584)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:650)
        ... 120 more

[2/3/16 13:30:46:388 AST] 00000078 WASSessionCor I SessionContextRegistry getSessionContext SESN0176I: Will create a new session context for application key default_host/simpledemo
[2/3/16 13:30:52:873 AST] 00000078 webapp        I com.ibm.ws.webcontainer.webapp.WebApp log SRVE0292I: Servlet Message - [simpledemo_war#simpledemo.war]:.Spring WebApplicationInitializers detected on classpath: [org.springframework.boot.autoconfigure.jersey.JerseyAutoConfiguration$JerseyWebApplicationInitializer@fcdf38eb]
[2/3/16 13:30:52:874 AST] 00000078 webcontainer  I com.ibm.ws.webcontainer.VirtualHostImpl addWebApplication SRVE0250I: Web Module null has been bound to default_host[*:9080,*:80,*:9443,*:5060,*:5061,*:443].
[2/3/16 13:30:52:889 AST] 00000078 ApplicationMg A   WSVR0221I: Application started: simpledemo_war
[2/3/16 13:30:52:889 AST] 00000078 CompositionUn A   WSVR0191I: Composition unit WebSphere:cuname=simpledemo_war in BLA WebSphere:blaname=simpledemo_war started.

Spring boot 似乎没有启动,我在日志中没有看到任何表明我的 servlet 正在初始化的信息。 我正在使用带有 maven 和 java 1.7 的 spring boot。我在 war 中没有 web.xml 文件。 这是我的引导应用程序类:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoSimpleApplication {

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

项目 POM 是:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.me.example</groupId>
    <artifactId>simple-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>
    <name>simple-demo</name>
    <description>Demo project for Spring Boot</description>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.3.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.7</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </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-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

更新 1: 我遵循了关于部署到外部容器的 Spring 指南,同样的 war 适用于 JBoss EAP 6.2 和 tomcat 8

更新 2: 添加了一个扩展 SpringBootServletInitializer 并从 POM 中删除了 spring-boot-devtools 的新类(我不知道我是怎么忘记的),请参阅 Andy Wilkinson 的回答..

最佳答案

我相信您可以安全地忽略来自 WAS 的警告消息。它们相当嘈杂,但不会阻止您的应用程序成功启动。

问题似乎是您的应用程序中没有 SpringBootServletInitializer。如果您这样做了,它就会列在这条日志消息中:

[2/3/16 13:30:52:873 AST] 00000078 webapp        I com.ibm.ws.webcontainer.webapp.WebApp log SRVE0292I: Servlet Message - [simpledemo_war#simpledemo.war]:.Spring WebApplicationInitializers detected on classpath: [org.springframework.boot.autoconfigure.jersey.JerseyAutoConfiguration$JerseyWebApplicationInitializer@fcdf38eb]

提供一个最简单的方法是更新 DemoSimpleApplication 以扩展 SpringBootServletInitializer 并覆盖其配置方法:

@SpringBootApplication
public class DemoSimpleApplication extends SpringBootServletInitializer {

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

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

}

关于java - 部署 Spring Boot 1.3.2 IBM WAS 8.5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35238178/

相关文章:

java - Eclipse 不创建主 Activity 和布局

spring - Spring Boot JAX-RS/CXF依赖项注入(inject)可在JAR中工作,但不能在WAR中工作

spring - 尝试将 JPA 与 Kotlin 和 Spring boot 结合使用时出现 BeanDefinitionParsingException

JSP:在 Tomcat 中需要引号,但在 WebSphere 中没有

java - JPA - 为持久方法生成的查询不会插入所有列

java - 为什么 JScrollPane 在包含 JXPanel 时不起作用?

java - 私有(private)字符串还是公共(public)静态字符串?

java - 在 Websphere 中部署 WAR,忽略所有 JEE 库

java - 程序将按降序输出三个整数

javascript - 为什么我的 Controller 中的保存功能不起作用?