【问题标题】:How to implement connection management?如何实现连接管理?
【发布时间】:2018-08-03 13:44:34
【问题描述】:

我需要创建一个处理连接方法的类。但我在网上阅读了不同的实现方式。有

  1. 单例
  2. 静态方法

1) 像这样的单例:

public SingletonHome{
private static SingletomHome s=null;

private SingletonHome(){
}
public static SingletongHome getInstance(){
//return instance s
}

public Connection getConnection(){
//return connection;
}
}

2) 使用静态方法

 public class Example{

    public static Connection getConnection(){
    //return connection;
        }
    }

在使用连接池的环境中谁是最好的解决方案,我从连接池中获取连接,在我需要处理这些之后。有人可以帮助我吗?

【问题讨论】:

  • 请求最好,正在征求意见,它们在 SO 上效果不佳,请尝试阅读 this
  • static 这样的方法是“单例”,因为所有调用都集中在该单个类上。从这个角度来看,你最好使用单例。但是然后为此使用java枚举。除此之外:不要实现自己的连接池。为什么要重新发明轮子?
  • @GhostCat 我不想实现连接池。我想处理从连接池获得的连接,所以我使用单例?

标签: java singleton database-connection static-methods


【解决方案1】:

这两种方式并不是设计用来切换的。
假设您需要更改为另一个实现,使用 Example.getConnection()SingletonHome.getInstance().getConnection() 您会卡住。
此外,这些类也不能直接测试。
您应该真正引入一个定义连接管理所需操作的接口。
如果你的环境允许,你应该支持依赖注入来定义和注入你的单例,而不是经典的单例模式:它为客户端提供了较低的耦合。

请注意,重新发明轮子也不是一个好主意,也不是免费的错误:存在为您处理数据库连接管理/池的库:commons-dbcp、HikariCP 和其他...您可能做得最好这些。

【讨论】:

  • 我的意思是我从连接池中获取连接,我不知道实现连接池!我需要处理从连接池获得的连接!dd
【解决方案2】:

使用池化机制代替这些方式

【讨论】:

  • 我的意思是我从一个连接池中获取连接,我不知道实现一个连接池!
猜你喜欢
  • 1970-01-01
  • 2012-09-30
  • 1970-01-01
  • 2023-03-07
  • 2015-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多