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中的配置生成两个数据源:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | @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实例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | @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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | @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 多数据源
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程
2018-05-26 pagehelper 使用
2018-05-26 jackson json转对象 对象转json