java - 如何在 tomcat 7 中为 spring boot 1.2.3 制作可部署的 war 文件

标签 java maven tomcat spring-boot

将 spring boot 应用程序构建为可部署 war 需要哪些配置,它可以部署在运行在 java 8 上的 tomcat 7 中。

经过数小时的调试后,我能够获取 war 文件,但是一旦部署到 tomcat,它就没有正确部署并且无法访问 api 并给出 404 错误。

catalina日志文件如下:

INFO: Deploying web application archive /var/lib/tomcat7/webapps/test.war
May 13, 2015 1:10:57 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /var/lib/tomcat7/webapps/ROOT

Pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://maven.apache.org/POM/4.0.0"
         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>
    <packaging>war</packaging>
    <groupId>test</groupId>
    <artifactId>test</artifactId>
    <version>1.0-SNAPSHOT</version>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.2.3.RELEASE</version>
    </parent>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <!-- Hibernate validator -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>provided</scope>
        </dependency>

        <!-- Spring Boot -->
        <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>javax.inject</groupId>
        <artifactId>javax.inject</artifactId>
        <version>1</version>
        </dependency>
    <!--    <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.0.1</version>
            <scope>provided</scope>
        </dependency>-->
    </dependencies>
  <!--  <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.0</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>-->

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>1.2.3.RELEASE</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

应用程序类文件

import org.apache.tomcat.jni.Global;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.web.SpringBootServletInitializer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.filter.CharacterEncodingFilter;

import javax.servlet.Filter;

@EnableAutoConfiguration
@Configuration
@ComponentScan
public class Application  extends SpringBootServletInitializer {

    public static void main(String[] args) {

        SpringApplication.run(Application.class, args);
    }
    private static Application application=new Application();
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {

        return application
                .showBanner(true)
                .parent(Global.class)
                .sources(this.application)
                .profiles("container")
                ;
    }


    @Bean
    public Filter characterEncodingFilter() {
        CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
        characterEncodingFilter.setEncoding("UTF-8");
        characterEncodingFilter.setForceEncoding(true);
        return characterEncodingFilter;
    }

}

最佳答案

删除静态字段application并更改configure方法的返回值如下:

return application
            .showBanner(true)
            .parent(Global.class)
            .sources(Application.class)
            .profiles("container")
            ;

关于java - 如何在 tomcat 7 中为 spring boot 1.2.3 制作可部署的 war 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30208804/

相关文章:

spring - IBM MQueue : setdirectAuth() operation is invalid error

java - 如何从本地连接的 JNDI 查找 DomainRuntimeServiceMBean?

macos - 如何使用brew命令在mac中安装特定版本的maven

java - 在Intellij Idea下使用Maven和ReactJS启动一个Spring Web应用程序项目

maven - 将多个 spring web 项目合并为一个可部署的 war

java - 在 ubuntu 中使用 eclipse 创建 tomcat - maven 项目

java - 可以通过Spring配置和启动嵌入式Tomcat吗?对 Jetty 好吗?

java - 呃哦 - 应用程序意外停止

java - 使用 Spring 避免数据库轮询的最佳方法

java - 如何使用GWT文件上传?