SpringBoot(七)—— 热加载及打包部署

热部署不会用在生产环境,但对于程序员开发的效率,还是有一定帮助的,所谓的热部署,就是在应用程序在不停止的情况下,实现新的部署。我们在刚开始学习SSM框架的时候,自己手动配置Tomcat,也是可以直接进行热加载设置的,那么在SpringBoot中应该如何设置呢?


首先我们需要添加一个依赖,如下:

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

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


这里需要注意的是,如果我们在项目中集成了Thymeleaf模板或FreeMarker模板,那么则需要在配置文件中进行相关的设置

spring.thymeleaf.cache=false
spring.freemarker.cache=false



至此,如果我们使用的是Eclipse的话,那么就已经OK了,但是如果使用的是IDEA的话,那么我们还需要进行一些相关的设置,因为IDEA是没有保存修改的,也就是说在IDEA中并不会因为你 Ctrl + S 就重新编译代码。


在IDEA中,我们还需要在pom文件中,增加编译插件,让代码有变动的时候也编译
在这里插入图片描述

这样我们就可以在IDEA中手动的完成热加载了,为什么是手动热加载,因为这里我们在修改完代码后,按快捷键Ctrl+F9,手动构建项目,或者只修改单个类文件的话,按Ctrl+Shift+F9,重新编译该类文件,即可触发重启服务。


可能你会嫌弃这样过于麻烦,那么可以自动的进行热加载么?当然也是可以的,但是我们还需要在IDEA中进行一些设置,如下:
在这里插入图片描述


然后按快捷键Ctrl+Shift+Alt+/,选择1.Registry… ,勾选 compiler.automake.allow.when.app.running 即可。
在这里插入图片描述
在这里插入图片描述




最后我们再来简单来看一看项目打包部署的问题,如果我们想将一个项目打包进行部署,如果想达成jar包,首先我们需要在pom文件中新增相关配置,然后通过Maven进行打包即可

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>



但是如果你并不希望使用内置的tomcat,希望部署到其他Tomcat服务器,那么就需要使用war包部署了。那么我们首先需要在pom文件中修改打包的方式
在这里插入图片描述


然后我们最好在剔除内置tomcat的支持,以避免和外部的Tomcat冲突

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>
<!--
    scope值的作用范围:
        compile:默认值,适用于所有阶段,并且会随着项目直接发布
        provided:编译和测试阶段有效,并且在运行时由服务器提供
        runtime:运行时使用,对测试和运行有效,如jdbc
        test:只在测试时使用,在编译和运行时不起作用,不发项目不起作用
        system:不依赖maven仓库解析,需要提供依赖的显示路径,对项目的移植来说很不方便
-->

最后我们还需要修改SpringBoot的启动类,使其继承
org.springframework.boot.web.servlet.support.SpringBootServletInitializer,并重写configure方法
在这里插入图片描述

发布了286 篇原创文章 · 获赞 12 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/newbie0107/article/details/105421660