SpringBoot学习之应用开发篇(二)1.3 - 配置Druid多数据源

目录

一、配置Druid多数据源

1、pom.xml引入依赖

2、application-dev.properties多数据源配置

2-1、配置MySQL数据源

2-2、配置Oracle数据源

3、测试程序开发

4、测试接口

5、显示测试结果

5-1、项目目录

5-2、开始测试


一、配置Druid多数据源

1、pom.xml引入依赖

说明:前三个依赖jar之前有被引入过,如果有引入则无需再追加。

<!-- MyBatis依赖:持久层框架,简化了持久层的开发 -->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.0.0</version>
</dependency>

<!-- Druid数据源:连接池配置 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.22</version>
</dependency>

<!-- MySql驱动 -->
<dependency>
    <groupId>mysql</groupId>    
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>

<!-- Oracle驱动 -->
<dependency>
    <groupId>com.oracle</groupId>
    <artifactId>ojdbc6</artifactId>
    <version>11.2.0.1.0</version>
</dependency>

2、application-dev.properties多数据源配置

说明:① spring.datasource.druid.mysql.type中的mysql只是标识,也可以替换成one,同理oracle也是一样的意思。

② 配置都是在前面章节的基础上叠加的,不存在删除(如果有删除会说明的

2-1、配置MySQL数据源

# ######################## MySQL数据源1基本配置,使用druid数据源 ########################
spring.datasource.druid.mysql.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.druid.mysql.url=jdbc:mysql://localhost:3306/database?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
spring.datasource.druid.mysql.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.druid.mysql.username=root
spring.datasource.druid.mysql.password=123456

2-2、配置Oracle数据源

# ######################## Oracle数据源2基本配置,使用druid数据源 ########################
spring.datasource.druid.oracle.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.druid.oracle.url=jdbc:oracle:thin:@localhost:1521:ORCL
spring.datasource.druid.oracle.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.datasource.druid.oracle.username=dev
spring.datasource.druid.oracle.password=dev

3、测试程序开发

① 代码配置了一个名为mysqlDataSource的数据源,对应application.properties中spring.datasource.druid.mysql前缀配置的数据库,然后创建了一个名为mysqlSqlSessionFactory的Bean,并且注入了mysqlDataSource。(同oracle)

② PACKAGE:MySQL数据库对应的mapper接口地址;MAPPER_LOCATION:对应的mapper xml文件路径。

③ @Primary:标志这个Bean如果在多个同类Bean候选时,该Bean优先被考虑。多数据源配置的时候,必须要有一个主数据源,用@Primary标志该Bean。

④ 因为使用了多数据源,所以原配置不能使用(如果不注释以下内容,启动会报错,因为配置中已经使用了数据源

    org.springboot.springboot01.mapper.StudentMapper 接口注释

   

    org.springboot.springboot01.service.StudentService 接口注释部分方法

   

    org.springboot.springboot01.service.impl.StudentServiceImpl 实现类注释部分方法

   

    org.springboot.springboot01.controller.TestController注释调用StudentService 被注释的方法

   

3-1、新增org.springboot.springboot01.datasource包,在其下添加MysqlDatasourceConfigOracleDatasourceConfig配置类

// MySQL数据源配置类
@Configuration
@MapperScan(basePackages = MysqlDatasourceConfig.PACKAGE, sqlSessionFactoryRef = "mysqlSqlSessionFactory")
public class MysqlDatasourceConfig {
    // mysqldao扫描路径(无此包名,则新增)
    static final String PACKAGE = "org.springboot.springboot01.mysqldao";
    // mybatis mapper扫描路径(无此包名,则新增)
    private static final String MAPPER_LOCATION = "classpath:mapper/mysql/*.xml";

    @Primary
    @Bean(name = "mysqlDataSource")
    @ConfigurationProperties("spring.datasource.druid.mysql")
    public DataSource mysqlDataSource() {
        return DruidDataSourceBuilder.create().build();
    }

    @Primary
    @Bean(name = "mysqlTransactionManager")
    public DataSourceTransactionManager mysqlTransactionManager() {
        return new DataSourceTransactionManager(mysqlDataSource());
    }

    @Primary
    @Bean(name = "mysqlSqlSessionFactory")
    public SqlSessionFactory mysqlSqlSessionFactory(@Qualifier("mysqlDataSource") DataSource dataSource) throws Exception {
        final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(dataSource);
        // 如果不使用xml的方式配置mapper,则可以省去下面这行mapper location的配置。
        sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(MysqlDatasourceConfig.MAPPER_LOCATION));
        return sessionFactory.getObject();
    }
}


// Oracle数据源配置
@Configuration
@MapperScan(basePackages = OracleDatasourceConfig.PACKAGE, sqlSessionFactoryRef = "oracleSqlSessionFactory")
public class OracleDatasourceConfig {
    // mysqldao扫描路径(无此包名,则新增)
    static final String PACKAGE = "org.springboot.springboot01.oracledao";
    // mybatis mapper扫描路径(无此包名,则新增)
    private static final String MAPPER_LOCATION = "classpath:mapper/oracle/*.xml";

    @Bean(name = "oracleDataSource")
    @ConfigurationProperties("spring.datasource.druid.oracle")
    public DataSource oracleDataSource() {
        return DruidDataSourceBuilder.create().build();
    }

    @Bean(name = "oracleTransactionManager")
    public DataSourceTransactionManager oracleTransactionManager() {
        return new DataSourceTransactionManager(oracleDataSource());
    }

    @Bean(name = "oracleSqlSessionFactory")
    public SqlSessionFactory oracleSqlSessionFactory(@Qualifier("oracleDataSource") DataSource dataSource) throws Exception {
        final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(dataSource);
        // 如果不使用xml的方式配置mapper,则可以省去下面这行mapper location的配置。
        sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(OracleDatasourceConfig.MAPPER_LOCATION));
        return sessionFactory.getObject();
    }
}

