12.22 Spring Boot 小技巧

一些 Spring Boot 小技巧、小知識點

初始化數據

我們在做測試的時候經常需要初始化導入一些數據,如何來處理呢?會有兩種選擇,一種是使用 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 需要在配置文件中添加以下配置

<code>spring:
datasource:
schema: classpath:db/schema.sql
data: classpath:db/data.sql
sql-script-encoding: utf-8
jpa:
hibernate:
ddl-auto: none
/<code>
  • schema :腳本中創建表的語句
  • data :腳本中初始化數據的預計
  • 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 只負責創建表單後的初始化數據。第二種方式啟動的時候不會創建表,需要在初始化腳本中判斷表是否存在,再初始化腳本的步驟。

在生產中,這兩種模式都建議慎用!

Thymeleaf 設置不校驗 html 標籤

默認配置下,Thymeleaf 對 .html 的內容要求很嚴格,比如,如果少封閉符號/,就會報錯而轉到錯誤頁。也比如你在使用 Vue.js 這樣的庫,然後有

這樣的 html 代碼,也會被 Thymeleaf 認為不符合要求而拋出錯誤。

通過設置 Thymeleaf 模板可以解決這個問題,下面是具體的配置:

<code>spring.thymeleaf.cache=false
spring.thymeleaf.mode=LEGACYHTML5
/<code>

LEGACYHTML5 需要搭配一個額外的庫 NekoHTML 才可用,項目中使用的構建工具是 Maven 添加如下的依賴即可完成:

<code><dependency>
\t<groupid>net.sourceforge.nekohtml/<groupid>
\t<artifactid>nekohtml/<artifactid>
\t<version>1.9.22/<version>
/<dependency>
/<code>

自定義 Favicon

Spring Boot 提供了一個默認的 Favicon,也就是 Spring 的 logo ,我們可以根據自己企業的需要來定製它。

首先需要在 application.propertie 中關閉原有的logo

<code>spring.mvc.favicon.enable=false 
/<code>

在將自己的 favicon.ico 放到src/main/resources/static下 ,然後再重新啟動項目就可以了。


分享到:


相關文章: