【Spring笔记】三、Spring配置数据源(数据库连接池)


Spring配置数据源(数据库连接池)的方法

1、数据源(连接池)

  • 数据库连接池可以提高程序性能
  • 提前实例化连接池,初始化部分连接资源
  • 使用连接资源时,从连接池中获取
  • 使用完毕后将连接资源归还给数据源

常见数据源:DBCP、C3P0、Druid

2、数据库连接池开发步骤

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

手动创建C3P0连接池

pom.xml

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.46</version>
</dependency>
<dependency>
    <groupId>c3p0</groupId>
    <artifactId>c3p0</artifactId>
    <version>0.9.1.2</version>
</dependency>

单元测试

public void test1() throws Exception {
    ComboPooledDataSource dataSource = new ComboPooledDataSource();
    dataSource.setDriverClass("com.mysql.jdbc.Driver");
    dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/");
    dataSource.setUser("root");
    dataSource.setPassword("123456");
    Connection connection = dataSource.getConnection();
    System.out.println(connection);
    //com.mchange.v2.c3p0.impl.NewProxyConnection@511baa65
    connection.close();
}

手动创建Druid连接池

pom.xml

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.46</version>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.10</version>
</dependency>

单元测试

public void test2() throws Exception {
    DruidDataSource dataSource = new DruidDataSource();
    dataSource.setDriverClassName("com.mysql.jdbc.Driver");
    dataSource.setUrl("jdbc:mysql://localhost:3306/");
    dataSource.setUsername("root");
    dataSource.setPassword("123456");
    Connection connection = dataSource.getConnection();
    System.out.println(connection);
    //com.mysql.jdbc.JDBC4Connection@233c0b17
    connection.close();
}

手动创建C3P0连接池,加载配置文件

resources目录下创建jdbc.properties文件

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test
jdbc.username=root
jdbc.password=123456
    public void test3() throws Exception {
//       读取配置文件
        ResourceBundle resourceBundle = ResourceBundle.getBundle("jdbc");
        String driver = resourceBundle.getString("jdbc.driver");
        String url = resourceBundle.getString("jdbc.url");
        String username = resourceBundle.getString("jdbc.username");
        String password = resourceBundle.getString("jdbc.password");
//      创建数据源对象 设置连接参数
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        dataSource.setDriverClass(driver);
        dataSource.setJdbcUrl(url);
        dataSource.setUser(username);
        dataSource.setPassword(password);
        Connection connection = dataSource.getConnection();
        System.out.println("connection = " + connection);
        connection.close();
    }

3、Spring产生数据源

可将DataSource的创建交由Spring去创建

1、pom.xml下导入Spring依赖

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.0.5.RELEASE</version>
</dependency>

2、pom.xml下导入数据源依赖、数据库驱动依赖

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.46</version>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.10</version>
</dependency>

3、在resources目录下新建applicationContext.xml

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/test"/>
    <property name="username" value="root"/>
    <property name="password" value="123456"/>
</bean>

4、Spring容器产生数据源对象

public void test4() throws Exception {
    ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
    DataSource dataSource = app.getBean(DataSource.class);
    Connection connection = dataSource.getConnection();
    System.out.println(connection);
    //com.mysql.jdbc.JDBC4Connection@797badd3
    connection.close();
}

4、Spring抽取jdbc配置文件

resources目录下创建jdbc.properties文件

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test
jdbc.username=root
jdbc.password=123456

Spring配置文件的beans标签加入如下属性

 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"

配置完如下

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       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">

Spring容器加载properties文件

<context:property-placeholder location="classpath:jdbc.properties"/>
<property name="xxx" value="${key}"/>
<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>

此时${key}就代表jdbc.properties文件中的key对应的value

单元测试

public void test4() throws Exception {
    ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
    DataSource dataSource = app.getBean(DataSource.class);
    Connection connection = dataSource.getConnection();
    System.out.println(connection);
    //com.mysql.jdbc.JDBC4Connection@75f9eccc
    connection.close();
}

如需更多知识点请前往我的Spring学习笔记专栏

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MybatisPlus是一个基于Mybatis的增强工具,它提供了很多实用的功能,其包括多数据源配置。在配置数据源时,需要先在配置文件定义多个数据源的连接信息,然后在代码通过@Configuration注解和@Bean注解来创建多个数据源的实例。在创建数据源实例时,可以使用@ConfigurationProperties注解来指定数据源的连接信息,例如数据库的URL、用户名、密码等。接着,需要在MybatisPlus的配置文件配置多个SqlSessionFactory和TransactionManager,以便在不同的数据源之间进行切换。最后,在需要使用多数据源的地方,可以通过@Qualifier注解来指定使用哪个数据源。 具体的实现步骤可以参考以下方法: 1.在配置文件定义多个数据源的连接信息,例如: spring.datasource.api3.url=jdbc:mysql://192.168.25.134:3306/test spring.datasource.api3.username=root spring.datasource.api3.password=123456 spring.datasource.api4.url=jdbc:mysql://192.168.25.166:3306/test spring.datasource.api4.username=root spring.datasource.api4.password=123456 2.在代码创建多个数据源的实例,例如: @Configuration public class DataSourceConfig { @Bean @ConfigurationProperties(prefix = "spring.datasource.api3") public DataSource dataSource2() { return DataSourceBuilder.create().build(); } @Bean @ConfigurationProperties(prefix = "spring.datasource.api4") public DataSource dataSource3() { return DataSourceBuilder.create().build(); } } 3.在MybatisPlus的配置文件配置多个SqlSessionFactory和TransactionManager,例如: @Configuration @MapperScan(basePackages = {"com.example.demo.mapper"}) public class MybatisPlusConfig { @Bean(name = "api3SqlSessionFactory") public SqlSessionFactory api3SqlSessionFactory(@Qualifier("dataSource2") DataSource dataSource) throws Exception { MybatisSqlSessionFactoryBean factoryBean = new MybatisSqlSessionFactoryBean(); factoryBean.setDataSource(dataSource); return factoryBean.getObject(); } @Bean(name = "api4SqlSessionFactory") public SqlSessionFactory api4SqlSessionFactory(@Qualifier("dataSource3") DataSource dataSource) throws Exception { MybatisSqlSessionFactoryBean factoryBean = new MybatisSqlSessionFactoryBean(); factoryBean.setDataSource(dataSource); return factoryBean.getObject(); } @Bean(name = "api3TransactionManager") public DataSourceTransactionManager api3TransactionManager(@Qualifier("dataSource2") DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } @Bean(name = "api4TransactionManager") public DataSourceTransactionManager api4TransactionManager(@Qualifier("dataSource3") DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } } 4.在需要使用多数据源的地方,通过@Qualifier注解来指定使用哪个数据源,例如: @Service public class UserServiceImpl implements UserService { @Autowired @Qualifier("api3SqlSessionFactory") private SqlSessionFactory api3SqlSessionFactory; @Autowired @Qualifier("api4SqlSessionFactory") private SqlSessionFactory api4SqlSessionFactory; @Override public List<User> getUserListFromApi3() { SqlSession sqlSession = new SqlSessionTemplate(api3SqlSessionFactory); UserMapper userMapper = sqlSession.getMapper(UserMapper.class); return userMapper.getUserList(); } @Override public List<User> getUserListFromApi4() { SqlSession sqlSession = new SqlSessionTemplate(api4SqlSessionFactory); UserMapper userMapper = sqlSession.getMapper(UserMapper.class); return userMapper.getUserList(); } }

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值