SpringBoot开发部署(热部署+常规部署+Docker部署)

news2024/10/11 1:39:14

开发热部署

SpringBoot模板引擎的页面默认是开启缓存的,如果修改了页面,则刷新页面是得不到修改后的页面的
在application.properties中关闭模板引擎缓存

  • Thymeleaf spring.thymeleaf.cache=false
  • FreeMarker spring.freemarker.cache=false
  • Groovy spring.groovy.template.cache=false
  • Velocity spring.velocity.cache=false

Spring Loaded实现修改类文件的热部署,下载Spring Loaded地址http://repo.spring.io/simple/libs-release-local/org/springframework/springloaded/1.2.3.ELEASE/springloaaded-1.2.3.RELEASE.jar
安装单击Run Config urations…
在Arguments标签的vm arguments填入springloaded的路径

在这里插入图片描述

-javaagent:E:\springloaded-1.2.3.RELEASE.jar -noverify

在这里插入图片描述

JRebel热部署工具(收费)

①、EclipseMarketPlace中进行检索JRebel并安装,重启即可完成安装

②、注册配置

SpringBoot增加JRebel功能:右键—JRebel—AddJRebel Nature
此时为我们添加一个rebel.xml用来配置热部署内容

JReble会对target/classes目录下的文件进行热部署

首次启动给会询问是否已JReble启动程序

Spring-boot-devtools

项目中添加spring-boot-devtools依赖,即可代码热部署

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

常规部署

jar形式

①、新建SpringBoot项目的时候选择打包方式是jar,使用mvn package

②、运行

java -jar xx.jar

③、注册为linux服务

修改spring-boot-maven-plugin

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

然后使用mvn package打包

主流的Linux使用init.d或systemd来注册服务,linux下运行的软件通常把它注册为服务,可以通过命令开启、关闭、以及保持开机启动等功能

Ⅰ、通过SSH将jar上传到/var/apps下

Ⅱ、安装JDK,rpm -ivh jdk-8u51-linux-x64.rpm

Ⅲ、基于Linux的init.d部署(servciename为自定义的服务名)

sudo ln -s /var/apps/xxx.jar /etc/init.d/servicename

Ⅳ、通过命令操作

servic servicename start 启动服务
service servicename stop 停止服务
service servicename status 服务状态
chkconfig servicename on 开机启动

项目日志存放于/var/log/servicename.log下,用cat或tail等命令查看

Ⅴ、基于linux的Systemd部署

在/etc/systemd/system/目录下新建文件servicename.service,内容如下

[Unit]
Description=servicename
After=syslog.target

[Service]
ExecStart= /usr/bin/java -jar /var/apps/xxx.jar

[Install]
WantedBy=multi-user.target

实际使用中修改Description和ExecStart后面的内容

# 启动服务
systemctl start servicename
#或
systemctl start servicename.service

# 停止服务
systemctl stop servicename
#或
systemctl stop servicename.service

# 服务状态
systemctl status servicename
#或
systemctl status servicename.service

# 开机启动
systemctl enable servicename
#或
systemctl enable servicename.service

# 项目日志
journalctl -u servicename
#或
journalctl -u servicename.service

war形式

打包之后,放在Servlet容器上执行

打包为jar,部署想要用war形式部署

①、修改pom.xml中

<packaging>jar</packing>

<!--修改为-->
<packaging>war</packing>

②、增加下面依赖覆盖默认内嵌的Tomcat

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

③、增加ServletInitializer类

public class ServeltInitializer extends SpringBootServletInitializer{
	
	@Override
	protected SpringApplicationBuilder configure(SpringApplicationBuilder application){
		return application.sources(Ch10warApplication.class);
	}
}

基于docker的云部署

DockerFile主要以下指令

FROM ubutu #指明当前镜像的基础镜像

MAINTAINER wyf #指明当前镜像的作者

#在当前镜像上执行Linux命令,并形成一个新的层,RUN是编译时的动作
RUN /bin/bash -c "echo helloworld"
RUN ["/bin/bash","-c","echo hello"]

CMD echo "this is a test" #指明了启动镜像容器时的默认行为
docker run -d image_name echo "this is not a test" #可以覆盖上面的

EXPOSE 8080 #指明了镜像运行时的容器必需监听指定的端口

# 设置环境变量
ENV myName=wyf
ENV myName wyf

ADD test.txt /mydir/ #从当前工作目录复制文件到镜像目录中

# 可以向容器像一个可执行程序一样运行,这样镜像运行时可以像软件一样接收参数执行
ENTRYPOINT ["/bin/echo"] #时运行时(run)的动作
docker run -d image_name "this is not a test"
yum install docker #安装Docker

