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

开发热部署

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值