在Java中重用数据库连接

时间:2014-12-27 22:18:07

标签: java mongodb amazon-web-services groovy

我在 Groovy 中使用了JavaAWS类(它使用的是Java AWS SDK),但现在我不知道如何在stage1和stage2中重用数据库连接。 基本上我想在任何地方使用相同的数据库连接,现在我不确定实现它的方法是什么。

我的ReplicateInstanceStatusReplicateMetricStatistics课程目前是空的,所以我还没有将它粘贴在那里。

public class JavaAWS {

    Object database = null

    public static void main(String[] args) {
        def obj = new JavaAWS()
        obj.run()
    }
    public JavaAWS() {
        database = new MongoClient()
    }

    public void run() {
        println "Running stage 1 ReplicateInstanceStatus"
        def stage1 = new ReplicateInstanceStatus()
        def ret1 = stage1.run()

        println "Running stage 2 ReplicateMetricStatistics"
        def stage2 = new ReplicateMetricStatistics()
        def ret2 = stage2.run()

    }
}

2 个答案:

答案 0 :(得分:4)

这是一个明确要求依赖注入的情况。而不是你用来获得与舞台对象的连接的机制,这可能是某种环形全局,只需让它们将MongoClient作为构造函数参数。

这也是单身模式看起来像坏主意的情况。如果有人想并行运行多个工作会怎么样?单例本质上是一个全局变量,只有自然只有一个表示的东西应该是单例;数据库连接不合适。

答案 1 :(得分:0)

似乎Singleton是解决方案而且" enum方式"是最简单的方法:

http://en.wikipedia.org/wiki/Singleton_pattern#The_enum_way

以下是成绩单:

  

枚举方式

     

在他的“Effective Java”一书的第二版中,Joshua Bloch声称单元素枚举类型是为任何支持枚举的Java实现单例" [8]的最佳方式。枚举的使用非常容易实现,并且没有关于可序列化对象的缺点,这些对象必须以其他方式规避。

public enum Singleton {
    INSTANCE;
    public void execute (String arg) {
        // Perform operation here 
    }
}
     

可以编写公共方法来获取任何所需类型的参数;这里使用单个String参数作为示例。

     

这种方法通过利用Java保证任何枚举值仅在Java程序中实例化一次来实现单例。由于Java枚举值是全局可访问的,因此单例也是如此,由类加载器懒惰地初始化。缺点是enum类型有点不灵活。