• SpringBoot 整合JdbcTemplate 多数据源


    多数据源

    所谓多数据源,就是一个Java EE项目中采用了不同数据库实例中的多个库,或者同一个数据库实例中多个不同的库。一般来说,采用MyCat等分布式数据库中间件是比较好的解决方案,这样可以把数据库读写分离、分库分表、备份等操作交给中间件去做,Java代码只需要专注于业务即可。不过,这并不意味着无法使用Java代码解决类似的问题,在Spring Framework中就可以配置多数据源,Spring Boot继承其衣钵,只不过配置方式有所变化

    因为一个JdbcTemplate对应一个DataSource,开发者只需要手动提供多个DataSource,再手动配置JdbcTemplate即可。

    添加如下依赖:

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-jdbc</artifactId>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid-spring-boot-starter</artifactId>
                <version>1.1.10</version>
            </dependency>

    这里添加的数据库连接池依赖是druid-spring-boot-starter。druid-spring-boot-starter可以帮助开发者在Spring Boot项目中轻松集成Druid数据库连接池和监控。

    配置数据库连接:

    spring:
      datasource:
        boot:
          type: com.alibaba.druid.pool.DruidDataSource
          url: jdbc:mysql://localhost:3306/boot?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
          username: root
          password: 123456
        boot2:
          type: com.alibaba.druid.pool.DruidDataSource
          url: jdbc:mysql://localhost:3306/boot2?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
          username: root
          password: 123456

    配置数据源:

    创建DataSourceConfig配置数据源,根据application.yml中的配置生成两个数据源:

    @Configuration
    public class DataSourceConfig {
    
        @Primary
        @Bean
        @ConfigurationProperties("spring.datasource.boot")
        DataSource dsOne() {
            return DruidDataSourceBuilder.create().build();
        }
    
        @Bean
        @ConfigurationProperties("spring.datasource.boot2")
        DataSource dsTwo() {
            return DruidDataSourceBuilder.create().build();
        }
    
    }
    

      

    配置JdbcTemplate:

    只要引入了spring-jdbc依赖,那么开发者没有提供JdbcTemplate实例时,Spring Boot默认会提供一个JdbcTemplate实例。现在配置多数据源时,由开发者自己提供JdbcTemplate实例

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

      

    创建BookController:

    @RestController
    public class BookController {
    
        @Resource(name = "jdbcTemplateOne")
        JdbcTemplate jdbcTemplate;
    
        @Autowired
        @Qualifier("jdbcTemplateTwo")
        JdbcTemplate jdbcTemplateTwo;
    
        @GetMapping("/test1")
        public void test1() {
            List<Book> books1 = jdbcTemplate.query("select * from book", new BeanPropertyRowMapper<>(Book.class));
            List<Book> books2 = jdbcTemplateTwo.query("select * from book", new BeanPropertyRowMapper<>(Book.class));
            System.out.println("books1:" + books1);
            System.out.println("books2:" + books2);
        }
    }
    

    简单起见,这里没有添加Service层,而是直接将JdbcTemplate注入到了Controller中。在Controller中注入两个不同的JdbcTemplate有两种方式:一种是使用@Resource注解,并指明name属性,即按name进行装配,此时会根据实例名查找相应的实例注入;另一种是使用@Autowired注解结合@Qualifier注解,效果等同于使用@Resource注解。

    文章来源:Spring Boot+Vue全栈开发实战 5.4 多数据源

  • 相关阅读:
    神秘现象?多种情况比较
    [备忘]C++BUILDER的文件操作
    缘起
    [备忘]一个二维数组的冒泡排序
    无可救药地买入NDSL
    递归的实质
    [网游计划第九、十天]能力有限,做些小品
    大学有救
    struts2+convertion实现struts.xml的零配置
    BSD下的超级终端
  • 原文地址:https://www.cnblogs.com/ooo0/p/16313193.html
Copyright © 2020-2023  润新知