Spring Boot 专题系列五:Springboot +maven+thymeleaf项目热部署,打包发布配置

一、热部署

spring为开发者提供了一个名为spring-boot-devtools的模块来使Spring Boot应用支持热部署,提高开发者的开发效率,无需手动重启Spring Boot应用。

1.devtools的原理

深层原理是使用了两个ClassLoader,一个Classloader加载那些不会改变的类(第三方Jar包),另一个ClassLoader加载会更改的类,称为restart ClassLoader,这样在有代码更改的时候,原来的restart ClassLoader 被丢弃,重新创建一个restart ClassLoader,由于需要加载的类相比较少,所以实现了较快的重启时间。

2.Spring Boot+Maven+thymeleaf热部署配置过程
 2.1. application.properties文件中配置   spring.thymeleaf.cache=false 关闭页面缓存  页面修改后会立即生效
 2.2. 在xml中定义devtools(devtools监听classpath下的文件变动,并且会立即重启应用

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

3.在xml的maven-plugin中增加(保证devtools在主线程上不会被关闭)

<plugins>
	<plugin>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-maven-plugin</artifactId>
			<configuration>
				<!-- 增加fork 才允许热部署 ,fork 交叉-->
					<fork>true</fork>
			</configuration>
	</plugin>
</plugins>

4.修改idea的设置,如果是eclipse可省略

4.1 file->setting->build->complier->build project auto.... 勾选


4.2 ctrl+shift+alt+/ 输入registry -》确保 complier.automake.... 被勾选(默认就是选中的)


5.普通模式和DEBUG调试模式启动均可实现热部署

6.测试

6.1修改配置文件–>保存:系统会重启

6.2修改类–>保存:系统会重启


 

6.3 修改页面–>保存:系统不会重启,页面刷新,会重新加载(原理是将spring.thymeleaf.cache设为false)

二、打包

1.打jar包

利用maven自带的命令打包

1.1.利用 mvn package 打成jar

方法一:新建一个configuration ---maven ---package 运行

方法二:直接利用maven窗口的plugins --jar ---双击jar.jar即可


我们可以看出方法一打包比方法二的打包的文件大很多,因为方法一中下载了项目所有的依赖的jar

 

1.2.利用java -jar xxx.jar 启动应用(windows环境)


 

1.3.在同级目录下添加配置文件,应用生效

修改配置文件中的端口后重新运行命令,启动项目,配置生效,结果如下


 

1.4.在linux环境下运行jar 

后台运行:可以使用 Linux 的 nohup 命令,把进程挂起,后台执行

用法:

nohup java -jar xxx.jar >> xxx.log &

运行结果(这个数字是进程号): [1] 399

下面报了一个提示:$ nohup: ignoring input and redirecting stderr to stdout

这个影响不大,不用紧张,也可以加多一个 2>&1 就不会出现这个问题

用法:

nohup java -jar xxx.jar >> xxx.log & 2>&1 &

命令最后面的 & 符号是切换到后台去跑,退出终端也不会退出任务进程

运行这个命令之后呢,会输出一个进程号,类似上面的输出,可以使用 top 命令查看运行中的进程,也可以用 ps -aux 查看进程

TIPS:如果进程挂不起来,可能是端口被占用了,自行排查处理便可

 

1.5.在linux环境下终止jar 

终止程序:想要终止这个进程的话只能杀死这个进程,使用 kill 指令处理

$ kill -9 进程号

查看进程端口,如下

中止进程之后就看不到8001的端口了

1.6.使用tail -f xxx.log 监控日志文件

tail -f stdout.log //查看日志

2.打war包

spring boot 默认打jar包但也支持打war包

步骤如下:

2.1 package : jar -> war

2.2增加pom ,在打包的时候不去加载内嵌tomcat的jar

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-tomcat</artifactId>
   <scope>provided</scope>
   //provided 在编译时这个Jar存在,但在打包和运行时,不将jar放到运行环境中
   //complie   在编译、运行。发布的时候jar包都存在,这是一个默认是
   //runtime  运行时,在本地编译时不用这个jar,在运行发布的时候将其加载放置到运行环境中
</dependency>

2.3原有入口类的main方法实效

//SpringBootServletInitializer的作用就是在tomcat启动的时候,执行内置的configure方法,将其托管给Spring Boot
@SpringBootApplication
public class DeployApplication extends SpringBootServletInitializer{
		
       @Override
		protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
			System.out.println("War包启动");
			return builder.sources(DeployApplication.class);
		}

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

2.4 打包 和上面maven打包jar一样运行

2.5运行

war包得放在tomcat的webapp中运行

三、源码

github地址: https://github.com/bitree1/spring-boot-deploy

 

关注

如果有问题,请在下方评论

想获得更多的学习知识请关注微信公众号:西北码农或扫下方二维码


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值