SpringBoot-14-JdbcTemplate多数据源操作
在上一章节中我们已经介绍了在Springboot中使用JdbcTemplate来完成对mysql数据库的基本操作,本章节主要介绍当我们在项目中需要使用多个数据源的时候JdbcTemplate是怎么进行配置的。本章节是在上章节代码使用JdbcTemplate链接Mysql数据库基础上进行修改的。
1.JdbcTemplate多数据源配置
在application.yml
中设置我们要链接的数据库配置,例子如下:
server: port: 8899 spring: datasource: primary: jdbc-url: jdbc:mysql://localhost:3306/mybatis?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=utf-8&useSSL=false username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver second: jdbc-url: jdbc:mysql://localhost:3306/verse?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=utf-8&useSSL=false username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver
注:
在配置多数据源的时候,和单数据源区别在于spring:datasource后多设置一个数据源名称,例如primary,second来区分数据库来源。
在SpringBoos多数据源配置url中SpringBoot1.x和SpringBoot2.X有区别,SpringBoot1.x使用url进行链接,SpringBoot2.X使用jdbc-url进行链接。
2.对JBDC数据源进行初始化配置
在application.yml中配置过多数据源信息以后,我们需要创建一个配置类去加载这些配置信息,用来对数据库初始化。
@Configuration public class MyDataSourceConfiguration { /** * 使用Primary来表示主数据有 * @return */ @Primary @Bean @ConfigurationProperties(prefix = "spring.datasource.primary") public DataSource primaryDataSource() { return DataSourceBuilder.create().build(); } @Bean @ConfigurationProperties(prefix = "spring.datasource.second") public DataSource secondDataSource() { return DataSourceBuilder.create().build(); } @Bean public JdbcTemplate primaryJdbcTemplate(@Qualifier("primaryDataSource") DataSource primaryDataSource) { return new JdbcTemplate(primaryDataSource); } @Bean public JdbcTemplate secondJdbcTemplate(@Qualifier("secondDataSource") DataSource secondaryDataSource) { return new JdbcTemplate(secondaryDataSource); } }
注:
- @Primary表示主数据源,在不指定数据源的情况下使用主数据源
- 为什么不用
@Qualifier
指定?当我们不指定的时候,会采用参数的名字来查找Bean,存在的话就注入。 - 当我们创建Bean的时候,默认会使用方法名称来作为Bean的名称,所以这里就对应上了
在service层进行修改代码
@AllArgsConstructor @Service public class StudentServiceImpl implements StudentService { private JdbcTemplate primaryJdbcTemplate; private JdbcTemplate secondJdbcTemplate; @Override public List<Student> getAllSutdents() { List<Student> students = primaryJdbcTemplate.query("select name,sex,age,mobile,email from student where is_enabled=1", (resultSet, i) -> { Student stu = new Student(); stu.setName(resultSet.getString("name")); stu.setSex(resultSet.getString("sex")); stu.setAge(resultSet.getInt("age")); stu.setMobile(resultSet.getString("mobile")); stu.setEmail(resultSet.getString("email")); return stu; }); return students; } @Override public int Create(String name,String sex, int age,String mobile, String email) { int update = primaryJdbcTemplate.update("INSERT INTO student(name ,sex,age,mobile,email) VALUES(?,?,?,?,?)", name, sex, age, mobile, email); return update; } @Override public int deleteByName(String name) { return primaryJdbcTemplate.update("update student set is_enabled=0 where name = ?", name); } }
以上就是我介绍的JdbcTemplate对多数据源操作,代码测试可以通过http://localhost:8899/student/方法的方式进行测试。
如果您觉得本文不错,欢迎关注我支持,您的关注是我坚持的动力!