SpringJDBC配置C3P0數據庫連接池

jopen 8年前發布 | 38K 次閱讀 數據庫連接池

今天在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

來自: http://my.oschina.net/u/2328736/blog/598569

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!