多数据源配置JdbcTemplate(十五)中

简介: 多数据源配置JdbcTemplate(十五)

二.三 DataSource 和 JdbcTemplate 配置


SpringBoot 使用JdbcTemplate, 会默认创建 DataSource, JdbcTemplate


现在,这两个对象,需要我们自己手动配置。 不能让Spring 帮助我们创建了。


二.三.一 配置 DataSource


@Component
public class DataSourceConfig {
    /**
     * 创建 springboot 的数据库的数据源 DataSource
     * @return
     */
    @Bean("dataSourceOne")
    @ConfigurationProperties("spring.datasource.one")
    public DataSource dataSourceOne(){
        return DruidDataSourceBuilder.create().build();
    }
    /**
     * 创建 springboot2 的数据库的数据源 DataSource
     * @return
     */
    @Bean("dataSourceTwo")
    @ConfigurationProperties("spring.datasource.two")
    public DataSource dataSourceTwo(){
        return DruidDataSourceBuilder.create().build();
    }
}


二.三.二 配置 JdbcTemplate


@Component
public class JdbcTemplateConfig {
    /**
     * 创建数据库SpringBoot 对应的 JdbcTemplate.
     * 用 @Qualifier 注解 指定使用的是哪一个 Datasource
     * @param dataSourceOne
     * @return
     */
    @Bean("jdbcTemplateOne")
    JdbcTemplate jdbcTemplateOne(@Qualifier("dataSourceOne") DataSource dataSourceOne){
        return new JdbcTemplate(dataSourceOne);
    }
    /**
     * 创建数据库SpringBoot2 对应的 JdbcTemplate.
     * 用 @Qualifier 注解 指定使用的是哪一个 Datasource
     * @param dataSourceTwo
     * @return
     */
    @Bean("jdbcTemplateTwo")
    JdbcTemplate jdbcTemplateTwo(@Qualifier("dataSourceTwo") DataSource dataSourceTwo){
        return new JdbcTemplate(dataSourceTwo);
    }
}


二.四 验证 JdbcTemplate的多数据源配置


二.四.一 创建 service和对应的实现


只实现 插入 和查询全部数据的 实现,进行演示。


二.四.一.一 UserService 接口


public interface UserService {
    void addUser(User user);
    List<User> listUser();
    void addDept(Dept dept);
    List<Dept> listDept();
}


二.四.一.二 UserServiceImpl 实现类


@Service
public class UserServiceImpl implements UserService {
    // 数据源1  放置到 springboot 数据库里面
    @Resource
    private JdbcTemplate jdbcTemplateOne;
    //数据源2, 放置到 springboot2 数据库里面
    @Resource
    private JdbcTemplate jdbcTemplateTwo;
    @Override
    public void addUser(User user) {
        //1.sql语句
        String sql="insert into user(name,sex,age,description) values(?,?,?,?) ";
        //2.调用 update语句,执行方法
        jdbcTemplateOne.update(sql,user.getName(),user.getSex(),user.getAge(),
                user.getDescription());
    }
    @Override
    public List<User> listUser() {
        String sql = "select id,name,sex,age,description from user ";
        List<User> userList = jdbcTemplateOne.query(sql, new RowMapper<User>() {
            @Override
            public User mapRow(ResultSet resultSet, int num) throws SQLException {
                //根据resultSet 表示结果集, num 表示索引行
                User tempUser = new User();
                tempUser.setId(resultSet.getInt("id"));
                tempUser.setName(resultSet.getString("name"));
                tempUser.setSex(resultSet.getString("sex"));
                tempUser.setAge(resultSet.getInt("age"));
                tempUser.setDescription(resultSet.getString("description"));
                return tempUser;
            }
        });
        return userList;
    }
    @Override
    public void addDept(Dept dept) {
        //1.sql语句
        String sql="insert into dept(name) values(?) ";
        //2.调用 update语句,执行方法
        jdbcTemplateTwo.update(sql,dept.getName());
    }
    @Override
    public List<Dept> listDept() {
        String sql = "select id,name from dept ";
        List<Dept> deptList = jdbcTemplateTwo.query(sql, new RowMapper<Dept>() {
            @Override
            public Dept mapRow(ResultSet resultSet, int num) throws SQLException {
                //根据resultSet 表示结果集, num 表示索引行
                Dept tempDept = new Dept();
                tempDept.setId(resultSet.getInt("id"));
                tempDept.setName(resultSet.getString("name"));
                return tempDept;
            }
        });
        return deptList;
    }
}


注意,在引入 JdbcTemplate 后,执行方法的时候,需要手动指定数据源。


这个时候,数据源的使用,对开发者是有感的。


如果在查询 listDept() 时, 指定的是 jdbcTemplateOne 时,将会报错。


