java - Java 中的集中式数据库连接管理

标签 java database-connection jndi

出于合规性原因,我的组织希望将我们的数据库连接设置从属性/XML 配置文件中取出并放入中央注册表中 - 理想情况下联合多个物理计算机,以避免单点故障。

我一直在研究使用 JNDI 来实现这一目标的可能性,但我自己并没有太多使用它的经验。有没有人有尝试做类似事情的经验?或者有什么更好的想法可以实现这一点?

我应该补充一点,我们的应用程序是独立的,不在任何 J2EE 容器中运行,因此任何容器特定的连接管理技术可能不是特别有用。

最佳答案

这可能是一个好的开始:

HashMap<String,String> dsNames = new HashMap<String,String>();
System.setProperty(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.RefFSContextFactory");
    System.setProperty(Context.PROVIDER_URL, "file:/home/user/tmp");
    InitialContext ic = new InitialContext();
    dsNames.put("yourDataSourceName", "jdbc/your_jndi_name");
    // Construct BasicDataSource reference
    Reference ref = new Reference("javax.sql.DataSource",
            "org.apache.commons.dbcp.BasicDataSourceFactory", null);
    ref.add(new StringRefAddr("driverClassName", "theDriver"));
    ref.add(new StringRefAddr("url","theDBURL"));
    ref.add(new StringRefAddr("username", "obvious"));
    ref.add(new StringRefAddr("password", "obvious"));
    ref.add(new StringRefAddr("maxActive", "10"));
    ref.add(new StringRefAddr("maxIdle", "3"));
    ref.add(new StringRefAddr("initialSize", "3"));
    ref.add(new StringRefAddr("maxWait", "5"));
    ic.rebind("jdbc/your_jndi_name", ref);

    //And to get a reference to your data source anywhere else in your program:
    InitialContext ic2 = new InitialContext();
    DataSource myDS = (DataSource) ic2.lookup(dsNames.get(dsName));

现在,如您所见,我正在使用池连接工厂,但您可以替换它以满足您的需求。另外,初始上下文工厂是 FSContext,这意味着 JNDI 名称将在常规文件系统中查找,URL 上下文工厂必须可用,但我从未使用过它。大多数使用的类都在 javax.naming 包中。

希望这有帮助。

关于java - Java 中的集中式数据库连接管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/888046/

相关文章:

java - 不使用 web.xml 时如何将 JDBC 数据源绑定(bind)到 JNDI 上下文 "java:comp/env/jdbc"

java - Jackson 1.8.5 (for JSON) 不反序列化 : "no such class found"

java - java中抛出异常

php - 与本地主机数据库的连接问题

android - 我如何从我的 android 应用程序连接到 sql server?

java - 类路径上多个 jndi.properties 的排序

java - JDBC 数据源的 JNDI 路径?

java - 自编程二叉树中方法参数问题

java - 使用 Java 将 RSS Feed XML 转换为 JSON 仅显示最后一个条目

java - 即使没有事务,在 jboss 中检索到多个数据库的连接时出错