Spring数据源配置

x33g5p2x  于2022-04-23 转载在 Spring  
字(7.0k)|赞(0)|评价(0)|浏览(377)

Spring相关的API

ApplicationContext的继承体系

ApplicationContext的实现类

getBean()方法使用

Spring配置数据源(连接池)

数据源的开发步骤

加载配置文件方式创建

将DateSource的创建权交给Spring容器去完成

抽取jdbc配置文件

Spring相关的API

ApplicationContext的继承体系

applicationContext:接口类型,代表应用上下文,可以通过其实例获得Spring容器中的Bean对象

** 紫色的为接口,浅绿色的为抽象类,绿色的为实现类**

ApplicationContext的实现类

①ClassPathXmlApplicationContext
它是从类的跟路径下加载配置文件,只需要创建resource下的xml,参数写入xxx.xml即可(推荐使用)

②FileSystemXmlApplicationContext
他是从磁盘路径上加载配置文件,配置文件可以在磁盘的任意位置。

③AnnotationConfigApplicationContext
当使用注解配置容器对象时,需要食用此类来创建spring容器骂他用来读取注解

getBean()方法使用

  1. //根据id找
  2. public object getBean(String name) throws BeansException {
  3. assertBeanFactoryActive();
  4. return getBeanFactory().getBean(name);
  5. }
  6. //根据字节码对象找
  7. public <T> T getBean(Class<T> requiredType) throws BeansException {
  8. assertBeanFactoryActive();
  9. return getBeanFactory().getBean(requiredType);
  10. }

其中,当参数的数据类型是字符串时,表示根据Bean的id从容器这种获得Bean实例,返回Object,需要强转。当参数的数据类型是Class类型是,表示根据类型从容器中匹配Bean实例,当容器中相同类型的Bean有多个是是,则clss方法会报错

根据id

** 根据字节码对象**

某一类型的bean对象存在多对时,只能使用id,因为id是唯一的,某一类型的bean对象存在一对是时,可以用id,也可以使用字节码对象,使用字节码对象更方便些。

 Spring配置数据源(连接池)

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

常见的数据源(连接池):DBCP、C3P0、BoneCP、Druid

数据源的开发步骤

  1. 导入数据源的坐标和数据库驱动坐标
  2. 创建数据源对象
  3. 设置数据源的基本连接数据
  4. 使用数据源获取连接资源和归还连接资源

①:导入数据源坐标

  1. <dependencies>
  2. <dependency>
  3. <groupId>mysql</groupId>
  4. <artifactId>mysql-connector-java</artifactId>
  5. <version>5.1.32</version>
  6. </dependency>
  7. //c3p0数据源
  8. <dependency>
  9. <groupId>c3p0</groupId>
  10. <artifactId>c3p0</artifactId>
  11. <version>0.9.1.2</version>
  12. </dependency>
  13. //druid数据源
  14. <dependency>
  15. <groupId>com.alibaba</groupId>
  16. <artifactId>druid</artifactId>
  17. <version>1.1.10</version>
  18. </dependency>
  19. <dependency>
  20. <groupId>junit</groupId>
  21. <artifactId>junit</artifactId>
  22. <version>4.11</version>
  23. <scope>test</scope>
  24. </dependency>
  25. </dependencies>

在test测试中创建类

  1. package com.test;
  2. import com.mchange.v2.c3p0.ComboPooledDataSource;
  3. import org.junit.Test;
  4. import java.sql.Connection;
  5. public class DateSourceTest {
  6. @Test
  7. public void test1() throws Exception{
  8. ComboPooledDataSource dataSource=new ComboPooledDataSource();
  9. dataSource.setDriverClass("com.mysql.jdbc.Driver");
  10. //访问数据库中kc_db01库
  11. dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/kc_db01");
  12. //数据库的账号密码
  13. dataSource.setUser("root");
  14. dataSource.setPassword("123456");
  15. Connection connection=dataSource.getConnection();
  16. System.out.println(connection);
  17. connection.close();
  18. }
  19. }

运行结果

打印出地址说明连接成功

