一 開發的熱部署
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
}
}