3-2、新增org.springboot.springboot01.mysqldao和org.springboot.springboot01.oracledao包,并其路径下添加MysqlStudentMapperOracleStudentMapper接口

// mysql操作数据库表接口(@Mapper可以去掉,因为在配置的时候就有扫描到它了)
@Mapper
public interface MysqlStudentMapper {
    /**
     * 获取所有学生信息
     * @return List<Map<String, Object>>
     */
    List<Map<String, Object>> getAllStudents();

    /**
     * 获取所有学生信息
     * @return List<Student>
     */
    List<Student> listAllStudent();
}

// oracle操作数据库表接口(@Mapper可以去掉,因为在配置的时候就有扫描到它了)
@Mapper
public interface OracleStudentMapper {
    /**
     * 获取所有学生信息
     * @return List<Map<String, Object>>
     */
    List<Map<String, Object>> getAllStudents();

    /**
     * 获取所有学生信息
     * @return List<Student>
     */
    List<Student> listAllStudent();
}

3-3、创建mapper接口对应的实现

<!-- 1. 在src/main/resource/mapper/mysql/路径下创建MysqlStudentMapper.xml -->
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.springboot.springboot01.mysqldao.MysqlStudentMapper">
    <resultMap id="BaseResultMap" type="org.springboot.springboot01.bean.Student">
        <id column="ID" jdbcType="DECIMAL" property="id" />
        <result column="NAME" jdbcType="VARCHAR" property="name" />
        <result column="SEX" jdbcType="VARCHAR" property="sex" />
    </resultMap>

    <select id="getAllStudents" resultType="java.util.Map">
        select * from student
    </select>

    <select id="listAllStudent" resultMap="BaseResultMap">
        select id, name from student
    </select>
</mapper>

<!-- 2. 在src/main/resource/mapper/oracle/路径下创建OracleStudentMapper.xml -->
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.springboot.springboot01.oracledao.OracleStudentMapper">
    <resultMap id="BaseResultMap" type="org.springboot.springboot01.bean.Student">
        <id column="ID" jdbcType="DECIMAL" property="id" />
        <result column="NAME" jdbcType="VARCHAR" property="name" />
        <result column="SEX" jdbcType="VARCHAR" property="sex" />
    </resultMap>

    <select id="getAllStudents" resultType="java.util.Map">
        select * from student
    </select>

    <select id="listAllStudent" resultMap="BaseResultMap">
        select id, name from student
    </select>
</mapper>

4、测试接口

// 1. 在org.springboot.springboot01.service.StudentService接口类中,加入方法
List<Map<String, Object>> getAllStudentsFromOracle();

List<Student> listAllStudentFromOracle();

List<Map<String, Object>> getAllStudentsFromMysql();

List<Student> listAllStudentFromMysql();


// 2. 在org.springboot.springboot01.service.impl.StudentServiceImpl类中,实现接口方法
@Resource
private MysqlStudentMapper mysqlStudentMapper;
@Resource
private OracleStudentMapper oracleStudentMapper;

@Override
public List<Map<String, Object>> getAllStudentsFromOracle() {
    return oracleStudentMapper.getAllStudents();
}

@Override
public List<Student> listAllStudentFromOracle() {
    return oracleStudentMapper.listAllStudent();
}

@Override
public List<Map<String, Object>> getAllStudentsFromMysql() {
    return mysqlStudentMapper.getAllStudents();
}

@Override
public List<Student> listAllStudentFromMysql() {
    return mysqlStudentMapper.listAllStudent();
}


// 3. 新增org.springboot.springboot01.controller.StudentController接口类,并提供对外方法
@RestController
public class StudentController {
    @Resource
    private StudentService studentService;

    @RequestMapping("/getAllStudentsFromOracle")
    public List<Map<String, Object>> getAllStudentsFromOracle() {
        return studentService.getAllStudentsFromOracle();
    }

    @RequestMapping("/listAllStudentFromOracle")
    public List<Student> listAllStudentFromOracle() {
        return studentService.listAllStudentFromOracle();
    }

    @RequestMapping("/getAllStudentsFromMysql")
    public List<Map<String, Object>> getAllStudentsFromMysql() {
        return studentService.getAllStudentsFromMysql();
    }

    @RequestMapping("/listAllStudentFromMysql")
    public List<Student> listAllStudentFromMysql() {
        return studentService.listAllStudentFromMysql();
    }
}

5、显示测试结果

5-1、项目目录

5-2、开始测试

① 测试地址:http://127.0.0.1:8080/springboot/getAllStudentsFromOracle

② 测试地址:http://127.0.0.1:8080/springboot/listAllStudentFromMysql

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员的微笑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值