Spring提供了在Spring上下文中配置数据源Bean的多种方式:
- 通过JDBC驱动程序定义数据源
- 通过JNDI查找数据源
- 连接池的数据源
使用JNDI数据源
JNDI( Java Naming and Directory Interface ),是Java平台的一个标准扩展,提供了一组接口、类和关于命名空间的概念。如同其它很多Java技术一样,JDNI是provider-based的技术,暴露了一个 API和一个服务供应接口(SPI)。这意味着任何基于名字的技术都能通过JNDI而提供服务,只要JNDI支持这项技术。JNDI目前所支持的技术包括 LDAP、CORBA Common Object Service(COS)名字服务、RMI、NDS、DNS、Windows注册表等等。很多J2EE技术,包括EJB都依靠JNDI来组织和定位实体。可以把它理解为一种将对象和名字捆绑的技术,对象工厂负责生产出对象,这些对象都和唯一的名字绑在一起,外部资源可以通过名字获得某对象的引用。
基于JDBC驱动的数据源
在Spring中,通过JDBC驱动定义数据源是最简单的配置方式。Spring提供了两种数据源对象供选择:
-
DriverManagerDataSource
:在每个链接请求时都会返回一个新建的链接。与DBCP的BasicDataSource不同,由DriverManagerDataSource提供的链接并没有进行池化管理。 -
SingleConnectionDataSource
:在每个链接请求时都会返回同一个链接。尽管SingleConnectionDataSource不是严格意义上的连接池数据源,但是你可以将其视为一个只有一个链接的池。
基于java配置
@Configuration
public class DataSourceConfig {
@Bean(name = "dataSource")
public DataSource dataSource(){
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/");
dataSource.setUsername("root");
dataSource.setPassword("root123");
return dataSource;
}
}
基于XML配置
<?xml version="1.0" encoding="utf-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
">
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/"></property>
<property name="username" value="root"></property>
<property name="password" value="root123"></property>
</bean>
</beans>
使用数据源连接池
DBCP连接池
@Bean(name = "dbcp")
public DataSource dbcp(){
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/");
dataSource.setUsername("root");
dataSource.setPassword("root123");
dataSource.setInitialSize(5);
dataSource.setMaxIdle(10);
return dataSource;
}
C3P0连接池
@Bean(name = "c3p0")
public DataSource c3p0() throws PropertyVetoException {
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setDriverClass("com.mysql.jdbc.Driver");
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/");
dataSource.setUser("root");
dataSource.setPassword("root123");
dataSource.setInitialPoolSize(5);
dataSource.setMaxPoolSize(10);
return dataSource;
}
DRUID连接池
@Bean(name = "druid")
public DataSource druid() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/");
dataSource.setUsername("root");
dataSource.setPassword("root123");
dataSource.setInitialSize(5);
dataSource.setMaxActive(10);
return dataSource;
}
网友评论