开发者在编写代码时,不能将数据源模板对象 JdbcTemplate 写错。


二.四.二 测试


二.四.二.一 创建测试类


@SpringBootTest
@Log4j2
public class MultipeDataSourceApplicationTests {
    @Autowired
    private UserService userService;
    @Test
    public void addUserTest(){
        //1. 构建对象
        User user=new User();
        user.setName("周小欢");
        user.setAge(22);
        user.setSex("女");
        user.setDescription("一个非常可爱的女孩纸");
        //2. 添加方法
        userService.addUser(user);
        log.info("添加员工成功");
    }
    @Test
    public void listUserTest(){
        List<User> userList=userService.listUser();
        userList.forEach(n->log.info(n));
    }
    @Test
    public void addDeptTest(){
        //1. 构建对象
        Dept dept=new Dept();
        dept.setName("信息管理部");
        //2. 添加方法
        userService.addDept(dept);
        log.info("添加部门成功");
    }
    @Test
    public void listDeptTest(){
        List<Dept> deptList=userService.listDept();
        deptList.forEach(n->log.info(n));
    }
    /**
     * 数据源切换配置
     */
    @Test
    public void allDataSourceTest(){
        addUserTest();
        listDeptTest();
        addDeptTest();
        listUserTest();
    }
}



相关文章
|
5月前
|
关系型数据库 数据库 数据安全/隐私保护
springboot+dynamic-datasource多数据源配置动态切换
springboot+dynamic-datasource多数据源配置动态切换
645 0
|
6月前
|
SQL Java 关系型数据库
SpringBoot整合JDBC与默认数据源
SpringBoot整合JDBC与默认数据源
77 0
|
XML Java 数据库连接
使用Spring JDBC中的JdbcTemplate对数据进行增删改查操作教程~
使用Spring JDBC中的JdbcTemplate对数据进行增删改查操作教程~
285 0
|
关系型数据库 MySQL Java
SpringBoot-14-JdbcTemplate多数据源操作
在上一章节中我们已经介绍了在Springboot中使用JdbcTemplate来完成对mysql数据库的基本操作,本章节主要介绍当我们在项目中需要使用多个数据源的时候JdbcTemplate是怎么进行配置的。本章节是在上章节代码使用JdbcTemplate链接Mysql数据库基础上进行修改的。
144 0
|
druid Oracle 架构师
SpringBoot从小白到精通(十四)使用JdbcTemplate操作数据库,配置多数据源!
Spring Boot 除了Mybatis数据库框架,还有JdbcTemplate等数据库操作框架,同样也比较简单实用,如果是一般简单的项目,用JdbcTemplate完全可以实现相关的数据库操作。它虽然没有MyBatis功能强大,但使用比较简单,JdbcTemplate应该算是最简单的数据持久化方案,所以下面就来给大家介绍Spring Boot 使用JdbcTemplate操作数据库,配置多数据源!
SpringBoot从小白到精通(十四)使用JdbcTemplate操作数据库,配置多数据源!
|
Java 关系型数据库 MySQL
springboot学习-使用JdbcTemplate操作MySQL数据库
springboot学习-使用JdbcTemplate操作MySQL数据库
279 0
springboot学习-使用JdbcTemplate操作MySQL数据库
|
Java 数据库 数据安全/隐私保护
多数据源配置JdbcTemplate(十五)上
工作中,在业务的发展或业务数据隔离的场景下,通常需要一个项目中引入多个数据源, 但SpringBoot默认的自动化配置是单数据源的,可以通过一些额外的配置,进行处理。
288 0
多数据源配置JdbcTemplate(十五)上
|
存储 Java 数据库
多数据源配置JdbcTemplate(十五)下
多数据源配置JdbcTemplate(十五)
175 0
多数据源配置JdbcTemplate(十五)下
|
Java 数据库连接 数据安全/隐私保护
多数据源配置MyBatis(十七)中
上一章简单介绍了多数据源配置Jpa(十六),如果没有看过,请观看上一章 工作中,在业务的发展或业务数据隔离的场景下,通常需要一个项目中引入多个数据源, 但SpringBoot默认的自动化配置是单数据源的,可以通过一些额外的配置,进行处理。
226 0
多数据源配置MyBatis(十七)中
|
存储 Java 数据库连接
多数据源配置MyBatis(十七)下
上一章简单介绍了多数据源配置Jpa(十六),如果没有看过,请观看上一章 工作中,在业务的发展或业务数据隔离的场景下,通常需要一个项目中引入多个数据源, 但SpringBoot默认的自动化配置是单数据源的,可以通过一些额外的配置,进行处理。
158 0
多数据源配置MyBatis(十七)下