一些springboot小技巧、小知識點
初始化資料
我們在做測試的時候經常需要初始化匯入一些資料,如何來處理呢?會有兩種選擇,一種是使用Jpa,另外一種是Spring JDBC。兩種方式各有區別下面來詳細介紹。
使用Jpa
在使用spring boot jpa
的情況下設定spring.jpa.hibernate.ddl-auto
的屬性設定為 create
or create-drop
的時候,spring boot 啟動時預設會掃描classpath下面(專案中一般是resources目錄)是否有import.sql
,如果有機會執行import.sql
指令碼。
使用Spring JDBC
使用Spring JDBC 需要在配置檔案中新增以下配置
spring:
datasource:
schema: database/data.sql
sql-script-encoding: utf-8
jpa:
hibernate:
ddl-auto: none複製程式碼
- schema :設定指令碼的路徑
- sql-script-encoding:設定指令碼的編碼
spring boot專案啟動的時候會自動執行指令碼。
ddl-auto 四個值的解釋
- create: 每次載入hibernate時都會刪除上一次的生成的表,然後根據你的model類再重新來生成新表,哪怕兩次沒有任何改變也要這樣執行,這就是導致資料庫表資料丟失的一個重要原因。
- create-drop :每次載入hibernate時根據model類生成表,但是sessionFactory一關閉,表就自動刪除。
- update:最常用的屬性,第一次載入hibernate時根據model類會自動建立起表的結構(前提是先建立好資料庫),以後載入hibernate時根據 model類自動更新表結構,即使表結構改變了但表中的行仍然存在不會刪除以前的行。要注意的是當部署到伺服器後,表結構是不會被馬上建立起來的,是要等 應用第一次執行起來後才會。
- validate :每次載入hibernate時,驗證建立資料庫表結構,只會和資料庫中的表進行比較,不會建立新表,但是會插入新值。
5、 none : 什麼都不做。
不同點
第一種方式啟動的時候Jpa會自動建立表,import.sql只負責建立表單後的初始化資料。第二種方式啟動的時候不會建立表,需要在初始化指令碼中判斷表是否存在,再初始化指令碼的步驟。
在生產中,這兩種模式都建議慎用!
參考:howto-database-initialization
thymeleaf 設定不校驗html標籤
預設配置下,thymeleaf對.html的內容要求很嚴格,比如,如果少封閉符號/,就會報錯而轉到錯誤頁。也比如你在使用Vue.js這樣的庫,然後有
這樣的html程式碼,也會被thymeleaf認為不符合要求而丟擲錯誤。通過設定thymeleaf模板可以解決這個問題,下面是具體的配置:
spring.thymeleaf.cache=false
spring.thymeleaf.mode=LEGACYHTML5複製程式碼
LEGACYHTML5需要搭配一個額外的庫NekoHTML才可用
專案中使用的構建工具是Maven新增如下的依賴即可完成:
<dependency>
<groupId>net.sourceforge.nekohtml</groupId>
<artifactId>nekohtml</artifactId>
<version>1.9.22</version>
</dependency>複製程式碼
參考:thymeleaf模板對沒有結束符的HTML5標籤解析出錯的解決辦法
隨機埠
為Spring Cloud的應用實用隨機埠非常簡單,主要有兩種方法:
設定server.port=0,當應用啟動的時候會自動的分配一個隨機埠,但是該方式在註冊到Eureka的時候會一個問題:所有例項都使用了同樣的例項名(如:Lenovo-test:hello-service:0),這導致只出現了一個例項。所以,我們還需要修改例項ID的定義,讓每個例項的ID不同,比如使用隨機數來配置例項ID:
server.port=0
eureka.instance.instance-id=${spring.application.name}:${random.int}複製程式碼
除了上面的方法,實際上我們還可以直接使用random函式來配置server.port。這樣就可以指定埠的取值範圍,比如:
server.port=${random.int[10000,19999]}複製程式碼
由於預設的例項ID會由server.port拼接,而此時server.port設定的隨機值會重新取一次隨機數,所以使用這種方法的時候不需要重新定義例項ID的規則就能產生不同的例項ID了。
參考:thymeleaf模板對沒有結束符的HTML5標籤解析出錯的解決辦法
喜歡我的文章,請關注我的公眾號
作者:純潔的微笑
出處:www.ityouknow.com/
版權歸作者所有,轉載請註明出處