如何在Java中的Singleton类中为两个不同的数据源创建连接

时间:2018-07-17 14:53:01

标签: java database design-patterns singleton

我有一个类名称DBManager.java,该类实现了单例设计模式,该模式用于所有DB操作。 当我必须连接1个数据源时,这非常有效。现在,在我的项目中,我必须连接2个不同的数据源,现在,当我使用此类时,它的行为有所不同。因为它总是返回1个数据源连接。

现在我该如何更好地管理这一问题?一种方法是,我将创建另一个DBManager2.java类,并将该类用于第二个数据源,但是我认为这不是一个好方法。

任何推荐。

2 个答案:

答案 0 :(得分:1)

使用Map<Key, DataSource>通过某些键存储数据源。然后使用一些关键对象获取相应的数据源(数据库URL,数据库用户或某些标识符)

答案 1 :(得分:0)

一种方法是使用不同的数据库将enum创建为不同的枚举常量:

public enum Databases{ 
    DB1,
    DB2 
}

然后在您的DBManager.getConnection()方法中使用它:

public final class DBManager{
    // singleton stuff

    public Connection getConnection(Databases d){
        switch(d){
            case DB1:
                // return connection to db1
            case DB2:
                // return connection to db2
        }
    }
}

通过使用开关,您可以为每个数据库创建一个新分支。

另一种方法是将连接所需的所有信息存储在枚举本身中。尽管那样会存在很多安全漏洞,因为您只是将数据库凭据硬编码到代码中(不应该这样做)。