配置数据源

无论选择Spring的哪种数据访问方式,你都需要配置一个数据源的引用。Spring提供了在Spring上下文中配置数据源bean的多种方式,包括:

通过JDBC驱动程序定义的数据源;

通过JNDI查找的数据源;

连接池的数据源;

对于即将发布到生产环境中的应用程序,我建议使用从连接池获取连接的数据源。如果可能的话,我倾向于通过应用服务器的JNDI来获取
数据源。请记住这一点,让我们首先看一下如何配置Spring从JNDI中获取数据源。


我们可以像使用Spring bean那样配置JNDI中数据源的引用并将其装配到需要的类中。位于jee命名空间下的<jee:jndilookup>
元素可以用于检索JNDI中的任何对象(包括数据源)并将其作为Spring的bean。例如,如果应用程序的数据源配置在JNDI中,
我们可以使用<jee:jndi-lookup>元素将其装配到Spring中,如下所示:


其中jndi-name属性用于指定JNDI中资源的名称。如果只设置了jndi-name属性,那么就会根据指定的名称查找数据源。但是,如
果应用程序运行在Java应用服务器中,你需要将resource-ref属性设置为true,这样给定的jndi-name将会自动添加“java:comp/env/”前缀。

使用数据源连接池

如果你不能从JNDI中查找数据源,那么下一个选择就是直接在Spring中配置数据源连接池。尽管Spring并没有提供数据源连接池实现,但是我们有多项可用的方案,包括如下开源的实现:


Apache Commons DBCP (http://jakarta.apache.org/commons/dbcp);
c3p0 (http://sourceforge.net/projects/c3p0/) ;
BoneCP (http://jolbox.com/) 。



基于JDBC驱动的数据源

在Spring中,通过JDBC驱动定义数据源是最简单的配置方式。Spring提供了三个这样的数据源类(均位于
org.springframework.jdbc.datasource包中)供选择:
DriverManagerDataSource:在每个连接请求时都会返回一个新建的连接。与DBCP的BasicDataSource不同,
由DriverManagerDataSource提供的连接并没有进行池化管理;
SimpleDriverDataSource:
与DriverManagerDataSource的工作方式类似,但是它直接使用JDBC驱动,来解决在特定环境下的类加载问题,这样的环
境包括OSGi容器;
SingleConnectionDataSource:

在每个连接请求时都会返回同一个的连接。尽管SingleConnectionDataSource不是
严格意义上的连接池数据源,但是你可以将其视为只有一个连接的池。
以上这些数据源的配置与DBCPBasicDataSource的配置类似。例如,如下就是配置DriverManagerDataSource的方法:


与具备池功能的数据源相比,唯一的区别在于这些数据源bean都没有提供连接池功能,所以没有可配置的池相关的属性