MySql 独立 JAVA 应用程序中的池化数据源(无 J2EE 容器、无 JNDI、无 TOMCAT 等)

MySql pooled datasource in standalone JAVA app (no J2EE container, no JNDI, no TOMCAT etc.)

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

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

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

How to retrieve DB connection using DataSource without JNDI?

是否有另一种跨 java 线程共享数据源的方法?

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

谢谢

文森特

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

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 对象的引用。