2

我有一个使用 Spring Boot 开发的工作项目,Spring Boot Security 和 Spring Data Rest with Maven。

作为一个独立的类工作正常。Tomcat 中的 WAR 部署也可以正常工作。我已经使用 Maven 从 WAR 中生成了一个 EAR,并且部署在 WAS 8.5.5 中不起作用。

独立的 Java 类与嵌入式 Tomcat 以及外部 Tomcat 7 一起工作正常。同样无法从 websphere 启动,不确定我是否缺少任何其他配置?

    package com.marsh.forms;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.context.web.SpringBootServletInitializer;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.DispatcherServlet;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;

@Configuration
@EnableWebMvc
@ComponentScan
@EnableAutoConfiguration
@EnableConfigurationProperties
public class FormsRestApplication2 extends SpringBootServletInitializer {


    public static void main(String[] args) throws Exception {
        ApplicationContext ctx = SpringApplication.run(
                FormsRestApplication2.class, args);

    }   

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

    private static Class<FormsRestApplication2> applicationClass = FormsRestApplication2.class;

    @Bean
    // Magic entry
    public DispatcherServlet dispatcherServlet() {
        DispatcherServlet ds = new DispatcherServlet();
        ds.setThrowExceptionIfNoHandlerFound(true);
        return ds;
    }

}

WAR pom.xml

<?xml version="1.0"?>
<project
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.marsh</groupId>
        <artifactId>testparent1</artifactId>
        <version>0.1</version>
    </parent>
    <groupId>com.marsh</groupId>
    <artifactId>testwar1</artifactId>
    <version>0.1</version>
    <packaging>war</packaging>

    <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>
                <exclusion>
                    <artifactId>tomcat-embed-el</artifactId>
                    <groupId>org.apache.tomcat.embed</groupId>
                </exclusion>
                    <exclusion><groupId>javax.validation</groupId>
                    <artifactId>validation-api</artifactId></exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>

        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-rest</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-security</artifactId>
        </dependency>

        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc6</artifactId>
            <version>11.2.0.4.0</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.0.1</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <properties>
        <start-class>com.marsh.forms.FormsRestApplication2</start-class>        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.7</java.version>        
    </properties>
    <build>
        <plugins>
                            <plugin>
                     <groupId>org.apache.maven.plugins</groupId>
                     <artifactId>maven-war-plugin</artifactId>
                        <configuration>
                            <archive>
                            <manifestEntries>
                                <Ignore-Scanning-Archives>spring-boot-starter-data-rest-1.3.0.M5.jar, hibernate-core-4.3.11.Final.jar</Ignore-Scanning-Archives>  
                                <Ignore-Scanning-Packages>org.springframework.data.rest.core, org.hibernate,javax.persistence </Ignore-Scanning-Packages>
                            </manifestEntries>
                            </archive>
                        </configuration>
                </plugin>

        </plugins>
        <finalName>testwar1</finalName>
    </build>
    <organization>
        <name>marsh</name>
        <url>www.marsh.com</url>
    </organization>
    <scm>
        <developerConnection>szdasd</developerConnection>
    </scm>
</project>

耳朵 pom.xml

<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>
  <parent>
    <groupId>com.marsh</groupId>
    <artifactId>testparent1</artifactId>
    <version>0.1</version>
  </parent>
  <artifactId>testear1</artifactId>
  <packaging>ear</packaging>
<dependencies>
        <dependency>
            <groupId>com.marsh</groupId>
            <artifactId>testwar1</artifactId>
            <version>0.1</version>
            <type>war</type>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-ear-plugin</artifactId>
                <version>2.10.1</version>
                <configuration>
                    <skinnyWars>true</skinnyWars>
                    <defaultJavaBundleDir>lib</defaultJavaBundleDir>
                    <modules>
                        <webModule>
                            <groupId>com.marsh</groupId>
                            <artifactId>testwar1</artifactId>
                            <contextRoot>/forms</contextRoot>
                        </webModule>

                    </modules>
                    <generateApplicationXml>true</generateApplicationXml>
                </configuration>
            </plugin>

        </plugins>
        <finalName>forms</finalName>

    </build>
</project>

父 pom.xml

