Spring下注入配置druid连接池(maven项目)

分为四个部分: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的值。 虽然还是不能理解为什么告诉它配置文件之后,还要去优先找系统环境变量,但以后最好都要一个前缀。

该问题的其他解决方法可以参考https://www.cnblogs.com/d191/p/12566008.html(转载)

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值