springboot项目发布到独立的tomcat中运行&打成jar包运行

时间:2023-02-21 18:38:05

springboot的打包方式依赖于插件:(下面插件打出的包与普通的包目录结构有区别)

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

===================发布到独立的Tomcat运行============

 在开发阶段我们推荐使用内嵌的tomcat进行开发,因为这样会方便很多,但是到生成环境,我希望在独立的tomcat容器中运行,因为我们需要对tomcat做额外的优化,这时我们需要将工程打包成war包发进行发布。

1. 工程的打包方式为war

springboot项目发布到独立的tomcat中运行&打成jar包运行

2. 将spring-boot-starter-tomcat的范围设置为provided

设置为provided是在打包时会将该包排除,因为要放到独立的tomcat中运行,是不需要的。

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

发现原来项目中没有配置上面配置,因为我们配置了Springboot,具有依赖传递,因此自动加上上面的配置,我们需要手动配上覆盖依赖传递的配置:

3. 修改代码,设置启动配置

需要继承SpringBootServletInitializer,然后重写configure,将Spring Boot的入口类设置进去。

package cn.qlq.config;

import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource; import com.jolbox.bonecp.BoneCPDataSource; /**
* 发布到独立的Tomcat需要继承SpringBootServletInitializer类并重写configure方法
*/
@Configuration // 通过该注解来表明该类是一个Spring的配置,相当于一个xml文件
@ComponentScan(basePackages = "cn.qlq") // 配置扫描包
@PropertySource(value = { "classpath:db.properties" }, ignoreResourceNotFound = true)
public class SpringConfig extends SpringBootServletInitializer { @Value("${jdbc.url}")
private String jdbcUrl; @Value("${jdbc.driverClassName}")
private String jdbcDriverClassName; @Value("${jdbc.username}")
private String jdbcUsername; @Value("${jdbc.password}")
private String jdbcPassword; @Bean(destroyMethod = "close")
public DataSource dataSource() {
BoneCPDataSource boneCPDataSource = new BoneCPDataSource();
// 数据库驱动
boneCPDataSource.setDriverClass(jdbcDriverClassName);
// 相应驱动的jdbcUrl
boneCPDataSource.setJdbcUrl(jdbcUrl);
// 数据库的用户名
boneCPDataSource.setUsername(jdbcUsername);
// 数据库的密码
boneCPDataSource.setPassword(jdbcPassword);
// 检查数据库连接池中空闲连接的间隔时间,单位是分,默认值:240,如果要取消则设置为0
boneCPDataSource.setIdleConnectionTestPeriodInMinutes(60);
// 连接池中未使用的链接最大存活时间,单位是分,默认值:60,如果要永远存活设置为0
boneCPDataSource.setIdleMaxAgeInMinutes(30);
// 每个分区最大的连接数
boneCPDataSource.setMaxConnectionsPerPartition(100);
// 每个分区最小的连接数
boneCPDataSource.setMinConnectionsPerPartition(5);
return boneCPDataSource;
} @Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
// 设置启动类,用于独立tomcat运行的入口
return builder.sources(SpringConfig.class);
} }

4.打war包:

springboot项目发布到独立的tomcat中运行&打成jar包运行

打包成功:

springboot项目发布到独立的tomcat中运行&打成jar包运行

5. 部署到tomcat

  • 第一种:将此项目作为默认项目的部署方式

(1)将war包解压到webapps下的ROOT目录中(将原来的ROOT文件夹下面的东西删除掉),启动:

springboot项目发布到独立的tomcat中运行&打成jar包运行

WEB-INF下面 没有web.xml

springboot项目发布到独立的tomcat中运行&打成jar包运行

   解释:上面解压后的文件没有web.xml,但是仍能启动。因为SpringConfig继承了SpringBootServletInitializer,所以打包的时候spring-boot做了一系列初始化工作(如上面的org文件夹)。

 (2)启动测试:

springboot项目发布到独立的tomcat中运行&打成jar包运行

  • 第二种:将此项目类似于普通的项目进行部署,访问需要加项目名称

(1)将打出的war包复制到Tomcat安装目录下的webapps目录下,并将war包重新命名为SSM.war,启动Tomcat(Tomcat启动的时候会自动扫描war包并解压)

springboot项目发布到独立的tomcat中运行&打成jar包运行

(2)启动测试:

springboot项目发布到独立的tomcat中运行&打成jar包运行

注意:

  springboot项目方式不支持用Eclipse的export导出为war包然后部署到tomcat,因为这种Eclipse的Export打出的war包没有带springboot所做的初始化工作。打包的东西如下:

springboot项目发布到独立的tomcat中运行&打成jar包运行

==============web项目打成jar包独立运行===============

  这种方式使用简单,只需要安装JDK环境即可使用。但是不利于tomcat的优化,而且一个项目对应一个内嵌的tomcat。

1.工程打包方式改为jar包

springboot项目发布到独立的tomcat中运行&打成jar包运行

2. 将spring-boot-starter-tomcat的范围设置为默认值compile

springboot项目发布到独立的tomcat中运行&打成jar包运行

3.使用clean package命令打成jar包

springboot项目发布到独立的tomcat中运行&打成jar包运行

springboot项目发布到独立的tomcat中运行&打成jar包运行

4.采用java -jar的方式启动测试:(这种方式启动是不作为守护进程,窗口关闭即关掉此JVM)

java -jar ./springboot-ssm-0.0.1-SNAPSHOT.jar

测试:

springboot项目发布到独立的tomcat中运行&打成jar包运行

