【问题标题】:MySql pooled datasource in standalone JAVA app (no J2EE container, no JNDI, no TOMCAT etc.)独立 JAVA 应用程序中的 MySql 池化数据源(无 J2EE 容器、无 JNDI、无 TOMCAT 等)
【发布时间】:2015-07-22 09:25:03
【问题描述】:

我在这里阅读了几十个主题,但没有真正的启发:我正在使用 Java 8 的 Synology NAS 上运行一个独立的 Java 应用程序。我还在同一个 NAS 上安装了 MariaDB。所以一切都是本地的。

我能够设置数据源并获得连接,但我希望能够在我的任何类/线程的任何实例中访问它以进行连接池。一切似乎都表明我需要 JNDI。但是我没有 J2EE 容器,这对我的需要来说似乎有点过分了。用于开发我自己的 JNDI 实现的同上。

我看到有人对类似问题的回复提出了 C3PO 建议。但这只是另一个数据源实现。我不认为它解决了无法从代码中的任何位置访问数据源的独立应用程序问题:

How to retrieve DB connection using DataSource without JNDI?

还有其他方法可以跨 java 线程共享数据源吗?

  1. 我可以将数据源实例作为参数传递给每个线程,所以 他们可以在需要时建立连接吗?
  2. 我是否应该为每个线程分配一个给定的连接 - 也作为 范围 ?在这种情况下,永远不要真正正确地关闭它?
  3. 或者我真的应该安装tomcat、jboss、jetty之类的东西吗?是 他们等价?有没有一个超轻的 J2EE 容器可以 提供 JNDI 吗?

谢谢

文森特

【问题讨论】:

  • 我猜当您说“我能够设置数据源并获得连接”时,您的意思可能是“我能够设置与数据源的连接”。
  • 是的,我已经设置了数据源,并且它上面的“getConnection()”返回了一个实际的连接。
  • 您能否只使用单例模式为您的数据源提供一个静态访问点?如DataSourceFactory.getDataSource()
  • 啊啊。我对所有这些东西都很陌生,并没有想到这一点。是的,我想这可行,谢谢。
  • 添加为答案,这样人们以后就不必在 cmets 中挖掘答案了。

标签: mysql multithreading datasource jndi


【解决方案1】:

您可以使用单例模式,例如:

public class DataSourceFactory {

    private static DataSource instance = null;

    private DataSourceFactory() { }

    public static synchronized DataSource getDataSource(){
        if(instance == null){
            instance = // initialize your datasource
        }
        return instance;
    }
}

然后,您可以从任何线程调用 DataSourceFactory.getDataSource() 来获取对您的 DataSource 对象的引用。

【讨论】:

    猜你喜欢
    • 2015-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-02
    • 2013-09-22
    • 2013-03-13
    相关资源
    最近更新 更多