2013-03-04 115 views
3

我正在学习JDBC,我目前正在研究JDBC数据源和连接池。您是否需要确保您创建的数据源只在应用程序中创建一次,然后与需要引用数据源的所有类共享?或者它在幕后做了些神奇的事情?JDBC连接池是单身人士吗?

如果您在Java EE服务器或Spring中配置数据源,它是否只创建一个数据源对象? JNDI中的对象是单例还是每次都需要一个新的对象?

回答

2

DataSource实例并不神奇。如果您创建了其中两个,那么您将拥有两个,并且每个都将拥有自己的连接池。使用JNDI,您可以在名称下注册一个对象,因此根据定义,每次都会发布相同的对象。你可以认为它或多或少是夸大的HashMap。在Spring中,singleton是默认的作用域,因此除非您更改bean的作用域,否则将在使用它的所有内容之间创建并共享一个DataSource

+0

好的,所以所有的JNDI对象都是单例...显然是因为你写了'new'关键字然后绑定它,对吧? – LuckyLuke 2013-03-04 18:01:24

+0

是的,尽管你也可以在JNDI中使用[ObjectFactory](http://docs.oracle.com/javase/7/docs/api/javax/naming/spi/ObjectFactory.html)实现一些间接性,这可能是如果它不作为单例处理,则返回不同的实例,例如[Tomcat的配置](http://tomcat.apache.org/tomcat-7.0-doc/config/context.html#Resource_Definitions)中可能的例子。 – 2013-03-04 18:15:25