Spring-控制台未加载引导徽标,如何在 tomcat 服务器上启动应用程序?

Spring-boot logo not loading on console, how to start application on tomcat server?

这是一个使用 spring-boot 构建的简单微服务。当我作为 Java 应用程序执行时,应用程序工作正常。但是当我在服务器上 运行 即 Tomcat Server v8.5 服务器显示 Started & Syncnorized 但在控制台中, spring-boot 徽标没有出现并且应用程序没有启动.我 IDE 上的其他项目运行良好。

我尝试了以下但没有成功:

1)删除服务器重新添加。 2) 使用 Maven 清理项目。 3) 更改了 BuildPath 设置(JDK 版本、Facets 等)。

截图参考 1) https://i.imgur.com/fVFLhNK.png 2)https://i.imgur.com/nTSWEGd.png

主应用程序


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

@SpringBootApplication
public class ShUsersApplication extends SpringBootServletInitializer {

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

控制器

package com.logituit.sitehawk.Controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.lang.NonNull;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.google.gson.Gson;
import com.logituit.sitehawk.Model.Contract;
import com.logituit.sitehawk.Service.UserService;

@RestController
@RequestMapping("/sitehawk")
public class UserController {

    private UserService userService;
    private Gson gson;

    @Autowired
    public UserController(@NonNull final UserService userService, @NonNull Gson gson) {
        this.userService = userService;
        this.gson = gson;
    }

    @PostMapping("/save")
    public String saveDetails(HttpEntity<String> httpEntity) {

        final Contract contract = gson.fromJson(httpEntity.getBody(), Contract.class);
        if (contract != null) {
            userService.createTicketBySite(contract);
            return "Success";
        } else
            return "Failed";
    }

    @GetMapping("/ticketsfromsite/{siteId}")
    public List<Contract> getAllTicketsBySite(HttpEntity<String> httpEntity, @PathVariable("siteId") final int siteId) {

        return userService.getTicketsBySite(siteId);

    }

}

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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.7.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.logituit.sitehawk</groupId>
    <artifactId>SH_Users</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>SH_Users</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <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>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

application.properties

#Local Database
spring.datasource.url = jdbc:mysql://localhost:3306/site_hawk
spring.datasource.username = root
spring.datasource.password = admin123
server.port=8089

请帮助我如何 运行 我的 spring-boot App.I 想要在控制台上看到 Spring boot 运行ning。但是 Spring Boot 的大 Logo 没有出现在控制台上。

应用程序容器(Tomcat 包括)的正常部署格式是 .war 但是 Spring 默认情况下启动包 运行可用的 jar 文件。

您可以在pom.xml文件中更改打包格式。

<packaging>war</packaging>

您可能还需要为 Tomcat 特定的 类 添加额外的依赖项。

...
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-tomcat</artifactId>
   <scope>provided</scope>
</dependency>

这样的设置应该产生一个 .war 文件到 $project_dir/target/classes 大多数 servlet 容器可以成功运行.

服务器不会简单地在控制台中打印所有内容,因为同时会有很多应用程序运行,控制台将变得非常混乱[=18] =],所以服务器的解决方案被记录到每个应用程序中。尝试找到您的应用程序日志,也许 spring 徽标会在那里。

还要确保您上传的是 .war 文件。 jar包是给运行是你的电脑。对于 Tomcat,您需要发送 .war 文件。您可以简单地更改 pom.xml 中的包装类型。 Usage - Apache Maven WAR Plugin

对于 运行 您在 tomcat 服务器中的应用程序,您应该通过以下方式排除嵌入式应用程序:

<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>

正如 käyrätorvi 所说,将您的应用程序打包为 war

Spring 引导应用程序包括一个嵌入式 Web 服务器,并且可以 运行 以多种方式。 Tomcat 默认包含,可以被其他服务器覆盖。您可以找到参考 here and here.

Spring 启动应用程序与传统的 java 网络应用程序不同,在 运行 部署方面得到了简化。作为开发人员,您可以专注于开发核心逻辑、公开端点等。一旦构建,这些应用程序就可以 运行 并且不需要部署在显式服务器上,因为它们 运行来自 spring boot starter web 依赖项的嵌入式服务器。