往期文章:
Spring 学习总结笔记【一、快速入门】
Spring 学习总结笔记【二、IoC-控制反转】
Spring 学习总结笔记【三、注解开发】
Spring 学习总结笔记【四、整合Junit】
- 数据源(连接池)是为提高程序性能出现的
- 事先实例化数据源,初始化部分连接资源
- 使用连接资源时从数据源中获取
- 使用完毕后将连接资源归还给数据源
常见数据源(连接池):DBCP、C3P0、BoneCP、Druid
等。
这里介绍C3p0
与Druid
在Spring中的配置。
一、 数据源配置步骤
① 导入数据源的坐标以及数据库驱动坐标
② 创建数据源对象
③ 设置数据源的基本连接数据
④ 使用数据源获取连接资源和归还连接资源
① 导入数据源的坐标以及数据库驱动坐标
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.1</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
并建立一个jdbc.properties文件,配置如下信息
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test?characterEncoding=utf8
jdbc.username=root
jdbc.password=****
二、C3P0数据源配置
// 手动创建 C3P0 (不加载配置文件)
public void testHandInit_c3p0() throws Exception {
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setDriverClass("com.mysql.cj.jdbc.Driver");
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/mybatis");
dataSource.setUser("root");
dataSource.setPassword("****");
Connection connection = dataSource.getConnection();
connection.close();
}
// 手动创建 C3P0 (加载配置文件)
public void testHandInit_c3p0_load() throws Exception {
// 1. 读取配置文件
ResourceBundle rb = ResourceBundle.getBundle("jdbc");
// 2. 创建数据源对象,设置连接参数
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setDriverClass(rb.getString("jdbc.driver"));
dataSource.setJdbcUrl(rb.getString("jdbc.url"));
dataSource.setUser(rb.getString("jdbc.username"));
dataSource.setPassword(rb.getString("jdbc.password"));
Connection connection = dataSource.getConnection();
connection.close();
}
三、Druid数据源配置
// 手动创建 Druid(不加载配置文件)
public void testHandInit_druid() throws Exception {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/mybatis");
dataSource.setUsername("root");
dataSource.setPassword("****");
Connection connection = dataSource.getConnection();
connection.close();
}
// 手动创建 Druid (加载配置文件)
public void testHandInit_druid_load() throws Exception {
// 1. 读取配置文件
ResourceBundle rb = ResourceBundle.getBundle("jdbc");
// 2. 创建数据源对象,设置连接参数
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(rb.getString("jdbc.driver"));
dataSource.setUrl(rb.getString("jdbc.url"));
dataSource.setUsername(rb.getString("jdbc.username"));
dataSource.setPassword(rb.getString("jdbc.password"));
Connection connection = dataSource.getConnection();
connection.close();
}
四、Spring配置数据源
1. 基于xml配置文件
可以将DataSource的创建权交由Spring容器完成
① 在Spring核心配置文件中创建相应数据源的Bean
<!-- 使用context加载配置文件 不使用配置文件加载数据库信息-->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!-- C3P0数据源-->
<bean id="c3p0DataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver"/>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test"/>
<property name="user" value="root"/>
<property name="password" value="tangyitao273169."/>
</bean>
<!-- Druid数据源 使用配置文件加载数据库信息-->
<bean id="druidDataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
② 使用Spring相关API加载数据源
public void testHandInit_dataSource_bean() throws Exception {
ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
DataSource druidDataSource = (DataSource) app.getBean("druidDataSource");
DataSource c3p0DataSource = (DataSource) app.getBean("c3p0DataSource");
Connection druidConnection = druidDataSource .getConnection();
Connection c3p0DruidConnection = c3p0DataSource .getConnection();
druidConnection .close();
c3p0DruidConnection .close();
}
2. 基于注解开发
① 在Spring配置类中定义获取数据源的方法,并加上@Bean
标签
public class JdbcConfig {
@Value("${jdbc.driver}")
private String driver;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String name;
@Value("${jdbc.password}")
private String password;
// 添加 Bean, 表示当前方法返回值为一个 Bean
@Bean("druidDataSource")
public DataSource getDruidDataSource(){
DruidDataSource druidDataSource = new DruidDataSource();
druidDataSource.setDriverClassName(driver);
druidDataSource.setUrl(url);
druidDataSource.setUsername(name);
druidDataSource.setPassword(password);
return druidDataSource;
}
// 添加 Bean, 表示当前方法返回值为一个 Bean
@Bean("c3p0DataSource")
public DataSource getC30pDataSource() throws PropertyVetoException {
ComboPooledDataSource c3P0PooledDataSource = new ComboPooledDataSource();
c3P0PooledDataSource.setDriverClass(driver);
c3P0PooledDataSource.setJdbcUrl(url);
c3P0PooledDataSource.setUser(name);
c3P0PooledDataSource.setPassword(password);
return c3P0PooledDataSource;
}
}
② 使用Spring相关API加载数据源
public static void main(String[] args) throws SQLException {
ApplicationContext app = new AnnotationConfigApplicationContext(SpringConfig.class);
DataSource druidDataSource = (DataSource) app.getBean("druidDataSource");
DataSource c3p0DataSource = (DataSource) app.getBean("c3p0DataSource");
Connection druidConnection = druidDataSource .getConnection();
Connection c3p0Connection = c3p0DataSource.getConnection();
System.out.println(druidConnection);
System.out.println(c3p0Connection);
druidConnection .close();
c3p0Connection.close();
}
下期文章: