SpringBoot (八) :Spring Boot多数据源(JdbcTemplate)配置与使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012081441/article/details/80746538

什么是JdbcTemplate

为了使 JDBC 更加易于使用,Spring 在 JDBCAPI 上定义了一个抽象层, 以此建立一个JDBC存取框架.
作为 SpringJDBC 框架的核心, JDBC 模板的设计目的是为不同类型的JDBC操作提供模板方法. 每个模板方法都能控制整个过程,并允许覆盖过程中的特定任务.通过这种方式,可以在尽可能保留灵活性的情况下,将数据库存取的工作量降到最低.

JdbcTemplate主要提供以下五类方法:
execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句;
update方法及batchUpdate方法:update方法用于执行新增、修改、删除等语句;batchUpdate方法用于执行批处理相关语句;
query方法及queryForXXX方法:用于执行查询相关语句;
call方法:用于执行存储过程、函数相关语句。

说在前面

之前有整合过SpringBoot+JdbcTemplate和SpringBoot+mybatis,都使用了单数据源。在单数据源的情况下,Spring Boot的配置非常简单,只需要在application.properties文件中配置连接参数即可。但是往往随着业务量发展,我们通常会进行数据库拆分或是引入其他数据库,从而我们需要配置多个数据源,下面基于之前的JdbcTemplate介绍下多数据源的配置方式。

项目结构

这里写图片描述

代码实现

1、pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.fit</groupId>
  <artifactId>SpringBootJdbcTemplate</artifactId>
  <version>0.0.1-SNAPSHOT</version>
   <!-- SpringBoot父类依赖引用 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.2.RELEASE</version>
    </parent>
    <dependencies>
    <!-- jdbc-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>
    <!-- mysql-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    <version>5.1.21</version>
    </dependency>
        <!-- SpringBoot web 组件 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
</project>

2、application.properties文件

#primary
spring.datasource.primary.url=jdbc:mysql://127.0.0.1:3306/mydb
spring.datasource.primary.username=root
spring.datasource.primary.password=root
spring.datasource.primary.driver-class-name=com.mysql.jdbc.Driver

#secondary
spring.datasource.secondary.url=jdbc:mysql://127.0.0.1:3306/mydb1
spring.datasource.secondary.username=root
spring.datasource.secondary.password=root
spring.datasource.secondary.driver-class-name=com.mysql.jdbc.Driver

3、DataSourceConfig.java文件

/**
 * 数据源配置
 * @author zlzhaoe
 *
 */
@Configuration
public class DataSourceConfig {

    @Bean(name = "primaryDataSource")
    @Qualifier("primaryDataSource")
    @ConfigurationProperties(prefix="spring.datasource.primary")
    public DataSource primaryDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "secondaryDataSource")
    @Qualifier("secondaryDataSource")
    @Primary
    @ConfigurationProperties(prefix="spring.datasource.secondary")
    public DataSource secondaryDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "primaryJdbcTemplate")
    public JdbcTemplate primaryJdbcTemplate(
            @Qualifier("primaryDataSource") DataSource dataSource) {
        return new JdbcTemplate(dataSource);
    }

    @Bean(name = "secondaryJdbcTemplate")
    public JdbcTemplate secondaryJdbcTemplate(
            @Qualifier("secondaryDataSource") DataSource dataSource) {
        return new JdbcTemplate(dataSource);
    }
}

4、com.fit.service层

public interface UserService {
    public List<Map<String, Object>> primaryUserList();
    public List<Map<String, Object>> secondaryUserList();
}

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    @Qualifier("primaryJdbcTemplate")
    private JdbcTemplate primaryJdbcTemplate;

    @Autowired
    @Qualifier("secondaryJdbcTemplate")
    private JdbcTemplate secondaryJdbcTemplate;

    public List<Map<String, Object>> primaryUserList() {
        // TODO Auto-generated method stub
        String sql = "select * from sys_user";
        List<Map<String, Object>> userList = primaryJdbcTemplate.queryForList(sql);
        return userList;
    }
    public List<Map<String, Object>> secondaryUserList() {
        // TODO Auto-generated method stub
        String sql = "select * from sys_user";
        List<Map<String, Object>> userList = secondaryJdbcTemplate.queryForList(sql);
        return userList;
    }

}

5、UserController.java

@Controller
public class UserController {

    @Resource
    private UserService userService;

    @ResponseBody
    @RequestMapping(value = "primaryUserList")
    public List<Map<String, Object>> userList() {
        return userService.primaryUserList();
    }
    @ResponseBody
    @RequestMapping(value = "secondaryUserList")
    public List<Map<String, Object>> secondaryUserList() {
        return userService.secondaryUserList();
    }
}

6、APP.java文件

@SpringBootApplication
public class APP {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        SpringApplication.run(APP.class, args);
    }
}

源码下载

猜你喜欢

转载自blog.csdn.net/u012081441/article/details/80746538