systemctl start docker
systemctl enable docker #启动Docker并保持开机自启

①、将打包好的jar放入/var/apps/ch10docker目录下,在同级目录下新建一个Dockerfile文件

FROM java:8 #基础镜像
MAINTAINER wyf #作者
 
ADD ch10docker.jar app.jar #将我们的jar添加到镜像中,并重命名app.jar
EXPOSE 8080 #运行镜像的容器,监听8080端口
ENTRYPOINT ["java","-jar","/app.jar"] #启动时运行java -jar app.jar

②、编译镜像

在/var/apps/ch10docker目录下执行下面命令,执行编译镜像

docker build -t wisely/ch10docker .

wisely/ch10docker为镜像名称,设置wisely为前缀(Docker镜像命名习惯)
最后的“.”指明Dockerfile路径,标识当前路径下

查看本地镜像 docker images

③、运行

docker run -d --name ch10 -p 8080:8080 wisely/ch10docker

docker ps 查看当前容器状态

访问当前ip下的8080端口即可

将微服务模块config以Docker进行部署

①、runboot.sh脚本

位于src/main/docker下,根据启动顺序调整sleep的时间

sleep 10
java -Djava.security.egd=file:/dev/./urandom -jar /app/app.jar

②、Dockerfile编写

src/main/docker下

FROM java:8
VOLUME /tmp
RUN mkdir /app
ADD xxx.jar /app/app.jar #不同的微服务模块,只需修改此处
ADD runboot.sh /app/
RUN bash -c 'touch /app/app.jar'
WORKDIR /app
RUN chmod a+x runboot.sh
EXPOSE 8888  #不同的微服务模块,只需修改此处
CMD /app/runboot.sh

③、Docker的maven插件

在开发机器编译Docker镜像到服务器,使用docker-maven-plugin即可
在所有程序pom.xml内添加

<build>
	<plugins>
		<plugin>
			<groupId>com.spotify</groupId>
			<artifactId>docker-maven-plugin</artifactId>
			<configuration>
				<imageName>${project.name}:${project.version}</imageName>
				<dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
				<skipDockerBuild>false</skipDockerBuild>
				<resources>
					<resource>
						<directory>${project.build.directory}</directory>
						<include>${project.build.finalName}</include>
					</resource>
				</resources>
			</configuration>
		</plugin>
	</plugins>
</build>

④、编译镜像

使用docker-maven-plugin,默认将Docker编译到localhost
如果是远程Linux服务器,请在环境变量中配置DOCKERHOST,值为tcp://192.168.1.68:2375

在控制台CMD下:mvn clean package docker:build -DskipTests
查看Linux服务器上的镜像docker images

Docker Compose

用来定义和运行多容器应用的工具
使用docker-compose.yml来描述多容器的定义,docker-compose up 运行整个应用

①、Docker-compose.yml编写

enviromment 给容器使用的变量,在容器中使用${}来调用
links 当前容器依赖的容器,可直接使用依赖容器的已有端口
ports 将我们需要暴露的端口映射出来,不需要暴露的端口则不做映射

postgresdb:
	image: busybox
	volumes:
		- /var/lib/postgresql/data
postgres:
	name: postgres
	image: postgres
	hostname: postgres
	volumes_from:
		- postgresdb
		ports:
			- "5432:5432"
	environment:
		- POSTGRES_USER=postgres
		- POSTGRES_PASSWORD=postgres
discovery:
	image: "discovery:1.0.0-SNAPSHOT"
	hostname: discovery
	name: discovery
	ports:
		- "8761:8761"
config:
	image: "config:1.0.0-SNAPSHOT"
	hostname: config
	name: config
	links:
		- discovery
	environment:
		EUREKA_HOST: discovery
		EUREKA_PORT: 8761
	ports:
		- "8888:8888"
person:
	image: person:1.0.0-SNAPSHOT
	hostname: person
	links:
		- discovery
		- config
		- postgres
	environment:
		EUREKA_HOST: doscovery
		EUREKA_PORT: 8761
		SPRING_PROFILES_ACTIVE: docker
	ports:
		- "8082:8082"
some:
	image: some:1.0.0-SNAPSHOT
	hostname: some
	links:
		- discovery
		- config
	environment:
		EUREKA_HOST: discovery
		EUREKA_PORT :8761
		SPRING_PORFILES_ACTIVE: docker
	ports:
		- "8083:8083"
