一 开发的热部署
1 模板热部署
在spring boot里,模板引擎的页面默认是开启缓存的,如果修改了页面的内容,则刷新页面是得不到修改后的内容,故需在配置中关闭模板引擎的缓存。
Thymeleaf
spring.thymeleaf.cache=false
FreeMarker
spring.freemarker.cache=false
Groovy
spring.groovy.cache=false
Velocity
spring.velocity.cache=false
2.Spring Loaded
3.JRebel
4. spring-boot-devtools
4.1 pom.xml配置文件
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork> <!-- 如果没有该配置,devtools不会生效 -->
</configuration>
</plugin>
4.2 yml配置
spring:
devtools:
livereload:
enabled: true #是否支持livereload
port: 35729
restart:
enabled: true #是否支持热部署
4.3 IDEA配置
File-Settings-Compiler-Build project automatically
4.4.安装livereload插件
下载livereload插件,将其安装到chrome扩展程序中,并选中允许访问文件网址。
![]()
4.5.测试
(1)修改类 应用会重启
(2)修改配置文件 应用会重启
(3)修改静态文件(html、css等),应用不会重启,但是会调用livereload,浏览器会自动刷新,显示最新的修改内容。
二 常规部署
1. jar形式
1.1 打包
mvn pakage
1.2 运行
java -jar xx.jar
1.3 注册为Linux的服务
2. war形式
2.1 修改pom.xml文件
<!--修改打包方式为war-->
<packaging>war</packaging>
<!--移除内嵌的tomcat-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
2.2 添加ServletInitializer类,或者直接在启动类上修改
@SpringBootApplication
public class ServletInitializerApp extends SpringBootServletInitializer{
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder){
return builder.sources(ServletInitializerApp.class)
}
public static void main(String[] args){
SpringApplication.run(ServletInitializerApp.class,args);
}
}
3.云部署--基于Docker的部署
主流的云计算(PAAS)平台都支持发布Docker镜像。Docker是使用Dockerfile文件来编译自己的镜像的。
3.1 DockerFile
主要指令:
FROM指令:指明了当前镜像继承的基镜像。编译当前镜像时会自动下载基镜像。
FROM ubuntu
FROM java:8
MAINTAINER指令:指明了当前镜像的作者。
MAINTAINER shenhaiming
RUN指令:可以在当前镜像上执行Linux命令并形成一个新的层。RUN是编译时(build)的动作/
RUN /bin/bash -c "echo helloworld"
或
RUN {"/bin/bash","-c"."echo hello"}
CMD指令:指明了启动镜像容器时的默认行为。一个Dockerfile里只能有一个CMD指令。CMD指令里设定的命令可以在运行镜像时使用参数覆盖。CMD是运行时(run)的动作。
CMD echo "this is a test"
可被以下命令覆盖
docker run -d image_name echo "this ia a test"
EXPOSE指令:指明了镜像运行时的容器必须监听指定的端口。
EXPOSE 8080
ADD指令:是从当前工作目录复制文件到镜像目录中去。
ADD test.txt /mydir/
ENTRYPOINT指令:可让容器像一个可执行程序一样运行,这样镜像运行时可以像软件一样接收参数执行。ENTRYPOINT是运行时(run)的动作。
ENTRYPOINT ["/bin/echo"]
3.2 安装Docker
安装
yum install docker
启动
systemctl start docker
systemctl enable docker
3.3 部署
3.3.1 Dockerfile文件
将jar(ch10docker-0.0.1-SNAPSHOT.jar)放到目录/var/apps/ch10docker下,在同级目录下新建一个Dockerfile文件。
FROM java:8 #基镜像为java,标签(版本)为8
MAINTAINER shm #作者为shm
ADD ch10docker-0.0.1-SNAPSHOT.jar app.jar #将jar包添加到镜像,并重命名为app.jar
EXPOSE 8080 #运行镜像的容器,监听8080端口
ENTRYPOINT ["java","-jar","/app.jar"] #启动时运行 java -jar app.jar
3.3.2 编译镜像
在/var/apps/ch10docker目录下,执行命令
docker build -t wisely/ch10docker .
wisely/ch10docker 为镜像名称,我们设置wisely作为前缀,这也是Docker镜像的一种命名习惯。
"." 这是用来指明dockerfile路径的,其表示当前路径
使用docker images命令查看本地镜像
3.3.3 运行
docker run -d --name ch10 -p 8080:8080 wisely/ch10docker
运行后可用使用命令docker ps 查看当前容器状态
4. springboot的测试
依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
测试类:
@RunWith(SpringRunner.class)
@SpringBootTest
public class DemoTest{
@Test
public void methods(){
//do something
}
}