提示的方式:我的托管Tomcat的系统只提供分贝连接最佳春数据库池生产系统
我的工作项目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,但我无法运行我的程序。 (我只加一个罐子和错误是一些类项目运行期间未找到)
按我自己的想法:
我认为上述的设置会有任何问题。请帮我提一下你的建议。由于体重过重,我现在不使用休眠功能。如果hibernate能解决这个问题,请告诉我们。
EDITED
目前我使用这个代码。这是正确的代码我使用(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;
}
这是我使用的代码。如果有任何错误/更正,请纠正我。
编辑(对于阿伦P佐尼的问题)
我的当前项目url。
我更新了我上面的当前代码。
我可以在生产系统中使用javadb(或类似的东西)吗?这会解决我的问题吗? –
并发用户的预期数量是多少?一个包含20个连接的池应该足够用于小应用程序。你确定连接管理没有资源泄漏吗? –
**预期用户数量:** [它是一个动态网站。](http://featuriz.com/) **资源泄漏:**请检查我更新的(当前使用的)代码。没有泄漏 –