ui:
	image: ui:1.0.0-SNAPSHOT
	hostname: ui
	links:
		- discovery
		- config
		- person
		- some
	enviromnent:
		EUREKA_HOST: discovery
		EUREKA_PORT: 8761
		SPRING_PROFILES_ACBIVE: docker
	ports:
		- "80:80"
monitor:
	image: monitor:1.0.0-SNAPSHOT
	hostname: monitor
	links:
		- discovery
		- config
		- person
		- some
		- ui
	environment:
		EUREKA_HOST: discovery
		EUREKA_PORT: 8761
		SPRING_PROFILES_ACTIVE: docker
	ports:
		- "8989:8989"

②、运行

将docker-compose.yml上传到Linux服务器上,在文件当前目录执行 docker-compose up -d

-d 表示后台运行

这样就可以在本地访问http:192.168.1.68:8761和http:192.168.1.68:8761

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2203802.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android -- [SelfView] 自定义多色渐变背景板

Android – 自定义多色渐变背景板 前言&#xff1a; Android 自带的 xml 文件内 gradient 设置渐变最多只有三种颜色&#xff0c;使用方便但范围受限&#xff0c;不能很好满足各种需求&#xff1b; 本款多色渐变背景板应运而生&#xff1a;* 1. 支持圆角模式&#xff0c;矩形模…

同望OA tooneAssistantAttachement.jsp 任意文件读取漏洞复现

0x01 产品简介 同望OA,即同望科技打造的智企云协同管理系统,是一款高效的企业协同移动办公系统。秉承“互联网++企业管理”理念,定位于以移动互联办公为基础的企业协同管理软件平台。它旨在通过内置常用标准模块与专项管理模块应用,安全快速地打通管理与业务通道,实现管理…

微软最新 Office 办公软件2025下载 – Microsoft 365 正版优惠订阅

​ 以前 Office 365 是微软打造的「办公软件订阅」服务。订阅后&#xff0c;用户可以在多个平台使用Word、Excel、PowerPoint、OneDrive云存储网盘等正版办公应用。 微软希望这种订阅方式能够推广到更多的产品和用户&#xff0c;于是决定将 Office 365 升级为全新的「Microsoft…

【数据结构】6道经典链表面试题

目录 1.返回倒数第K个节点【链接】 ​代码实现 2.链表的回文结构【链接】 代码实现 3.相交链表【链接】 代码实现 4.判断链表中是否有环【链接】 代码实现 常见问题解析 5.寻找环的入口点【链接】 代码实现1 ​代码实现2 6.随机链表的复制【链接】 代码实现 1.…

51单片机的无线通信智能车库门【proteus仿真+程序+报告+原理图+演示视频】

1、主要功能 该系统由AT89C51/STC89C52单片机LCD1602显示模块红外传感器光照传感器时钟模块步进电机蓝牙按键、LED、蜂鸣器等模块构成。适用于智能车库自动门、无线控制车库门等相似项目。 可实现功能: 1、LCD1602实时显示北京时间和自动/手动模式&#xff0c;以及验证是否成…

盘点2024年双十一最值得入手的好物,双十一购物清单宝藏好物推荐

随着2024年双十一购物节的脚步逐渐临近&#xff0c;消费者们正摩拳擦掌&#xff0c;准备迎接这场年度最大的购物狂欢。在这个特别的日子里&#xff0c;各大品牌纷纷推出前所未有的优惠活动&#xff0c;各种好物琳琅满目&#xff0c;让人眼花缭乱&#xff0c;为了帮助大家在这海…

机器学习、深度学习评价指标汇总:TP、TN、FP、FN、AP、mAP、IoU、mAP@3、Prec@10、 Acc@10

系列文章目录 文章目录 系列文章目录一、真正例&#xff08;True Positive&#xff09;、假正例&#xff08;False Positive&#xff09;、真负例&#xff08;True Negative&#xff09;和假负例&#xff08;False Negative&#xff09;是评估分类模型性能的重要概念。1. 定义2…

基于多种机器学习的酒店客户流失预测模型的研究与实现

文章目录 有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主项目介绍实现过程 有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主 项目介绍 项目背景&#xff1a; 在当今竞争激烈的酒店行业中&#xff0c;预测和防止客户流…

什么是PCB和PCBA,他们的区别是什么?

相信很多人对于PCB电路板并不陌生&#xff0c;可能是日常生活中也能经常听到&#xff0c;但对PCBA或许就不太了解&#xff0c;甚至把和PCB混淆起来。那么PCB是什么&#xff1f;PCBA是如何演变出来的&#xff1f;PCB与PCBA的区别又是什么呢&#xff1f;方案商如何高效找到供应商…

Ubuntu 22.04.4 LTS更换下载源

