我们在上一篇已经了解了Spring-配置文件的相关内容,但是我们配置的所有类都是我们定义的,我们似乎很轻松地把这些类的创建交给Spring容器来管理了。那么,我们是否能配置一些不是由我们定义的类呢,把这些外部的类也交由Spring容器来管理?我们是否很快想到了一个我们完成Web项目的对象——数据源。我们可以先回顾一下我们在JavaWeb专栏介绍数据库连接池的内容:我们声明了数据库的相关参数:驱动、地址、用户名、密码,之后我们从配置文件中读取到这些配置,然后调用连接池的方法来获取一个数据源,通过数据源来获取数据库连接,以此来降低在原生JDBC操作中频繁创建连接又释放资源造成的性能压力。
关键来了:我们怎么运用上一节配置文件的知识在Spring中优雅地创建这样一个数据源呢?
通过引子的最后一段话,我们可以总结出我们需要做以下几件事:?
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.6</version>
</dependency>
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://114.115.xxx
jdbc.username=xx
jdbc.password=xxxx
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<context:property-placeholder location="jdbc.properties"/>
<bean id="dataSource" 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>
</beans>
import com.alibaba.druid.pool.DruidDataSource;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.sql.SQLException;
public class DataSourceTest {
@Test
public void testDataSource() throws SQLException {
ApplicationContext ioc = new ClassPathXmlApplicationContext("spring-datasource.xml");
DruidDataSource dataSource = ioc.getBean(DruidDataSource.class);
System.out.println(dataSource.getConnection()); // com.mysql.cj.jdbc.ConnectionImpl@4ea5b703
}
}
至此,我们发现,使用Spring配置数据源与我们使用原生的Java代码配置数据源的做法本质上是一样的。我们似乎又前进了一小步,让我先停下来思考一下:如果所有类都要手动地在xml配置文件里进行声明,是否会造成xml文件的"爆炸"呢?当然Spring官方也会考虑到一点,请读者关注下一篇文章,我们将介绍Spring框架提供的一个更优的做法来创建对象——Spring-注解开发。