在本文中,我将如何在外部Tomcat上运行Spring Boot应用程序。对我来说,这是一个现实的场景,我必须解决这个问题,因此也请教了一下优锐课老师,得到了很多帮助。也希望当你遇到类似问题时,能为你提供一些有用的信息。

让我们看看从头开始一个项目时可能会遇到的一些常见问题。

Spring Boot启动方法

使用Spring Boot的主要优点之一是可以使用内置的嵌入式Tomcat轻松设置Web应用程序。默认情况下,自动配置器使用Tomcat设置你的项目。你只需点击运行按钮,你的Web服务器就会启动你的应用程序。在application.yaml或属性文件中,你可以像下面这样轻松地配置此Tomcat服务器:

 server:
port: 9091 //set the port number of our running application
servlet:
context-path: /springapplication /set the context path of our application

要运行我们的应用程序,我们只需要一个主方法:

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

外部Tomcat的问题

可以期望应用程序在外部Tomcat服务器上运行。通常,它的发生是由于运营基础架构。此时,出现了一些问题。你的Spring Boot应用程序不会仅仅通过将其部署到网络服务器来启动。有以下几个原因:

  • 默认情况下,Spring Boot创建一个.jar文件作为输出。Tomcat需要一个.war文件。
  • 在Tomcat环境中,你不想使用嵌入式服务器。
  • Tomcat服务器不会使用你的主要方法。因此,你需要以普通的Spring应用程序启动你的应用程序。

Spring Boot是一项尖端技术,主要支持在容器化环境中运行。如果你想以标准方式操作应用程序,该怎么办?

首先,你可以返回通常不想要的本机Spring。其次,你可以进行一些修改,以使你的应用程序准备在老式Tomcat服务器上运行。 所以,我会告诉你如何。

使用外部Tomcat运行Spring Boot

首先,你需要在pom.xml中进行一些修改:

为artifact设置war packaging:

 <packaging>war</packaging>

设置Tomcat服务器依赖项以提供:

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

如果你的某些Spring Boot库默认包含它,请排除它:

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

最后,这就是窍门:修改应用程序的默认类:

 @SpringBootApplication
public class App extends SpringBootServletInitializer
{
public static void main( String[] args )
{
SpringApplication.run(App.class, args);
}
}

SpringBootServerInitializer类执行以下操作(从原始类头中获取):

  * An opinionated {@link WebApplicationInitializer} to run a {@link SpringApplication} from a traditional WAR deployment. Binds {@link Servlet}, {@link Filter} and {@link ServletContextInitializer} beans from the application context to the server.
* To configure the application either override the {@link #configure(SpringApplicationBuilder)} method (calling {@link SpringApplicationBuilder#sources(Class...)}) or make the initializer itself a {@code @Configuration}. If you are using {@link SpringBootServletInitializer} in combination with other {@link WebApplicationInitializer WebApplicationInitializers} you might also want to add an {@code @Ordered} annotation to configure a specific startup order.
* Note that a WebApplicationInitializer is only needed if you are building a war file and deploying it. If you prefer to run an embedded web server then you won't need this at all.

完成这些修改后,你将能够从传统的war部署中运行你的应用程序。

Tomcat上的Spring Boot App的外部配置

通常可以从IT部门可以轻松处理它的外部来源读取配置文件。

为此,你需要在主类中覆盖上述类中的configure方法。

在下面的示例中,我带来了一个实时示例。在这里,我需要从环境变量中读取配置路径。他们在Tomcat的服务器setenv.sh文件中进行设置。

 @Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
String configLocation = System.getProperty("global.appconf.dir"); //get the default config directory location
String configPath = configLocation + File.separator + "springApplication" + File.separator + "application.yml"; //set the configpath of this application instance exclusively
log.info("Configpath: " + configPath);
log.info("Starting to run Spring boot app...");
if(configLocation != null && !configLocation.isEmpty()) {
Properties props = new Properties();
props.setProperty("spring.config.location", configPath); //set the config file to use
application.application().setDefaultProperties(props);
}else{
log.info("No global.appconf.dir property found, starting with default on classpath");
}
return application.sources(SpringApplication.class);
}

请注意,在外部Tomcat上运行时,配置文件中服务器节点下的设置不会生效。这些属性仅影响嵌入式Tomcat。

