SpringJDBC配置C3P0數據庫連接池
今天在Spring的配置文件里面配置C3P0數據源:
先導入c3p0的jar包
<bean id="dataSource" name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <!-- 指定連接數據庫的驅動 --> <property name="driverClass" value="com.mysql.jdbc.Driver" /> <!-- 指定連接數據庫的URL --> <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/jeanselam" /> <!-- 指定連接數據庫的用戶名 --> <property name="user" value="root" /> <!-- 指定連接數據庫的密碼 --> <property name="password" value="root" /> <!-- 指定連接池中保留的最大連接數. Default:15 --> <property name="maxPoolSize" value="100" /> <!-- 指定連接池中保留的最小連接數 --> <property name="minPoolSize" value="10" /> <!-- 指定連接池的初始化連接數 取值應在minPoolSize 與 maxPoolSize 之間.Default:3 --> <property name="initialPoolSize" value="20" /> <!-- 最大空閑時間,60秒內未使用則連接被丟棄。若為0則永不丟棄。 Default:0 --> <property name="maxIdleTime" value="600" /> <!-- 當連接池中的連接耗盡的時候c3p0一次同時獲取的連接數. Default:3 --> <property name="acquireIncrement" value="5" /> <!-- JDBC的標準,用以控制數據源內加載的PreparedStatements數量。 但由于預緩存的statements屬于單個connection而不是整個連接池所以設置這個參數需要考慮到多方面的因數.如果maxStatements與maxStatementsPerConnection均為0,則緩存被關閉。Default:0 --> <property name="maxStatements" value="5" /> <!-- 每60秒檢查所有連接池中的空閑連接.Default:0 --> <property name="idleConnectionTestPeriod" value="60" /> </bean> <!-- 通用泛型DAO組件 --> <bean name="abstractDaoImpl" class="com.lin.jllm.dao.impl.AbstractDaoImpl" abstract="true"> <property name="dataSource" ref="dataSource"></property> </bean>
運行測試數據庫的時候報錯:

由于我的OS是linux,所以報錯的原因可能是:
原因分析:
Linux于host相關的幾個文件如下:
/etc/host.conf
功能:指定主機名查找方法,通常指先查找文件/etc/hosts,找不到時再向DNS服務器請求。
對于大多數用戶不用改動此文件內容。
Linux: /etc/host.conf文件內容
order hosts, bind
multi on
/etc/resolv.conf
文件功能:DNS客戶機配置文件,設置DNS服務器的IP地址及DNS域名
相關文件:/etc/host.conf
文件格式:
domainname 域名
search 域名
nameserver Primary_DNS_Server_IP_address
nameserver Second_DNS_Server_IP_address
其中domainname和search可同時存在,也可只有一個;nameserver可指定多個
/etc/hosts
#/etc/hosts
#文件格式: IPaddress hostname aliases
#文件功能: 提供主機名到IP地址的對應關系,建議將自己經常使用的主機
# 加入此文件中,也可將沒有DNS記錄的機器加入到此文件中,
# 這樣會方便網絡應用
127.0.0.1 localhost localhost.localdomain
解決:編輯/etc/hosts文件,在 127.0.0.1 localhost 后加上控制臺里說的所謂的未知的名稱和服務"lin-Dell-System-Inspiron-7420"

運行項目,OK
測試,寫個action:
package com.lin.jllm.action;
import java.util.List;
import com.lin.jllm.domain.OrderInfo;
import com.lin.jllm.service.intf.IOrderInfoService;
import com.opensymphony.xwork2.ActionSupport;
public class TestAction extends ActionSupport {
private static final long serialVersionUID = 1L;
private IOrderInfoService orderInfoService;
private static volatile int a;
private synchronized static void incr() {
a++;
}
public IOrderInfoService getOrderInfoService() {
return orderInfoService;
}
public void setOrderInfoService(IOrderInfoService orderInfoService) {
this.orderInfoService = orderInfoService;
}
@Override
public String execute() throws Exception
{
/**
* 并發測試
*/
int times = 10000;//設置一萬個并發訪問
long start = System.currentTimeMillis();
for (int i = 0; i < times; i++) {
new Thread(new Runnable() {
@Override
public void run() {
try {
/**
* 讀取記錄
*/
List<OrderInfo> orderInfos = orderInfoService.getAll();
for(OrderInfo orderInfo : orderInfos)
{
System.out.println(orderInfo.toString());
}
} catch (Exception e) {
// TODO: handle exception
}
finally
{
incr();//記錄訪問次數
}
}
}).start();
}
while (true) {
if (a == times) {
System.out.println("并發量"+times+"\t完成時間:"
+ (System.currentTimeMillis() - start)+"ms");
break;
}
Thread.sleep(100);
}
return SUCCESS;
}
}
并發量10000 完成時間:6272ms