Java 单例和数据源
我正在用Java开发一个web应用程序,它需要一个与数据库的连接良好的资源管理非常重要。该应用程序将位于Tomcat6Servlet容器中,我已经实现了BoneCP来管理连接(我不能使用Spring) 我已经读到数据源的JNDI查找太昂贵了,我正在考虑创建一个单一的数据源对象,只获取一次JNDI资源,并返回相同的数据源以供将来的连接 问题:只创建一次数据源并从同一数据源获取连接是否是一个好主意?我不想获取相同的连接,只想获取相同的数据源Java 单例和数据源,java,web-applications,singleton,jndi,connection-pooling,Java,Web Applications,Singleton,Jndi,Connection Pooling,我正在用Java开发一个web应用程序,它需要一个与数据库的连接良好的资源管理非常重要。该应用程序将位于Tomcat6Servlet容器中,我已经实现了BoneCP来管理连接(我不能使用Spring) 我已经读到数据源的JNDI查找太昂贵了,我正在考虑创建一个单一的数据源对象,只获取一次JNDI资源,并返回相同的数据源以供将来的连接 问题:只创建一次数据源并从同一数据源获取连接是否是一个好主意?我不想获取相同的连接,只想获取相同的数据源 谢谢;) 使用池数据源,如下所述: 是的,正如Renjit
谢谢;) 使用池数据源,如下所述:
是的,正如Renjith所建议的,您只需要创建一次
数据源。事实上,我昨天也遇到了同样的问题。每次在我的“getConnection”方法中,我都注意到我不必要地创建了一个新的InitialContext和数据源。我修改了我的ConnectionManager类,使其具有一个静态代码块,该代码块仅在第一次加载该类时(在中阅读了BalusC的答案后)才创建DataSource对象
我曾考虑过使用老式的ServiceLocator
模式(参见上面链接中Pascal的答案),但我觉得这对我的需求来说有点过分了
另一种可能性是,您也可以在数据源上使用带有注入的@Resource
注释,但是似乎不适用于Tomcat 7
,您应该创建一个数据源,并从数据源中实现的池中获取连接。