带有外部Tomcat的Spring Boot的更多相关文章

  1. SpringBoot之外部Tomcat运行Spring Boot项目

    内置tomcat8.5.28 外置的要高于此版本才OK spring boot1.5是访问不了jsp页面的 以后要以2.0版本为主流的

  2. Tomcat部署spring boot项目

    Tomcat部署spring boot项目   需要在启动类做修改

  3. 阿里云服务器 配置 tomcat 发布spring boot项目 的具体操作 【使用公网ip】

    1.前言 spring boot 转成war包 后用tomcat发布的具体操作在我另一篇随笔有详细记载,不论是window系统还是Linux系统,tomcat的发布配置都是一样的,所以这里不具体讲这个 ...

  4. 【Tomcat】使用Tomcat部署Spring Boot项目生成的jar包

    介绍 简单来说,Tomcat是一个免费的,用于Java Web应用以及其它Web应用的一个Web服务器.(简单地概括一下,可能有误) 下载与安装 本文章目标是把Spring Boot Web项目生成的 ...

  5. docker在配置tomcat和spring boot远程调试

    服务器部署项目后又时可能与本地开发效果不一致,怎么实现远程调试配置? docker中怎么进行配置? docker中tomcat实现远程调试配置 1. 配置docker-compose.yml CATA ...

  6. Centos 7 redis、tomcat、Spring Boot添加开机自启服务

    一.redis添加开机自启 1.添加服务配置文件 [root@test system]# vim /etc/systemd/system/redis-server.service 2.服务配置文件内容 ...

  7. tomcat 启动Spring boot 项目

    SpringBoot 项目如何在tomcat容器中运行 1.相关连接: https://blog.csdn.net/u010598360/article/details/78789197/ 2.修改打 ...

  8. Spring Boot 实用MyBatis做数据库操作

    前言: 本项目基于maven构建,使用mybatis-spring-boot作为spring-boot项目的持久层框架 spring-boot中使用mybatis持久层框架与原spring项目使用方式 ...

  9. spring boot 打包war后 部署到外部 tomcat 的具体正确操作【包括修改端口 与 去除请求路径的工程名】

    1.前言 工程做好了,总不能放在idea运行吧?不然怎么把项目放到云服务器呢?[这一篇随笔不讲解发布的云服务器的操作,在其他随笔有详细记载.] 解决的方案是把springboot 工程 打包成war文 ...

随机推荐

  1. 解决 vs 出现Error MC3000 给定编码中的字符无效

    在 xaml 写中文注释,发现编译失败 Error MC3000 给定编码中的字符无效 我的 xaml 写了一句代码 <Grid> <!--林德熙--> </Grid&g ...

  2. 推荐几个web前端比较实用的网站

    第一次写博客,说实在的有点紧张和兴奋,哈哈哈哈,本人工作了有两年的时间,平时也有做笔记的习惯,但是都做得乱七八糟的,所以就想通过写博客来记录.好了,废话不多说了,先来几个觉得在工作中使用到的,还不错的 ...

  3. 【t079】火星上的加法运算

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 最近欢欢看到一本有关火星的书籍,其中她被一个加法运算所困惑,由于她的运算水平有限,想向你求助,作为一名 ...

  4. HDU 1864 01背包、

    这题题意有点坑阿.感觉特别模糊. 我开始有一点没理解清楚.就是报销的话是整张整张支票报销的.也是我傻逼了 没一点常识 还有一点就是说单张支票总额不超过1000,每张支票中单类总额不超过600,我开始以 ...

  5. 在 CentOS 7.3 上安装 nginx 服务为例,说明在 Linux 实例中如何检查 TCP 80 端口是否正常工作

    CentOS 7.3 这部分以在 CentOS 7.3 上安装 nginx 服务为例,说明在 Linux 实例中如何检查 TCP 80 端口是否正常工作. 登录 ECS 管理控制台,确认实例所在安全组 ...

  6. MySQL存储引擎MyISAM与InnoDB区别

    简单的表达.  MyISAM 是非事务的存储引擎.  innodb是支持事务的存储引擎.    innodb的引擎比较适合于插入和更新操作比较多的应用  而MyISAM 则适合用于频繁查询的应用    ...

  7. hdu 2639 Bone Collector II(01背包 第K大价值)

    Bone Collector II Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  8. springboot jpa 解决延迟加载问题

    在springboot中,在application.properties的配置文件中新增spring.jpa.open-in-view=true方法失效,经过测试,有两种解决办法: 1.在applic ...

  9. Java日志框架——JCL

    JCL,全称为"Jakarta Commons Logging",也可称为"Apache Commons Logging". 一.JCL原理 1.基本原理 JC ...

  10. java Set接口(元素不可以重复)

    Set是Collection子接口: Set和Collection基本上一样,一点除外: Set无法记住添加的顺序,不允许包含重复的元素. 当试图添加两个相同元素进Set集合,添加操作失败,add() ...