連線池之Spring管理資料庫連線
一、資料庫連線的管理模式
1.每次請求建立新的連線
Connection=DriverManager.getConnection("jdbc:oracle:thin:@10.1.53.30:1521:project","project","project");
2.連線池管理模式:
預先建立多個與資料庫的連線,每個從池中取一個空閒的連線,使用後再放回池中。
二、連線池概念
連線池是建立和管理一個連線的緩衝池的技術,這些連線準備好被任何需要它們的執行緒使用。
三、連線池實現技術
1.JavaEE Server管理的連線池:每個符合JavaEE規範的伺服器都提供了連線池的管理機制。
2.各種連線池的管理框架
------ Apache DBCP。
------ C3P0框架(聽說是目前連線最快的框架)。
------ Spring自己管理的連線池。
------ 其他的。
四、各個框架實現程式碼
1.dao層程式碼
首先先寫dao層程式碼,比較容易,使用@Autowired自動注入。
private DataSource dataSource=null;
@Autowired
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}
連線時只需呼叫Connection conn = dataSource.getConnection();即可
2.context.xml下的程式碼
Spring到命名服務中查詢已經註冊的連線池物件。
舊版本模式
<bean id="dataSourceForNeusoftOA" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/neusoftoa"></property>
</bean>
新版的Spring,在jee空間提供了從命名服務查詢物件的方法
<beans>
<jee:jndi-lookup id="myDataSource" jndi-name="java:comp/env/jdbc/myds"/>
</beans>
Spring自身提供的連線池框架
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
使用DBCP框架
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
使用DBCP框架需要匯入DBCP相關的類庫,在Pom.xml檔案下新增以下內容即可:
<!-- 連線池-使用DBCP框架方式依賴注入 DataSource -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.5.0</version>
</dependency>
使用C3P0
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="${jdbc.driverClassName}"/>
<property name="jdbcUrl" value="${jdbc.url}"/>
<property name="user" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
使用C3P0框架需要匯入C3P0相關的類庫,在Pom.xml檔案下新增以下內容即可:
<!-- 連線池-使用C3P0框架依賴注入DataSource -->
<!-- https://mvnrepository.com/artifact/com.mchange/c3p0 -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.1</version>
</dependency>