Spring Boot 整合持久层技术——使用JdbcTemlate实现多数据源操作

这里使用 阿里云ESC CentOS7 服务器,MySQL版本为5.6.47
可能会用到:Navicat远程连接Mysql

一、创建数据库

在这里插入图片描述
在这里插入图片描述

二、依赖选用

在这里插入图片描述
Spring帮助我们导入依赖之后,我们需要对依赖进行增加和修改

 <dependency>
    <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-jdbc</artifactId>
 </dependency>
 
 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-web</artifactId>
 </dependency>

<!--    增加配置数据库连接池的依赖-->
 <dependency>
     <groupId>com.alibaba</groupId>
     <artifactId>druid-spring-boot-starter</artifactId>
     <version>1.1.10</version>
 </dependency>

 <dependency>
     <groupId>mysql</groupId>
     <artifactId>mysql-connector-java</artifactId>
     <scope>runtime</scope>
<!-- 加入对应mysql版本的mysql-connector-java版本-->
     <version>5.1.6</version>
 </dependency>
 

1.为什么加入数据库驱动版本号?

 因为Spring默认数据库驱动版本号是MySql 8.x的版本,而这里使用的是MySql 5.x的版本,如果默认和数据库版本号不对应会导致数据库无法连接。

2.MySQL JDBC驱动版本与MySQL数据库版本对应关系:

 Connector/J8.0.12支持Mysql8.0.12这些版本。
 Connector/J 5.1 支持Mysql 4.1、Mysql 5.0、Mysql 5.1、Mysql 6.0 alpha这些版本。
 Connector/J 5.0 支持MySQL 4.1、MySQL 5.0 servers、distributed transaction (XA)。
 Connector/J 3.1 支持MySQL 4.1、MySQL 5.0 servers、MySQL 5.0 except distributed transaction (XA) support。
 Connector/J 3.0 支持MySQL 3.x or MySQL 4.1。

 这里我用的是MySQL5.6.47,选用对用的版本即可;
在这里插入图片描述
 具体版本号对应的依赖可查看:Mavnrepository官网

3.alibaba数据库连接池依赖

druid-spring-boot-starter是依赖于spring-boot-starter的依赖,是alibaba专门为SpringBoot量身定做的,在我们使用多数据源的时候会用到它;alibaba也提供了单独的druid依赖,当然多数据源操作时不能选用此依赖。

<dependency>
     <groupId>com.alibaba</groupId>
     <artifactId>druid-spring-boot-starter</artifactId>
     <version>1.1.10</version>
 </dependency>

三、数据源配置

 单个数据源的时候我们在application.properties里做如下配置

#远程数据库连接
spring.datasource.url=jdbc:mysql://121.40.83.80:3306/testdb1
#数据库用户名
spring.datasource.username=root
#数据库密码
spring.datasource.password=123456
#数据源类型
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

 多个数据源的时候我们要进行如下配置

spring.datasource.noe.url=jdbc:mysql://121.40.83.80:3306/testdb1
spring.datasource.noe.username=root
spring.datasource.noe.password=123456
spring.datasource.noe.type=com.alibaba.druid.pool.DruidDataSource

spring.datasource.two.url=jdbc:mysql://121.40.83.80:3306/testdb2
spring.datasource.two.username=root
spring.datasource.two.password=123456
spring.datasource.two.type=com.alibaba.druid.pool.DruidDataSource

 但是,当我们加入.one.two之后,Spring的自动化配置已经失效,这时,我们需要新建config包进行手动配置datasourcejdbctemplate
在这里插入图片描述

  • DataSourceConfig

@Configuration
public class DataSourceConfig {
    @Bean
    //类型安全的属性注入,选择相应的配置文件
    @ConfigurationProperties(prefix = "spring.datasource.noe")
    DataSource dsOne(){
        return DruidDataSourceBuilder.create().build();
    }
    @Bean
    //类型安全的属性注入,选择相应的配置文件
    @ConfigurationProperties(prefix = "spring.datasource.two")
    DataSource dsTwo(){
        return DruidDataSourceBuilder.create().build();
    }
}
  • JdbcTemplateConfig

@Configuration
public class JdbcTemplateConfig {
    @Bean
    JdbcTemplate jdbcTemplateOne(@Qualifier("dsOne")DataSource dsOne){
        return new JdbcTemplate(dsOne);
    }

    @Bean
    JdbcTemplate jdbcTemplateTwo(@Qualifier("dsTwo")DataSource dsTwo){
        return new JdbcTemplate(dsTwo);
    }
}

四、单元测试

@SpringBootTest
class JdbctemplateApplicationTests {

    //注入相应配置类方法一:
    @Autowired
    @Qualifier("jdbcTemplateOne")
    JdbcTemplate jdbcTemplateOne;

	//注入相应配置类方法二:
    @Resource(name = "jdbcTemplateTwo")
    JdbcTemplate jdbcTemplateTwo;

    @Test
    void contextLoads() {
        List<User> list1 = jdbcTemplateOne.query("select * from user", new BeanPropertyRowMapper<>(User.class));
        List<User> list2 = jdbcTemplateTwo.query("select * from user", new BeanPropertyRowMapper<>(User.class));
        System.out.println(list1);
        System.out.println(list2);
    }
}

在这里插入图片描述

发布了71 篇原创文章 · 获赞 102 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/qq_44717317/article/details/104114963