【问题标题】:Create a common database connection for a set of systems connected on the same network为连接在同一网络上的一组系统创建公共数据库连接
【发布时间】: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


【解决方案1】:

如果数据库服务器有防火墙,来自其他机器的连接可能会被拒绝。

【讨论】:

  • 很可能是对服务器的访问权限。无论哪种方式,我都无法判断,因为我无权更改 sql server 属性并对其进行测试。不过感谢您的回复。
猜你喜欢
  • 2012-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-31
  • 2015-01-19
  • 1970-01-01
  • 2017-11-17
  • 1970-01-01
相关资源
最近更新 更多