补充:如果是IDEA中运行项目需要去掉provided,原因是

  这可能是Intellij的一个bug,在使用spring-boot的时候,如果把某个引入的依赖设置为provided,那么在Intellij启动时就会找不到相应的类。因此,此时需要把此项配置给注释掉,但是打包上线的时候并不需要这些依赖,那么在打包的时候就把注释打开,即可。

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

springboot项目发布到独立的tomcat中运行&打成jar包运行的更多相关文章

  1. springboot整合JSP以及发布项目到独立的tomcat中与打成jar包使用

    之前研究了springboot整合freemarker与thymeleaf的使用.也研究了springboot发布到独立的tomcat的使用以及使用自带的tomcat打成jar包的使用,下面研究集成J ...

  2. 将springboot项目发布到独立的tomcat中运行

    在开发阶段我们推荐使用内嵌的tomcat进行开发,因为这样会方便很多,但是到生成环境,我希望在独立的tomcat容器中运行,因为我们需要对tomcat做额外的优化,这时我们需要将工程打包成war包发进 ...

  3. nginx中部署前端,后端打成jar包运行

    项目是前后端分离:前端用vue开发,后端用的是springboot开发 会产生跨域问题,故在前端里用了代理 1.本前端项目是用vue开发: 1.1打包:终端 vscode快捷键:crtl+~  然后n ...

  4. SpringBoot发布到独立的tomcat中运行

    在此文基础上 Eclipse下利用Maven创建SpringBoot的Restful风格程序 spring-boot默认提供内嵌的tomcat,所以打包直接生成jar包,用java -jar命令就可以 ...

  5. Springboot项目打成jar包运行 和 打成war包 外部tomcat运行

    Jar打包方式运行 类型为jar时 <packaging>jar</packaging> 1.使用命令mvn clean  package 打包 2.使用java –jar 包 ...

  6. Intellij IDEA在maven项目中添加外部Jar包运行

    一. 问题概述 我们知道Intellij IDEA是非常好用的Java语言开发的集成环境.提供了非常多实用的功能,包括了智能代码助手.代码自动提示.代码重构.各种插件等,当然也集成了maven 正常情 ...

  7. 将springboot项目部署到服务器的tomcat中无法访问

    第一步:让启动类继承SpringBootServletInitializer,并重写configure方法,关键代码如下 @SpringBootApplication public class MyS ...

  8. springboot项目部署到独立tomcat的爬坑集锦

    目录 集锦一:普通的springboot项目直接部署jar包 集锦二:springboot项目不能直接打war包部署 集锦三:因为tomcat版本问题导致的lombok插件报错:Invalid byt ...

  9. Jenkins 集成Maven打包SpringBoot项目并自动部署到Tomcat服务器

    提前条件: 1.在Jenkins服务器上安装Git.JDK和Maven 2.准备另一台服务器并安装Tomcat 3.Gitlab服务器 4.Gitlab仓库中上传SpringBoot项目代码 第一步, ...

随机推荐

  1. 大熊君学习html5系列之------Online &amp&semi;&amp&semi; Offline(在线状态检测)

    一,开篇分析 Hi,大家好,给大家拜个晚年!大熊君又和大家见面了,(*^__^*) 嘻嘻……,这系列文章主要是学习Html5相关的知识点,以学习API知识点为入口,由浅入深的引入实例,让大家一步一步的 ...

  2. Base64加密与MD5的区别?

    MD5是一种不可逆的摘要算法.而Base64是一种编码方式,主要用于将二进制数据转换为文本数据,方便使用HTTP协议等,是可逆的.无论多少二进制数据,在MD5算法一定的情况下,都会变成一个定长的数据, ...

  3. 淘宝TFS分布式文件系统内部实现

    TFS文件名的结构 TFS的文件名由块号和文件号通过某种对应关系组成,最大长度为18字节.文件名固定以T开始,第二字节为该集群的编号(可以在配置项中指定,取值范围 1~9).余下的字节由Block I ...

  4. c&sol;c&plus;&plus; 关于swap的不同写法

    利用模板 template<typename T>inline void swap(T& a, T& b){ T tmp = a; a = b; b = tmp; } 利用 ...

  5. 学习vim命令:&OpenCurlyDoubleQuote;&colon;w &excl;sudo tee &percnt;”

    学习vim命令:“:w !sudo tee %” Original URL:http://www.haw-haw.org/node/1501 原文来自于commandlinefu 原文是这样解释这个命 ...

  6. sharepoint 中用自带的download&period;aspx实现文件的下载,中文文件名编码的问题

    ]中的路径绑定的是下载路径,用到了sharepoint中自带的download.aspx下载页面,只要将文件的URL赋值给sourceurl即可,但是我前台用的是<a>标签的href来导向 ...

  7. js 写日期

    <SCRIPT language="JavaScript" type="text/JavaScript">   today = new Date() ...

  8. Linux常用命令&lpar;精选&rpar;

    chmod -R 777 文件夹名       // -R表示递归给文件及文件夹内文件更改权限,r(4),w(2),x(1),chmod -a+rwx / chmod -u+w -g+r -o +x ...

  9. HUD 1024 Max Sum Plus Plus (滚动数组)

    题意:从一个序列中选出分成不交叉的m段 的最大和 解析 : 题目中 1 <= n <=1000000 所以二维数组是不能用了  所以 要想到简化为一维 dp[i][j]表示以i结尾的前i个 ...

  10. ATM--代码

    //信1705-2 张小军 20173662 import java.io.*; import java.util.ArrayList; import java.util.Scanner;public ...