【Spring】配置資料庫資源
阿新 • • 發佈:2019-01-22
(1)Spring中配置資料來源bean的方式
1、通過JDBC驅動程式定義的資料來源
2、通過JNDI查詢的資料來源
3、連線池的資料來源
(2)使用JNDI資料來源
好處:資料來源完全可以在應用程式之外進行管理。
使用<jee:jndi-lookup>元素將其裝配到Spring中:<jee:jndi-lookup id =”dataSource” jndi-name=”/jdbc/SpitterDS” resource-ref=”true”/>說明:
jndi-name:指定JNDI中資源的名稱
resource-ref:如果應用程式執行在Java應用伺服器中,需要屬性設定為true,這樣給定的jndi-name將會自動新增“java:comp/env/”字首(該字首表示為JavaEE環境必須的)通過Java配置,藉助JndiObjectFactoryBean從JNDI中查詢DataSource:
@Bean
public JndiObjectFactoryBean dataSource(){
JndiObjectFactoryBean jndiObjectFB = new JndiObjectFactoryBean();
jndiObjectFB.setJndiName(“jdbc/SpittrDs”);
jndiObjectFB.setProxyInterface(javax.sql.DataSource.class);
return jndiObjectFB;
}
(3)使用資料來源連線池
1、配置DBCPBasicDataSource的方式:
<bean id=”dataSource” class=”org.apache.commons.dbcp.BasicDataSource
p:driverClassName=”org.h2.Driver”
p:url = “jdbc:h2:tcp://localhost/~/spitter”
p:username=”sa”
p:password=””
p:initialSize=”5”
p:maxActive=”10”
” />
說明:
driverClassName:指定了JDBC驅動類的全限定類名
url:設定資料庫的JDBC的URL其他配置資訊:
(4)基於JDBC驅動的資料來源
Spring中,通過JDBC驅動定義資料來源是最簡單的配置方式,提供了三個資料來源類:
DriverManagerDataSource:在每個連線請求中都會返回一個新的連線,沒有池化管理。
SimpleDriverDataSource:直接使用JDBC驅動,來解決在特定環境下的類載入問題,環境包括OSGi容器。
SingleConnectionDataSource:在每個連線請求時都會返回同一個的連線,視為只有一個連線的池。注意:綜上所述,應該使用資料來源連線池。
(5)使用嵌入式的資料來源(embedded database)
作為應用的一部分執行,而不是應用連線的獨立資料庫伺服器。對於開發和測試,嵌入式資料庫是很好的可選方案,每次重啟應用或執行測試的時候,都能夠重新填充測試資料。
<jdbc:embedded-database id="dataSource" type="H2">
<jdbc:script location="classpath:spittr/db/jdbc/schema.sql" />
<jdbc:script location="classpath:spittr/db/jdbc/test-data.sql" />
</jdbc:embedded-database>
說明:
type:表明嵌入式資料庫應該是H2資料庫(確保H2位於應用的類路徑下)
<jdbc:script>:第一個引用了schema.sql包含了資料庫中建立表的SQL,第二個引用了test-data.sql,用來將測試資料填充到資料庫中
<jdbc:embedded-database>元素:暴露一個數據源,可以像使用其他的資料來源來使用它。
(6)使用profile選擇資料來源
需求:在某種環境下使用其中一種資料來源,在另外的環境中使用不同的資料來源。在專案開發測試生產需配置不同dataSourse時,可以採用spring的profile定義多個數據源
1.在Spring配置檔案中定義開發、測試環境和生產環境
<beans profile="test,develop">
<!-- 開發和測試環境 -->
</beans>
<beans profile="product">
<!-- 生產環境 -->
</beans>2.在web.xml中, 指定使用哪種環境
<context-param>
<param-name>spring.profiles.default</param-name>
<param-value>test</param-value>
</context-param>
或者
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>spring.profiles.active</param-name>
<param-value>product</param-value>
</init-param>
</servlet>
或者
-Dspring.profiles.active="profile1,profile2"