ヒント:私のホスティングTomcatシステムは20db接続しか提供していません
localhsotでの私の作業プロジェクト
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"
p:driverClassName="${jdbc.driverClassName}" p:url="${jdbc.url}"
p:username="${jdbc.username}" p:password="${jdbc.password}" />
これはローカルホストではうまく機能しましたが、本番環境ではしばらく実行され、例外:「ユーザーはすでに最大接続数を持っています」。
多くのグーグルの後
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のいくつかの設定でこれを解決できると思います。あなたの提案を手伝ってください(私のホスティングは20の接続しか提供していません)
また、Tomcatを試しました
<bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSourceFactory">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<property name="maxActive" value="20"/>
</bean>
上記のTomcatコードは間違っており、機能しません-プロパティが間違っているためです(私はそれを知っています)。これを本番環境で使用するために設定する方法(20接続のみ)
Tomcatプールの使用方法を知っている場合は、私たちを助けてください。
私もbonecpを使用しました
<bean id="dataSource" class="com.jolbox.bonecp.BoneCPDataSource" destroy-method="close" >
<property name="driverClass" value="${jdbc.driverClassName}" />
<property name="jdbcUrl" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<property name="idleConnectionTestPeriod" value="60"/>
<property name="idleMaxAge" value="240"/>
<property name="maxConnectionsPerPartition" value="10"/>
<property name="minConnectionsPerPartition" value="5"/>
<property name="partitionCount" value="1"/>
<property name="acquireIncrement" value="5"/>
<property name="statementsCacheSize" value="1000"/>
<property name="releaseHelperThreads" value="3"/>
</bean>
これはローカルホストでは機能しましたが、本番環境でも同じ問題が発生しました。「ユーザーは多くの接続を必要とします」。
私もapache-dbcpを試しました
tomcat 7のドキュメントによると、dbcpは廃止され、tomcatはプールにバンドルされます。dbcpを使用していて、プログラムを実行できませんが。(jarを1つだけ追加しましたが、プロジェクトの実行中にクラスが見つからなかったというエラーが発生しました)
私自身の考えによると:
上記の設定が問題になると思います。あなたの提案を手伝ってください。重量が重いため、今まで休止状態を使用していません。hibernateでこの問題を解決できる場合は、お知らせください。
編集済み
現在、このコードを使用しています。このコードは私の使用に適していますか(20接続)
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"
p:driverClass="${jdbc.driverClassName}" p:jdbcUrl="${jdbc.url}"
p:user="${jdbc.username}" p:password="${jdbc.password}"
p:acquireIncrement="1"
p:checkoutTimeout="1"
p:idleConnectionTestPeriod="5"
p:maxIdleTime="5"
p:maxIdleTimeExcessConnections="1"
p:maxPoolSize="20" p:maxStatements="0" p:maxStatementsPerConnection="0"
p:minPoolSize="1"
p:numHelperThreads="100"
p:overrideDefaultUser="${jdbc.username}" p:overrideDefaultPassword="${jdbc.password}"
p:propertyCycle="3"
p:testConnectionOnCheckin="true"
p:unreturnedConnectionTimeout="5" />
DAOコード:
@Repository
public class TutorialsDAOImpl implements TutorialsDAO {
//---
private JdbcTemplate jdbcTemplate;
private DataSource dataSource;
@Autowired
public void setDataSource(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
//---
@Override
public List<TutorialsCategory_vo> getTutorialsCategory() {
sql = "SELECT * FROM `tutorials_category` ORDER BY `slug` ASC;";
List<TutorialsCategory_vo> vo = null;
try {
vo = this.jdbcTemplate.query(sql, new Object[]{}, tutorialsCategory_mapper);
} catch (Exception e) {
log.log(Level.SEVERE, null, e);
}
return vo;
}
これらは私が使用しているコードです。エラー/修正がある場合は、plsは私を修正します。
編集済み(Arun P Johnyの質問用)
私の現在のプロジェクトのURL。
上記の現在のコードを更新しました。