【发布时间】:2014-04-28 07:48:30
【问题描述】:
我希望使用此代码的系统连接到单个系统中存在的公共数据库,在本例中为 @10.145.10.100。我希望源文件位于本地系统中,并且仍然能够从系统 @10.145.10.100 中的单个 SQL 运行各种应用程序。到目前为止,系统在本地系统中的服务器上运行,因为正如我之前所说,我希望使用此连接的项目将其源文件放在自己的机器上。如果可以通过在一个 tomcat 服务器上运行它来完成相同的操作,那么这些解决方案也是受欢迎的。当前出现的错误是 ConnectionTimedOut
CommonConnection.java
/**
* Builds the URL
*/
private void buildURL(){
ResourceBundle resourceBundle = ResourceBundle.getBundle("com.dennis.connection.dbinfo");
String urlNamespace = resourceBundle.getString("URL_NAMESPACE");
String domain = resourceBundle.getString("DOMAIN");
String port = resourceBundle.getString("PORT");
URL = urlNamespace+domain+":"+port+"/";
}
/**
* A poolable connection object is created using SUN API
* @param dataSourceName the datasource name is passed by the coder who uses this function
*/
public CommonConnection(String dataSourceName) {
ResourceBundle.clearCache();
ResourceBundle dbInfo = ResourceBundle.getBundle(DATABASE_INFO_PATH);
ResourceBundle dbSchema = ResourceBundle
.getBundle(DATABASE_SCHEMA_PATH);
this.dataSourceName = dataSourceName;
this.buildURL();
DRIVER = dbInfo.getString("DRIVER");
URL += dataSourceName;
USERNAME = dbInfo.getString("USERNAME");
PASSWORD = dbInfo.getString("PASSWORD");
try {
ds = setUp();
} catch (Exception e) {
log(e);
}
}
/**
* sets up the datasource
* @return the datasource
* @throws Exception exception that occurs has to be handled instansiation, illegal access, class not found
*/
public DataSource setUp() throws Exception{
Class.forName(CommonConnection.DRIVER).newInstance();
connectionPool = new GenericObjectPool();
connectionPool.setMaxActive(10);
ConnectionFactory cf = new DriverManagerConnectionFactory(
CommonConnection.URL, CommonConnection.USERNAME,
CommonConnection.PASSWORD);
PoolableConnectionFactory pcf = new PoolableConnectionFactory(cf,
connectionPool, null, null, false, true);
return new PoolingDataSource(connectionPool);
}
public GenericObjectPool getConnectionPool() {
return connectionPool;
}
/**
* Sets up the dataSource for the connection
*/
/**
* returns the connection object from the datasource
*
* @return the connection object
*/
public Connection getJNDIConnection() {
Connection result = null;
try {
if (ds != null) {
result = this.ds.getConnection();
} else {
log("Failed to lookup datasource.");
}
} catch (SQLException ex) {
log("Cannot get connection: " + ex);
}
return result;
}
引用的属性如下所示
dbinfo.properties
DRIVER =com.mysql.jdbc.Driver
DATASOURCE_CONTEXT =java:comp/env/jdbc/
URL_NAMESPACE =jdbc:mysql://
DOMAIN=10.145.10.100
PORT=3306
USERNAME =root
PASSWORD =admin
上下文文件
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Resource
name="jdbc/bank_admin_user"
auth="Container"
type="javax.sql.DataSource"
username="root"
password="admin"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://10.145.10.100:3306/bank_admin_user;create=true" />
</Context>
【问题讨论】:
-
如果您使用 Eclipse,请尝试在 WEB-INF/lib 文件夹中添加您的库
-
我知道你用斜体表示,但你确定 mysql-connector-java-???-bin.jar 在Tomcat 的
lib/文件夹中吗?自从在那里安装 Tomcat 后,您是否重新启动了它?您确定您正在正确读取您的属性文件吗?您打印出您要加载的驱动程序的名称了吗? -
我已经更新了 Jason 的问题。是的,没有添加 jar 文件,但现在添加了它,我收到异常说“连接已超时”。
-
会不会是因为访问限制?我正在使用 MySQL 5.1.36-community
标签: java sql datasource connection-pooling