1. 程式人生 > >spring jdbc:initialize-database使用詳解

spring jdbc:initialize-database使用詳解

Org.springframework.jdbc.datasource.init使用詳解

org.springframework.jdbc.datasource.init支援在專案啟動的時候對資料庫的初始化操作。

一、使用方式:使用Spring XML進行初始化資料庫(Initializing a database using Spring XML)

a).首先需要為XML加上spring-jdbc名稱空間    xmlns:jdbc="http://www.springframework.org/schema/jdbc"

xsi:schemaLocation="http://www.springframework.org/schema/jdbc

http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd" 

b).在配置檔案加入initialize-database標籤配置

<jdbc:initialize-database data-source="dataSource" enabled="true" ignore-failures="NONE" separator="@@">

<jdbc:script location="classpath:com/foo/sql/db-schema.sql"/>

<jdbc:script location="classpath:com/foo/sql/db-test-data.sql"/>

</jdbc:initialize-database>

上面例項的scripts指定了兩種不同的指令碼,一種是建立資料庫表,一種作為測試資料。當然,該指令碼支援匹配模式,即多個數據庫時候可以使用classpath*:/com/foo/**/sql/*-data.sql進行通配。

二、引數詳解

jdbc:initialize-database標籤中有一些可配置的引數選項,用配置資料庫初始化的一些事件行為。

a).dataSource配置好的資料來源。

b).enabled 是用來表明初始化資料庫是否執行。這個enabled的值是一個boolean值。設定方法有兩種:直接設定truefalse

;或者讀取配置檔案來設定。

示例:

1、直接設定

<jdbc:initialize-database data-source="dataSource" enabled="true"

    <jdbc:script location="classpath:/add-resources.sql"/>

</jdbc:initialize-database>

2、配置檔案讀取

<jdbc:initialize-database data-source="dataSource" enabled="#{systemProperties.INITIALIZE_DATABASE}">

    <jdbc:script location="classpath:/add-resources.sql"/>

</jdbc:initialize-database>

c).ignore-failures有三個值:NONE,DROPS,ALL

設定為NONE時,不忽略任何錯誤,當sql執行報錯時服務啟動終止。

設定為DROPS時,忽略刪除錯誤,如當sql中有一個刪除表而表不存在,此時這個錯誤會被忽略。

設定為ALL時,忽略任何錯誤。

d).separator分隔標識,可配置,該引數可以配置在jdbc:initialize-database中,會對所有script起作用,當然也可以在jdbc:script中單個配置

jdbc:script配置之後,則該script的分隔符使用jdbc:script配置中的。

示例:

<jdbc:initialize-database data-source="dataSource"eparator="@@">

<jdbc:scriptlocation="classpath:com/foo/sql/db-schema.sql" separator=";"/>

<jdbc:scriptlocation="classpath:com/foo/sql/db-test-data-1.sql"/>

<jdbc:script location="classpath:com/foo/sql/db-test-data-2.sql"/>

</jdbc:initialize-database>

此時第一個指令碼分隔符為;,剩餘兩個指令碼使用@@

特別的:預設不配置的情況下,sql語句直接必須使用;分開,或者當整個script不存在;時每行一個sql語句。

附:spring官方文件連結(part 15.9