Mysql spring中生产系统数据库池的最佳方式

Mysql spring中生产系统数据库池的最佳方式,mysql,spring,Mysql,Spring,提示:我的托管tomcat系统只提供20 db连接 我在localhsot的工作项目 <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" p:driverClassName="${jdbc.driverClassName}" p:url="${jdbc.url}" p:username="${jdbc.username}"

提示:我的托管tomcat系统只提供20 db连接

我在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}" />
这在localhost中运行良好,但在生产环境中运行了一段时间,出现了一个异常:用户拥有allready max no of connection

经过多次谷歌

我用c3p0

这在localhost中有效,但在生产服务器中也存在同样的问题

提示:我认为c3p0中的一些配置可以解决这个问题。请帮我建议我的主机只提供20个连接

我也试过雄猫

上面的tomcat代码是错误的,不会工作——因为我知道这是错误的属性。如何为我的产品设置此选项仅使用20个连接

如果你知道如何使用tomcat pool,请帮助我们

我也用了bonecp

这在localhost中有效,但在生产环境中,同样的问题也存在于许多连接中

我还尝试了ApacheDBCP

根据tomcat 7文档,dbcp不再存在,tomcat将与池绑定。尽管我使用了dbcp,但我无法运行我的程序。我只添加了一个jar,错误是在项目运行期间找不到某个类

根据我自己的想法:

我认为上述设置将是一个问题。请帮我提建议。由于体重太重,我现在还没有使用hibernate。如果hibernate可以解决这个问题,请告诉我们

编辑

目前我正在使用这个代码。此代码对我的use20连接正确吗

<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;
    }
这些是我正在使用的代码。如果有任何错误/更正,请纠正我

为Arun p Johny的问题编辑

我目前的项目

我在上面更新了我当前的代码


这是我的最终c3p0设置:

<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="3000"
          p:idleConnectionTestPeriod="5"           
          p:maxIdleTime="3" 
          p:maxIdleTimeExcessConnections="1" 
          p:maxPoolSize="20" p:maxStatements="20000" p:maxStatementsPerConnection="1000" 
          p:minPoolSize="1" 
          p:numHelperThreads="1000"
          p:overrideDefaultUser="${jdbc.username}" p:overrideDefaultPassword="${jdbc.password}"
          p:propertyCycle="3" 
          p:statementCacheNumDeferredCloseThreads="1"
          p:testConnectionOnCheckin="true"
          p:unreturnedConnectionTimeout="7" />
这工作正常,但需要1或2秒的时间-不超过3秒

我还通过关闭mysql检查了这段代码。我的程序一直等到,我启动mysql。这很好。此代码等待所有数据库连接完成并正确输出

我们可以让这个设置更快吗?提示:我的服务器只提供20个连接


如果您提供了正确的答案,我会在检查后将其作为正确答案。

我可以在生产系统中使用javadb或类似的工具吗。这能解决我的问题吗?预期的并发用户数是多少?对于一个小型应用程序,20个连接的池应该足够好了。您确定连接管理中没有资源泄漏。预期的用户数:资源泄漏:请检查我当前使用的更新代码。没有泄漏错误发生的频率有多高,当错误发生时,用户数量是多少?@ArunPJohny现在一切正常。没有错误。但有时应用程序不从数据库中获取一个或两个数据库,而从整个表中检索工作。现在它可以快速打印输出,但有时会缺少一两个表。我不断地更改c3p0设置以获得更好的输出。
<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" />
@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;
    }
<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="3000"
          p:idleConnectionTestPeriod="5"           
          p:maxIdleTime="3" 
          p:maxIdleTimeExcessConnections="1" 
          p:maxPoolSize="20" p:maxStatements="20000" p:maxStatementsPerConnection="1000" 
          p:minPoolSize="1" 
          p:numHelperThreads="1000"
          p:overrideDefaultUser="${jdbc.username}" p:overrideDefaultPassword="${jdbc.password}"
          p:propertyCycle="3" 
          p:statementCacheNumDeferredCloseThreads="1"
          p:testConnectionOnCheckin="true"
          p:unreturnedConnectionTimeout="7" />