文章出處

一些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 四個值的解釋

  1. create: 每次加載hibernate時都會刪除上一次的生成的表,然后根據你的model類再重新來生成新表,哪怕兩次沒有任何改變也要這樣執行,這就是導致數據庫表數據丟失的一個重要原因。
  2. create-drop :每次加載hibernate時根據model類生成表,但是sessionFactory一關閉,表就自動刪除。
  3. update:最常用的屬性,第一次加載hibernate時根據model類會自動建立起表的結構(前提是先建立好數據庫),以后加載hibernate時根據 model類自動更新表結構,即使表結構改變了但表中的行仍然存在不會刪除以前的行。要注意的是當部署到服務器后,表結構是不會被馬上建立起來的,是要等 應用第一次運行起來后才會。
  4. 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標簽解析出錯的解決辦法


作者:純潔的微笑
出處:http://www.ityouknow.com/
版權所有,歡迎保留原文鏈接進行轉載:)


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()