0

私は、5〜6回のリクエストの後、停止し、新しい着信リクエストの処理に失敗するという事実を除けば、正常に動作しているように見える春のアプリケーションを持っています。

私のページには選択ドロップダウンがあり、そのドロップダウンの onChange は、Spring サーバーへの ajax 呼び出しを行います。これらの約 5 または 6 の後、それ以上は受け入れられず、ページの更新が無期限にハングします。

何がこれを引き起こしているのでしょうか?構成ファイルなどについてさらに情報が必要な場合はお知らせください。ただし、これが十分に一般的な問題であり、正しい方向に向けられることを望んでいました。

ありがとう

編集

これがonChangeと呼ばれる私のajaxコードです

$.ajax({
            url: "./service.go?data="+data+",
            dataType:"json",
            timeout:15000,
            cache: false,
            success: function(data){
                ...
            },
            error: function(request,cause,data){
                if (cause ==="timeout"){
                          alert("Request timed out!");
                }
                else{
                          alert("ERROR: " + data.responseText);
                }
            }

        });

ただし、これは問題ではないと思います.ajaxをまったく使用せず、ブラウザで何度も更新を押しても失敗するためです。

さらにテストすると、データベース接続を必要としないマッピングにヒットしても問題は発生しないので、休止状態のプール構成に関係があるのでしょうか? データベース接続を必要とするページを更新すると、10 回目のリクエストで一貫して問題が発生します。これが私の休止状態のc3p0構成です

driverClassName=com.sybase.jdbc3.jdbc.SybDriver
url=jdbc:    HIDDEN
username= 
password= 
# Number of Connections a pool will try to acquire upon startup
initialPoolSize=5
# Minimum number of Connections a pool will maintain at any given time
minPoolSize=1
# Maximum number of Connections a pool will maintain at any given time
maxPoolSize=20
# Connections to acquire when the pool is exhausted
acquireIncrement=5
# Seconds a Connection can remain pooled but unused before being discarded. 30 Min Check
maxIdleTime=1800
#Test all idle, pooled but unchecked-out connections, every this number of seconds
idleConnectionTestPeriod=300

これらのプロパティを使用して、プール Bean を次のように定義します

<bean id="dsrc" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="${driverClassName}" />
        <property name="jdbcUrl" value="${url}" />
        <property name="user" value="${username}" />
        <property name="password" value="${password}" />

        <property name="initialPoolSize" value="${initialPoolSize}" />
        <property name="minPoolSize" value="${minPoolSize}" />
        <property name="maxPoolSize" value="${maxPoolSize}" />
        <property name="acquireIncrement" value="${acquireIncrement}" />
        <property name="maxIdleTime" value="${maxIdleTime}" />
        <property name="idleConnectionTestPeriod" value="${idleConnectionTestPeriod}" />
    </bean>

これが私のコントローラーの簡単な機能で、10回目までヒットします

@RequestMapping(method = RequestMethod.GET, value = "/test")
public @ResponseBody String test(){
    System.out.println("Hello");
    //List<Object> objects = objectService.getObjects(station); // calls hibernate DAO and when this is used instead of system.out, halts after 10th call.
    return "";

}

したがって、10回目まで、印刷のためにコントローラーにヒットしていることがわかります。少なくともマッピングがヒットしていないことがわかっているため、リクエストがサーバーにヒットしているかどうかをその後どのように判断するかはわかりません。

4

1 に答える 1

2

おそらく、データベース接続の処理に何か問題があります。彼らはプールに戻されていない可能性があります。すべての接続を閉じていることを確認してください。

于 2013-02-18T20:29:16.050 に答える