两个单例是在一个App里的,C3P0没有单独的配置文件,全都在下面的程序里配置了
单元测试都能连接,当部署到tomcat,第二个就不能用了。
在CdnDBPool的这一句Connection conn = dataSource.getConnection();获得不到连接
第一个DBPool,单独测试可以连接 public class DBPool {
private static Logger log = Logger.getLogger(DBPool.class);
private static DBPool dbPool;
private ComboPooledDataSource dataSource;
private String dbUrl = null;
private String dbUser = null;
private String dbPwd = null;
static {
dbPool = new DBPool();
} public DBPool() {
try {
InputStream is = BaseUtil.class
.getResourceAsStream("/jdbc.properties");
Properties p = new Properties();
p.load(is);
dbUrl = p.getProperty("tdlive.url");
dbUser = p.getProperty("tdlive.username");
dbPwd = p.getProperty("tdlive.password");
String driver = p.getProperty("driver");
dataSource = new ComboPooledDataSource("jdbc/tdlive");
dataSource.setUser(dbUser);
dataSource.setPassword(dbPwd);
dataSource.setJdbcUrl(dbUrl);
dataSource.setDriverClass(driver);
dataSource.setInitialPoolSize(2);
dataSource.setMinPoolSize(1);
dataSource.setMaxPoolSize(10);
dataSource.setMaxStatements(50);
dataSource.setMaxIdleTime(60);
dataSource.setAcquireIncrement(5);
is.close();
} catch (PropertyVetoException e) {
log.error(e.getMessage());
throw new RuntimeException(e); } catch (Exception e) {
e.printStackTrace();
log.error(e.getMessage());
}
} public final static DBPool getInstance() {
return dbPool;
} public final Connection getConnection() {
try {
log.debug("DBPool getconnection");
Connection conn = dataSource.getConnection();
return conn;
} catch (SQLException e) {
log.error("5:can't get the connection :" + e);
throw new RuntimeException("unable to connect to the database ", e);
} }
第二个CdnDBPool,public class CdnDBPool {
private static Logger log = Logger.getLogger(CdnDBPool.class);
private static CdnDBPool cdnDBPool;
private ComboPooledDataSource dataSource;
private String dbUrl = null;
private String dbUser = null;
private String dbPwd = null;
static {
cdnDBPool = new CdnDBPool ();
} public CdnDBPool() {
try {
log.debug("1:initial");
InputStream is = CdnDBPool.class
.getResourceAsStream("/jdbc.properties");
Properties p = new Properties();
p.load(is);
log.debug("2:loadproperties ");
dbUrl = p.getProperty("cdn.url");
dbUser = p.getProperty("cdn.username");
dbPwd = p.getProperty("cdn.password");
String driver = p.getProperty("driver");
dataSource = new ComboPooledDataSource();
log.debug("3:dataSource");
dataSource.setUser(dbUser);
dataSource.setPassword(dbPwd);
dataSource.setJdbcUrl(dbUrl);
dataSource.setDriverClass(driver);
dataSource.setInitialPoolSize(2);
dataSource.setMinPoolSize(1);
dataSource.setMaxPoolSize(10);
dataSource.setMaxStatements(50);
dataSource.setMaxIdleTime(60);
dataSource.setAcquireIncrement(5);
is.close();
} catch (PropertyVetoException e) {
e.printStackTrace();
log.error(e.getMessage());
} catch (Exception e) {
e.printStackTrace();
log.error(e.getMessage());
}
} public final static CdnDBPool getInstance() {
log.debug("4:get instance");
return cdnDBPool;

} public final Connection getConnection() {
try {
log.debug("cdnDBPool getconnection");
Connection conn = dataSource.getConnection();
return conn;
} catch (SQLException e) {
e.printStackTrace();
log.error("5:can't get the connection :" + e);
throw new RuntimeException("unable to connect to the cdn database ", e);
}
}

解决方案 »

  1.   

    异常信息。。java.sql.SQLException: Connections could not be acquired from the underlying database!
    at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:106)
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:529)
    at com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection(AbstractPoolBackedDataSource.java:128)
    at com.tudou.tdlive.base.CdnDBPool.getConnection(CdnDBPool.java:69)
    at com.tudou.tdlive.dao.ServerInfoDao.queryByIp(ServerInfoDao.java:27)
    at com.tudou.tdlive.util.ServerStateCombine.getFullServerState(ServerStateCombine.java:45)
    at org.apache.jsp.manage.serverState_jsp._jspService(serverState_jsp.java:164)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
    at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:861)
    at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579)
    at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1584)
    at java.lang.Thread.run(Thread.java:619)
    Caused by: com.mchange.v2.resourcepool.CannotAcquireResourceException: A ResourcePool could not acquire a resource from its primary factory or source.
    at com.mchange.v2.resourcepool.BasicResourcePool.awaitAvailable(BasicResourcePool.java:1319)
    at com.mchange.v2.resourcepool.BasicResourcePool.prelimCheckoutResource(BasicResourcePool.java:557)
    at com.mchange.v2.resourcepool.BasicResourcePool.checkoutResource(BasicResourcePool.java:477)
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:525)
      

  2.   

    我找到了原因了log.debug("3:dataSource " + dbUrl+ "|" + dbUser+ "|" +  dbPwd);3:dataSource null|null|nullproperties没有读到?我很纳闷两个单例基本上都一模一样的,怎么第二个就读不到呢?
      

  3.   

     String driver = p.getProperty("driver");
    dataSource = new ComboPooledDataSource();这个为啥和上面的不一样???
      

  4.   

    dataSource = new ComboPooledDataSource();dataSource = new ComboPooledDataSource("jdbc/tdlive");他俩有啥不一样?能讲解下么?
      

  5.   

    new ComboPooledDataSource("jdbc/tdlive");这个加不加一样的,我试过了jdbc/tdlive,是配置名
      

  6.   

    BaseUtil和jdbc.properties是不是打到jar包里了呀??
      

  7.   

    终于发现了我ant配了两个环境,只改了一个的配置第二个没读到我傻了。。