在tomcat中部署spring boot应用程序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在tomcat中部署spring boot应用程序相关的知识,希望对你有一定的参考价值。

我正在尝试使用战争文件在tomcat 9中部署我的spring应用程序,我可以生成.war文件,但出现错误404。我的应用程序是SpringBootServletInitializer的扩展,并且覆盖了configure方法,我的pom.xml文件也具有依赖项“ spring-boot-starter-tomcat”。

日志中没有任何错误。但是,如果我将index.html放在我的webapps目录中,tomcat将加载它。我需要tomcat加载index.jsp,但它是在WEB-INF / views中生成的。

部署目录的树(-L 2):

.
├── META-INF
│   ├── MANIFEST.MF
│   ├── maven
│   └── war-tracker
├── org
│   └── springframework
└── WEB-INF
    ├── classes
    ├── lib
    ├── lib-provided
    └── views

源结构

.
├── java
│   └── com
│       └── company
│           └── app
│               ├── controller
│               ├── Application.java
│               ├── model
│               ├── service
│               └── util
├── resources
│   └── application.properties
└── webapp
    └── WEB-INF
        └── views
            ├── secondary.jsp
            └── index.jsp

我的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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <!-- ... -->
    <packaging>war</packaging>
    <!-- ... -->

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.2.RELEASE</version>
        <relativePath/>
    </parent>

    <groupId>com.netexlearning</groupId>
    <artifactId>convalidator</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>convalidator</name>
    <description>Spring Boot</description>

    <properties>
        <java.version>11</java.version>
        <start-class>com.company.app.Application</start-class>
        <servlet-api.version>3.1.0</servlet-api.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </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-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.3</version>
        </dependency>
        <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>20190722</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jdt.core.compiler</groupId>
            <artifactId>ecj</artifactId>
            <version>4.6.1</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

application.properties:

path.file.service=uploaded
spring.servlet.multipart.max-file-size=2MB
spring.servlet.multipart.max-request-size=2MB
spring.mvc.view.prefix=/WEB-INF/views/

spring.mvc.view.suffix=.jsp

Aplication.java

@SpringBootApplication
@EnableConfigurationProperties(StorageProperties.class)
public class Application extends SpringBootServletInitializer {

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

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(Application.class);
    }

    @Bean
    CommandLineRunner init(StorageService storageService) {
        return (args) -> {
            storageService.deleteAll();
            storageService.init();
        };
    }

}

如果需要更多信息,请告诉我。

答案
我解决了。

我正在使用存储服务,它需要写入的权限,但是我不确定在哪里,然后我犯了一个错误:我在webapps的已部署文件夹中使用了chmod 664,Tomcat“运行”了我的项目,但总是响应404错误。 Spring从不执行任何操作。我删除了webapps中的文件夹,将属性path.file.service=uploaded更改为path.file.service=/tmp/file,然后再次生成了war文件。

现在正在工作。

以上是关于在tomcat中部署spring boot应用程序的主要内容,如果未能解决你的问题,请参考以下文章

在 Tomcat 中部署的 Spring Boot 提供 404 但可以独立运行

部署在tomcat上的Spring Boot无法启动

Spring Boot Tomcat部署不起作用Tomcat 7

如何在外部 tomcat 中部署 Spring-boot REST API

如何在 Spring Boot 应用程序中启用 HTTPS,在 Tomcat 中部署为 WAR 文件?

使用 Tomcat 进行 Spring Boot 部署