**测试连接druid **

  1. @Test
  2. public void test2() throws Exception{
  3. DruidDataSource dataSource=new DruidDataSource();
  4. dataSource.setDriverClassName("com.mysql.jdbc.Driver");
  5. //访问数据库中kc_db01库
  6. dataSource.setUrl("jdbc:mysql://localhost:3306/kc_db01");
  7. //数据库的账号密码
  8. dataSource.setUsername("root");
  9. dataSource.setPassword("123456");
  10. Connection connection=dataSource.getConnection();
  11. System.out.println(connection);
  12. connection.close();
  13. }

 加载配置文件方式创建

在resource资源下创建一个MyJdbc.properties文件测试c3p0数据源)

内容是:

  1. jdbc.driver=com.mysql.jdbc.Driver
  2. jdbc.url=jdbc:mysql://localhost:3306/kc_db01
  3. jdbc.username=root
  4. jdbc.password=123456

在测试类中:

  1. @Test
  2. //测试手动创建c3p0数据库源(加载properties配置文件)
  3. public void test3() throws Exception{
  4. //读取配置文件,获取的参数是你设置的配置文件的名字,
  5. ResourceBundle rb=ResourceBundle.getBundle("MyJdbc");
  6. String driver=rb.getString("jdbc.driver");
  7. String url=rb.getString("jdbc.url");
  8. String username=rb.getString("jdbc.username");
  9. String password=rb.getString("jdbc.password");
  10. //创建数据源对象,设置连接参数
  11. ComboPooledDataSource dataSource=new ComboPooledDataSource();
  12. dataSource.setDriverClass(driver);
  13. dataSource.setJdbcUrl(url);
  14. dataSource.setUser(username);
  15. dataSource.setPassword(password);
  16. Connection connection=dataSource.getConnection();
  17. System.out.println(connection);
  18. connection.close();
  19. }

运行结果:

配置文件的好处有给程序解耦,打完包之后不会变化,程序打完包都是对应的字节码文件,而配置文件还是原模原样。

将DateSource的创建权交给Spring容器去完成

先在pom.xml导入spring的基本坐标

  1. <dependency>
  2. <groupId>org.springframework</groupId>
  3. <artifactId>spring-context</artifactId>
  4. <version>5.0.5.RELEASE</version>
  5. </dependency>

在resource资源下创建ApplicationContext.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
  5. <!--这个value是ComboPooledDataSource数据源的路径 -->
  6. <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
  7. <!--这里面的name值是数据源中的set的内容-->
  8. <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
  9. <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/kc_db01"></property>
  10. <property name="user" value="root"></property>
  11. <property name="password" value="123456"></property>
  12. </bean>
  13. </beans>

在DataSourceTest类下

  1. @Test
  2. public void test4() throws Exception{
  3. ApplicationContext app=new ClassPathXmlApplicationContext("applicationContext.xml");
  4. // DataSource dataSource= (DataSource) app.getBean("dataSource");
  5. DataSource dataSource= app.getBean(DataSource.class);
  6. Connection connection=dataSource.getConnection();
  7. System.out.println(connection);
  8. connection.close();
  9. }

运行结果

抽取jdbc配置文件

applicationContext.xml加载jdbc.properties配置文件获得连接信息

首先,需要引入context命名空间和约束路径:

命名空间:

  1. xmlns:context="http://www.springframework.org/schema/context"

约束路径:

  1. http://www.springframework.org/schema/context
  2. http://www.springframework.org/schema/context/spring-context.xsd

applicationContext.xml文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xsi:schemaLocation=
  6. "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  7. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
  8. <!-- 加载外部properties文件 -->
  9. <context:property-placeholder location="classpath:MyJdbc.properties"/>
  10. <!--这个value是ComboPooledDataSource数据源的路径 -->
  11. <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
  12. <!--这里面的name值是数据源中的set的内容-->
  13. <property name="driverClass" value="${jdbc.driver}"></property>
  14. <property name="jdbcUrl" value="${jdbc.url}"></property>
  15. <property name="user" value="${jdbc.username}"></property>
  16. <property name="password" value="${jdbc.password}"></property>
  17. </bean>
  18. </beans>

MyJdbc.properties文件下

  1. jdbc.driver=com.mysql.jdbc.Driver
  2. jdbc.url=jdbc:mysql://localhost:3306/kc_db01
  3. jdbc.username=root
  4. jdbc.password=123456

类中代码不变,运行结果为

相关文章