<?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.marsh</groupId>
    <artifactId>testparent1</artifactId>
    <version>0.1</version>
    <packaging>pom</packaging>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <!-- <version>1.2.7.RELEASE</version> -->
        <version>1.3.0.M5</version>
        <relativePath>/</relativePath>
    </parent>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
                <version>1.3.0.M5</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <modules>
        <!-- <module>testwar</module> <module>testear</module> -->
        <module>testwar1</module>
        <module>testear1</module>
    </modules>
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
                <!-- <version>3.1</version> -->
            </plugin>
        </plugins>
    </build>

    <repositories>
        <repository>
            <id>spring-snapshots</id>
            <name>Spring Snapshots</name>
            <url>https://repo.spring.io/snapshot</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>spring-snapshots</id>
            <name>Spring Snapshots</name>
            <url>https://repo.spring.io/snapshot</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </pluginRepository>
        <pluginRepository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </pluginRepository>
    </pluginRepositories>
</project>

Ear 生成成功,我可以在 application.xml 中看到有关带有上下文根的项目的正确更新。War 还使用类和 lib metaInf 信息生成良好。

Manifest-Version: 1.0
Implementation-Vendor: xxx
Implementation-Title: testwar1
Implementation-Version: 0.1
Implementation-Vendor-Id: com.marsh
Ignore-Scanning-Packages: org.springframework.data.rest.core, org.hibe
 rnate,javax.persistence
Built-By: abc
Build-Jdk: 1.7.0_80
Ignore-Scanning-Archives: spring-boot-starter-data-rest-1.3.0.M5.jar, 
 hibernate-core-4.3.11.Final.jar
Created-By: Apache Maven 3.0.4
Archiver-Version: Plexus Archiver

