springboot(十三):springboot小技巧

一些springboot小技巧、小知識點html

初始化數據

咱們在作測試的時候常常須要初始化導入一些數據,如何來處理呢?會有兩種選擇,一種是使用Jpa,另一種是Spring JDBC。兩種方式各有區別下面來詳細介紹。spring

使用Jpasql

在使用spring boot jpa的狀況下設置spring.jpa.hibernate.ddl-auto的屬性設置爲 create or create-drop的時候,spring boot 啓動時默認會掃描classpath下面(項目中通常是resources目錄)是否有import.sql,若是有機會執行import.sql腳本。數據庫

使用Spring JDBCspringboot

使用Spring JDBC 須要在配置文件中添加如下配置服務器

spring:
    datasource:
      schema: database/data.sql
      sql-script-encoding: utf-8
    jpa:
      hibernate:
        ddl-auto: none
  • schema :設置腳本的路徑
  • sql-script-encoding:設置腳本的編碼

spring boot項目啓動的時候會自動執行腳本。session

ddl-auto 四個值的解釋app

  1. create: 每次加載hibernate時都會刪除上一次的生成的表,而後根據你的model類再從新來生成新表,哪怕兩次沒有任何改變也要這樣執行,這就是致使數據庫表數據丟失的一個重要緣由。
  2. create-drop :每次加載hibernate時根據model類生成表,可是sessionFactory一關閉,表就自動刪除。
  3. update:最經常使用的屬性,第一次加載hibernate時根據model類會自動創建起表的結構(前提是先創建好數據庫),之後加載hibernate時根據 model類自動更新表結構,即便表結構改變了但表中的行仍然存在不會刪除之前的行。要注意的是當部署到服務器後,表結構是不會被立刻創建起來的,是要等 應用第一次運行起來後纔會。
  4. validate :每次加載hibernate時,驗證建立數據庫表結構,只會和數據庫中的表進行比較,不會建立新表,可是會插入新值。 五、 none : 什麼都不作。

不一樣點dom

第一種方式啓動的時候Jpa會自動建立表,import.sql只負責建立表單後的初始化數據。第二種方式啓動的時候不會建立表,須要在初始化腳本中判斷表是否存在,再初始化腳本的步驟。函數

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

參考:howto-database-initialization

thymeleaf 設置不校驗html標籤

默認配置下,thymeleaf對.html的內容要求很嚴格,好比,若是少封閉符號/,就會報錯而轉到錯誤頁。也好比你在使用Vue.js這樣的庫,而後有<div v-cloak></div>這樣的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了。

相關文章
相關標籤/搜索