Spring 学习总结笔记【五、配置数据源】

往期文章:

Spring 学习总结笔记【一、快速入门】
Spring 学习总结笔记【二、IoC-控制反转】
Spring 学习总结笔记【三、注解开发】
Spring 学习总结笔记【四、整合Junit】

  • 数据源(连接池)是为提高程序性能出现的
  • 事先实例化数据源,初始化部分连接资源
  • 使用连接资源时从数据源中获取
  • 使用完毕后将连接资源归还给数据源

常见数据源(连接池):DBCP、C3P0、BoneCP、Druid等。
这里介绍C3p0Druid在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();
}

下期文章:

Spring 学习总结笔记【六、整合Mybatis】

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值