我注意到的几个问题:

  1. 问题是在服务器中部署 EAR 但不是在 WAR 中部署,我没有看到 spring boot 启动器或我的类被加载或发布我的 spring rest 数据 URL:

    [11/5/15 18:24:46:088 EST] 00000070 ApplicationMg A   WSVR0200I: Starting application: testear1
    [11/5/15 18:24:46:088 EST] 00000070 ApplicationMg A   WSVR0204I: Application: testear1  Application build level: Unknown
    [11/5/15 18:24:48:260 EST] 00000070 webapp        I com.ibm.ws.webcontainer.webapp.WebGroupImpl WebGroup SRVE0169I: Loading Web Module: Archetype Created Web Application.
    [11/5/15 18:24:48:397 EST] 00000070 WASSessionCor I SessionContextRegistry getSessionContext SESN0176I: Will create a new session context for application key default_host/forms
    [11/5/15 18:25:20:583 EST] 00000070 webapp        I com.ibm.ws.webcontainer.webapp.WebApp log SRVE0292I: Servlet Message - [testear1#testwar1-0.1.war]:.No Spring WebApplicationInitializer types detected on classpath
    [11/5/15 18:25:20:583 EST] 00000070 webcontainer  I com.ibm.ws.webcontainer.VirtualHostImpl addWebApplication SRVE0250I: Web Module Archetype Created Web Application has been bound to default_host[*:9081,*:80,*:9444,*:5063,*:5062,*:443].
    [11/5/15 18:25:20:640 EST] 00000070 ApplicationMg A   WSVR0221I: Application started: testear1
    [11/5/15 18:25:20:640 EST] 00000070 CompositionUn A   WSVR0191I: Composition unit WebSphere:cuname=testear1 in BLA WebSphere:blaname=testear1 started.
    
  2. 这可能是因为版本不匹配,但我在 JDK7 中运行的所有编译器、运行时和 WAS 8.5.5 中都使用 jDK7。

    [11/5/15 18:23:59:185 EST] 00000072 visitor       W com.ibm.ws.amm.scan.util.AnnotationInfoDefaultVisitor visitAnnotation [ com.ibm.ws.amm.scan.util.InfoVisitor@572832628 ] for method [ com.ibm.ws.amm.scan.util.info.impl.MethodInfoImpl@2048932859 ( org.springframework.data.rest.core.annotation.RepositoryRestResource.collectionResourceDescription ) ] Name [ null ] Description [ Lorg/springframework/data/rest/core/annotation/Description; ] Call in violation of protocol
    [11/5/15 18:23:59:196 EST] 00000072 visitor       W com.ibm.ws.amm.scan.util.AnnotationInfoDefaultVisitor visitAnnotation [ com.ibm.ws.amm.scan.util.InfoVisitor@572832628 ] for method [ com.ibm.ws.amm.scan.util.info.impl.MethodInfoImpl@-535225858 ( org.springframework.data.rest.core.annotation.RepositoryRestResource.itemResourceDescription ) ] Name [ null ] Description [ Lorg/springframework/data/rest/core/annotation/Description; ] Call in violation of protocol
    

我已经使用了最新的 Spring Boot 版本,需要“@ControllerAdvice(basePackageClasses = RepositoryRestExceptionHandler.class)”类。

4

1 回答 1

0

解决方案:我可以使用 servlet2.5 容器解决此问题,这意味着我已更改 web.xml 如下所示并按照以下线程步骤使其工作,因为我无法获得快速解决方案以使其与 WAS 5.5 中的 servlet 3.0 一起工作。 5.0

https://bp3.zendesk.com/hc/en-us/articles/210443048-Running-Spring-Boot-JPA-apps-in-WebSphere-8-5-5

web.xml

<?xml version="1.0" encoding="UTF-8"?>

http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>com.marsh.forms.FormsRestApplication2</param-value>
</context-param>

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

<display-name>Archetype Created Web Application</display-name>

<servlet>
    <servlet-name>spring</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>spring</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

springSecurityFilterChain org.springframework.web.filter.DelegatingFilterProxy

<filter-mapping>
  <filter-name>springSecurityFilterChain</filter-name>
  <url-pattern>/*</url-pattern>
  <dispatcher>ERROR</dispatcher>
  <dispatcher>REQUEST</dispatcher>
</filter-mapping>

由于我更改了容器版本,因此我还降低了 hibernate 和 spring boot jpa 版本来执行我的项目。

<?xml version="1.0"?>

http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www. w3.org/2001/XMLSchema-instance"> 4.0.0 com.marsh testparent1 0.1 com.marsh testwar1 0.1 战争

<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>
            <!-- <exclusion>
                <artifactId>tomcat-embed-el</artifactId>
                <groupId>org.apache.tomcat.embed</groupId>
            </exclusion> -->

                <exclusion>
                <groupId>javax.validation</groupId>
                <artifactId>validation-api</artifactId></exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-legacy</artifactId>
        <version>1.0.1.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.hibernate.javax.persistence</groupId>
                <artifactId>hibernate-jpa-2.1-api</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-rest</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-security</artifactId>
    </dependency>

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>4.1.12.Final</version>
    </dependency>

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>4.1.12.Final</version>
    </dependency>

    <dependency>
        <groupId>org.hibernate.javax.persistence</groupId>
        <artifactId>hibernate-jpa-2.0-api</artifactId>
        <version>1.0.1.Final</version>
    </dependency>
    <dependency>
        <groupId>com.oracle</groupId>
        <artifactId>ojdbc6</artifactId>
        <version>11.2.0.4.0</version>
    </dependency>

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.0.1</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>
<properties>
    <start-class>com.marsh.forms.FormsRestApplication2</start-class>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.7</java.version>        
</properties>
<build>
    <plugins>
        <plugin>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-maven-plugin</artifactId> 
            </plugin>
            <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-war-plugin</artifactId>
                    <configuration>
                        <archive>
                        <manifestEntries>
                            <Ignore-Scanning-Archives>spring-boot-starter-data-rest-1.3.0.M5.jar, hibernate-core-4.3.11.Final.jar</Ignore-Scanning-Archives>  
                            <Ignore-Scanning-Packages>org.springframework.data.rest.core, org.hibernate,javax.persistence </Ignore-Scanning-Packages>
                        </manifestEntries>
                        </archive>
                    </configuration>
            </plugin>

    </plugins>
    <finalName>testwar1</finalName>
</build>

<scm>
    <developerConnection>abc</developerConnection>
</scm>

春季启动入门课程:

@Configuration
@EnableWebMvc
@ComponentScan
@EnableAutoConfiguration
@EnableConfigurationProperties
public class FormsRestApplication2{ 


    public static void main(String[] args) throws Exception {
        ApplicationContext ctx = SpringApplication.run(
                FormsRestApplication2.class, args);

    }

    private static Class<FormsRestApplication2> applicationClass = FormsRestApplication2.class;

    @Bean   
    public DispatcherServlet dispatcherServlet() {
        DispatcherServlet ds = new DispatcherServlet();
        ds.setThrowExceptionIfNoHandlerFound(true);
        return ds;
    }

}
于 2015-11-11T17:50:39.677 回答