两个单例是在一个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);
}
}
单元测试都能连接,当部署到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);
}
}
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)
dataSource = new ComboPooledDataSource();这个为啥和上面的不一样???