方法1&#xff1a;使用图形界面更换下载源 1. 打开软件和更新应用 2. 在Ubuntu 软件标签中&#xff0c;点击“下载自”旁边的下拉菜单&#xff0c;选择“其他” 3. 点击“选择最佳服务器”来自动选择最快的服务器 4. 选择服务器 5. 确定并关闭窗口&#xff0c;系统会提示您重新…

应变计的校准方法和周期是怎样的?

应变计的校准方法和周期应变计是用于测量物体应变的关键设备&#xff0c;广泛应用于工程测试和科学研究领域。正确的校准方法和合理的校准周期对于确保应变计测量结果的准确性至关重要。校准方法应变计的方法通常涉及以下几个步骤&#xff1a; 零点校准&#xff1a;这是校准过程…

跨界的胜利:机器学习与神经网络的物理之光

近日&#xff0c;2024年诺贝尔物理学奖颁发给了机器学习与神经网络领域的研究者&#xff0c;这是历史上首次出现这样的情况。这项奖项原本只授予对自然现象和物质的物理学研究作出重大贡献的科学家&#xff0c;如今却将全球范围内对机器学习和神经网络的研究和开发作为了一种能…

Robust多模态模型的开发

本文所涉及所有资源均在 传知代码平台 可获取。 目录 Robust 多模态模型&#xff1a;寻找遗失的模态&#xff01; 一、研究背景 二、模型结构和代码 三、数据集介绍 六、性能展示 六、实现过程 七、运行过程 Robust 多模态模型&#xff1a;寻找遗失的模态&#xff01; 近年来&a…

MPLS LDP协议

文章目录 LDP标签分发协议工作原理LDP应用倒数第二跳弹出 LDP标签分发协议 基于FEC自动分配标签构建LSP用于建立动态LSPLDP报文头部结构信息类型 工作原理 LDP工作过程 发送Hello消息用于发现邻居&#xff1b;UDP发送LSR_1主动发起并建立TCP连接&#xff1b;TCP进行建立主动方发…

Node.js安装与配置 [详细步骤(实践操作)]

安装与配置 安装Node.js一、(1).下载&#xff08;可以直接在浏览器下的电脑&#xff09;一、(2).下载&#xff08;有些电脑不能在浏览器下载&#xff0c;比如&#xff1a;在浏览器下出来的是IDEA图标&#xff09;二、安装三、配置环境变量 验证是否安装成功修改模块下载位置一、…

十几天8.7万粉丝,柒奶奶疯狂老太太图文笔记,为什么这么火?项目拆解!利用这个软件一键生成图文,赚钱到手软!

每个行业一有变化&#xff0c;那肯定会带来不少新机会&#xff0c;AI 绘画也是这样。就说小某书账号“人间清醒柒奶奶”吧&#xff0c;在有 AI 绘画之前&#xff0c;柒奶奶的角色和动作都得靠人用手画&#xff0c;可麻烦了。但现在呢&#xff0c;在网站上输入几个词儿就能轻轻松…

大贤3D家谱-保存、删除与重建

保存&#xff1a;对于创建的节点、内容进行本地存储。 重建&#xff1a;清除没有保存的数据&#xff0c;重现保存过的历史节点。 删除&#xff1a;删除包括该节点的所有子节点信息。 灵活的使用模式​ 为了保证软件的持续健康发展&#xff0c;我们采用了试用付费的模式。用…

微同城源码系统帮你轻松制作本地生活服务平台 带完整的安装代码包以及搭建部署教程

系统概述 微同城源码系统是一款基于Web技术开发而成的开源项目&#xff0c;旨在为广大用户提供一个灵活、高效且易于管理的本地生活服务平台构建工具。该系统采用了流行的前后端分离架构设计模式&#xff0c;前端部分利用React框架实现动态交互界面&#xff1b;后端则采用Spri…

什么是好的性能测试报告?

一、性能测试报告编写技巧 在对结果进行分析并得出结论之后&#xff0c;性能测试工程师要把它们以文字报告的形式发送给相关人员。这就是性能测试报告。除了书面文字之外&#xff0c;可能的话&#xff0c;公司还会召集人员开专门的会议进行报告讲解和结果分析。所以&#xff0…

redis同步解决 缓存击穿+缓存穿透 原理代码实现

缓存穿透 就是一个根本不存在的数据 请求过来&#xff0c;然后 发现缓存没有&#xff0c;就打到数据库&#xff0c;然后 数据库也没有&#xff0c;就会给数据库造成很大的压力 &#xff0c; 解决方案 就是老生常谈的 返回null值&#xff0c;或者布隆过滤器 我们说 返回nul…