带有外部Tomcat的Spring Boot
在本文中,我将如何在外部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的更多相关文章
- SpringBoot之外部Tomcat运行Spring Boot项目
内置tomcat8.5.28 外置的要高于此版本才OK spring boot1.5是访问不了jsp页面的 以后要以2.0版本为主流的
- Tomcat部署spring boot项目
Tomcat部署spring boot项目 需要在启动类做修改
- 阿里云服务器 配置 tomcat 发布spring boot项目 的具体操作 【使用公网ip】
1.前言 spring boot 转成war包 后用tomcat发布的具体操作在我另一篇随笔有详细记载,不论是window系统还是Linux系统,tomcat的发布配置都是一样的,所以这里不具体讲这个 ...
- 【Tomcat】使用Tomcat部署Spring Boot项目生成的jar包
介绍 简单来说,Tomcat是一个免费的,用于Java Web应用以及其它Web应用的一个Web服务器.(简单地概括一下,可能有误) 下载与安装 本文章目标是把Spring Boot Web项目生成的 ...
- docker在配置tomcat和spring boot远程调试
服务器部署项目后又时可能与本地开发效果不一致,怎么实现远程调试配置? docker中怎么进行配置? docker中tomcat实现远程调试配置 1. 配置docker-compose.yml CATA ...
- Centos 7 redis、tomcat、Spring Boot添加开机自启服务
一.redis添加开机自启 1.添加服务配置文件 [root@test system]# vim /etc/systemd/system/redis-server.service 2.服务配置文件内容 ...
- tomcat 启动Spring boot 项目
SpringBoot 项目如何在tomcat容器中运行 1.相关连接: https://blog.csdn.net/u010598360/article/details/78789197/ 2.修改打 ...
- Spring Boot 实用MyBatis做数据库操作
前言: 本项目基于maven构建,使用mybatis-spring-boot作为spring-boot项目的持久层框架 spring-boot中使用mybatis持久层框架与原spring项目使用方式 ...
- spring boot 打包war后 部署到外部 tomcat 的具体正确操作【包括修改端口 与 去除请求路径的工程名】
1.前言 工程做好了,总不能放在idea运行吧?不然怎么把项目放到云服务器呢?[这一篇随笔不讲解发布的云服务器的操作,在其他随笔有详细记载.] 解决的方案是把springboot 工程 打包成war文 ...
随机推荐
- 解决 vs 出现Error MC3000 给定编码中的字符无效
在 xaml 写中文注释,发现编译失败 Error MC3000 给定编码中的字符无效 我的 xaml 写了一句代码 <Grid> <!--林德熙--> </Grid&g ...
- 推荐几个web前端比较实用的网站
第一次写博客,说实在的有点紧张和兴奋,哈哈哈哈,本人工作了有两年的时间,平时也有做笔记的习惯,但是都做得乱七八糟的,所以就想通过写博客来记录.好了,废话不多说了,先来几个觉得在工作中使用到的,还不错的 ...
- 【t079】火星上的加法运算
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 最近欢欢看到一本有关火星的书籍,其中她被一个加法运算所困惑,由于她的运算水平有限,想向你求助,作为一名 ...
- HDU 1864 01背包、
这题题意有点坑阿.感觉特别模糊. 我开始有一点没理解清楚.就是报销的话是整张整张支票报销的.也是我傻逼了 没一点常识 还有一点就是说单张支票总额不超过1000,每张支票中单类总额不超过600,我开始以 ...
- 在 CentOS 7.3 上安装 nginx 服务为例,说明在 Linux 实例中如何检查 TCP 80 端口是否正常工作
CentOS 7.3 这部分以在 CentOS 7.3 上安装 nginx 服务为例,说明在 Linux 实例中如何检查 TCP 80 端口是否正常工作. 登录 ECS 管理控制台,确认实例所在安全组 ...
- MySQL存储引擎MyISAM与InnoDB区别
简单的表达. MyISAM 是非事务的存储引擎. innodb是支持事务的存储引擎. innodb的引擎比较适合于插入和更新操作比较多的应用 而MyISAM 则适合用于频繁查询的应用 ...
- hdu 2639 Bone Collector II(01背包 第K大价值)
Bone Collector II Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- springboot jpa 解决延迟加载问题
在springboot中,在application.properties的配置文件中新增spring.jpa.open-in-view=true方法失效,经过测试,有两种解决办法: 1.在applic ...
- Java日志框架——JCL
JCL,全称为"Jakarta Commons Logging",也可称为"Apache Commons Logging". 一.JCL原理 1.基本原理 JC ...
- java Set接口(元素不可以重复)
Set是Collection子接口: Set和Collection基本上一样,一点除外: Set无法记住添加的顺序,不允许包含重复的元素. 当试图添加两个相同元素进Set集合,添加操作失败,add() ...