分为四个部分:jdbc.properties;applicationContext.xml ;pom.xml ;DataSourceTest.java
作用分别为:连接池配置文件,spring配置文件,maven配置文件,测试连接是否成功。
(主要为测试,所以内容都放在了test目录下)
四个文件所在位置:
jdbc.properties:
jdbc.driver=com.mysql.jdbc.Driver --classDriverName
jdbc.url=jdbc:mysql:///test --本地数据库
jdbc.username=root --数据库用户名
jdbc.password=root --数据库密码
applicationContext.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!--此处beans标签下增加一行xmlns:context,但一般太长记不住,可以直接copy第一行的xmlns,
加一个context属性再把beans改成context-->
<!--xsi:schemaLocation下复制一遍地址,把所有beans的地方修改成context-->
<!--这样就算告诉xml我要用spring-context了-->
<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 http://www.springframework.org/schema/context/spring-context.xsd">
<!--告诉xml,连接池的配置文件在哪-->
<context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder>
<!--开始创建bean对象,类型是DruidDataSource,由于bean对象是默认调用类的无参构造函数,
所以我们要把DruidDataSource的全类名告诉bean-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<!--因为DruidDataSource有setDriverClassName()等此类set函数,我们就可以选择set函数来实现注入-->
<!--其中name中的内容为属性,也就是set函数中set后面的内容,并把首字母变小写,
比如setUrl(),那name就是url-->
<!--value中我们通过spEL来获取到jdbc.properties的值,spEL也就是spring expression language
类似jsp中的el-->
<property name="driverClassName" value="${jdbc.driver}"></property>
<property name="url" value="${jdbc.url}"></property>
<property name="username" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean>
</beans>
pom.xml
在dependencies中我们需要以下内容:
<dependencies>
<!--测试包-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!--druid包-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.9</version>
</dependency>
<!--数据库连接包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.32</version>
</dependency>
<!--spring-context包-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
</dependencies>
DataSourceTest.java
public class DataSourceTest {
@Test
public void test() throws Exception {
// 创建一个app对象,把spring配置文件传入
ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
// 创建数据源,通过getBean(id)来获取applicationContext.xml中对应的id,并强转
DruidDataSource dataSource = (DruidDataSource) app.getBean("dataSource");
// 建立连接
Connection conn = dataSource.getConnection();
// 关闭连接,其他操作不进行演示
conn.close();
}
}
遇到的坑!
最开始在jdbc.properties中并没有加jdbc.这个前缀,直接使用的是username=root,导致数据库连接的时候报错:
此处“Intern”为本电脑的主机名,后来发现是因为spring默认会优先加载系统环境变量,此时获取到的username的值实际上指的是当前计算机的用户名。而不是properties配置文件中指定的username的值。 虽然还是不能理解为什么告诉它配置文件之后,还要去优先找系统环境变量,但以后最好都要一个前缀。
该问题的其他解决方法可以参考(转载)