学习笔记:JavaEE开发的颠覆者SpringBoot实战(十)开发部署与测试

一 开发的热部署

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
    }

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章