有时候我们需要在程序中加载多个数据源,用spring jpa可以实现,网上有许多资料,要指定哪个包下面的类使用哪个数据源,个人觉得这种方式不够灵活,不是我想要的。我是想通过多个jdbcTemplate的实例,不同实例操作不同的数据源,甚至不同的实例操作同一类路径的实体对象。下面记录下,实现加载读写分离两个数据源的过程。
pom文件如下:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.1.RELEASE</version> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.6</version> </dependency> </dependencies>
application.properties配置文件:
spring.datasource.readwrite.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.readwrite.url=jdbc:mysql://10.1.1.190:3306/ubi?useUnicode=true&characterEncoding=utf-8&autoReconnect=true spring.datasource.readwrite.username=root spring.datasource.readwrite.password=park spring.datasource.readwrite.driver-class-name=com.mysql.jdbc.Driver spring.datasource.read.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.read.url=jdbc:mysql://10.1.1.190:3306/ubi?useUnicode=true&characterEncoding=utf-8&autoReconnect=true spring.datasource.read.username=root spring.datasource.read.password=park spring.datasource.read.driver-class-name=com.mysql.jdbc.Driver
程序启动时候,加载不同数据源,注入不同的jdbcTemplate实例:
package com.yame.ubi.config; import javax.sql.DataSource; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import org.springframework.jdbc.core.JdbcTemplate; @Configuration public class MultiDataSourceConfig { @Bean @Primary @ConfigurationProperties("spring.datasource.readwrite") public DataSourceProperties firstDataSourceProperties() { return new DataSourceProperties(); } @Bean("dataSource") @Primary @ConfigurationProperties("spring.datasource.readwrite") public DataSource firstDataSource() { return firstDataSourceProperties().initializeDataSourceBuilder().build(); } @Bean @ConfigurationProperties("spring.datasource.read") public DataSourceProperties secondDataSourceProperties() { return new DataSourceProperties(); } @Bean(name="readDatasource") @ConfigurationProperties("spring.datasource.read") public DataSource secondDataSource() { return secondDataSourceProperties().initializeDataSourceBuilder().build(); } @Bean @Primary public JdbcTemplate primaryJdbcTemplate(@Qualifier("dataSource") DataSource dataSource) { return new JdbcTemplate(dataSource); } @Bean(name = "readJdbcTemplate") public JdbcTemplate secondJdbcTemplate(@Qualifier("readDatasource") DataSource dataSource) { return new JdbcTemplate(dataSource); } }
声明bean的时候,主数据源强烈建议加上 @Primary注解,同时两个datasource,也要加上bean名称加以区分,否则会报各种各样的错误,如:@Bean("dataSource")和@Bean(name="readDatasource")
使用jdbcTemplate的时候,加上@Qualifier标明使用的是哪个数据源的连接:
package com.yame.ubi.dao; import java.util.Date; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Repository; @Repository public class MyBeanDao { @Autowired private JdbcTemplate jdbcTemplate; @Qualifier("readJdbcTemplate") @Autowired private JdbcTemplate jdbcTemplateReadOnly; public Map<String, Object> getRepacket(long id) { String sql = "SELECT * FROM ubi_receive_record WHERE id = ?"; Map<String, Object> map = jdbcTemplateReadOnly.queryForMap(sql, id); return map; } public int update(long userId, int bind) { String sql = "update ubi_receive_record set obd_bind = ?, update_time = ? where user_id = ?"; return jdbcTemplate.update(sql, bind, new Date(), userId); } }
代码:https://github.com/breezylee/lby/tree/master/ubi-cron
(忽略工程里面的定时任务,rabbitmq等配置)
相关推荐
在Spring Boot中,通过添加Mybatis Starter依赖,可以轻松配置数据源和Mapper接口,实现数据库的CRUD操作。在用户登录注册系统中,Mybatis用于处理用户信息的存储和查询。 三、Redis集成 Redis是一个高性能的键值...
值得注意的是,Spring Boot 2.0.1相较于之前的版本,引入了一些新的特性和改进,如更好的Actuator支持、对Java 9的兼容性以及Spring Framework 5的升级,这些都可能影响到MyBatis的集成和使用。因此,在实际项目中,...
它涵盖了数据源、缓存、JPA、WebSocket、Actuator等多个方面。 5. **Web开发**: 文档介绍了如何使用Spring MVC构建RESTful服务,包括控制器、视图解析、静态资源处理、模板引擎等。此外,还涉及了安全、国际化和...
在Spring Boot中整合MyBatis,我们需要在`pom.xml`中添加MyBatis及其依赖,然后创建配置文件`mybatis-config.xml`,配置数据源、事务管理器以及SqlSessionFactory。接着,我们可以使用注解来定义Mapper接口,编写...
在压缩包中,只列出了 "spring-boot" 这个文件名,这通常表示压缩包里包含了一个 Spring Boot 项目的源代码目录。在实际的项目结构中,我们可以期待看到以下文件和目录: 1. **src/main/java**: 存放 Java 源代码,...
这个压缩包文件包含了Spring Boot 2.1.4.RELEASE版本和MyBatis 2.0.1版本的集成示例,为初学者提供了一个很好的学习起点。下面将详细介绍这两个框架的整合过程及其核心知识点。 1. **Spring Boot 简介** Spring ...
Spring Boot 2.0.1引入了大量改进和新特性,如对Java 9的支持、Spring Framework 5的集成以及对WebFlux非阻塞反应式编程的支持等。 2. **统一返回**:项目可能包含一个全局的结果集封装类,用于标准化HTTP响应结果...
lenos(p为spring boot 2.0 版本扩展名)一款快速开发模块化脚手架,采用spring boot 2.0.1、spring、SpringMvc、mybatis、shiro、activiti工作流、swagger、ehcache、redis、quartz、freemarker、layui技术开发;...
lenos(p为spring boot 2.0 版本扩展名)一款快速开发模块化脚手架,采用spring boot 2.0.1、spring、SpringMvc、mybatis、shiro、activiti工作流、swagger、ehcache、redis、quartz、freemarker、layui技术开发;...
在本文中,我们将深入探讨如何将SpringBoot与Druid数据源和MyBatis集成,以连接到Gbase8s v8.7数据库。Gbase8s是一款高性能的关系型数据库管理系统,特别适合处理大规模数据。我们将使用Spring Boot 2.1.11版本,...
1. 优化pom文件中不全spring-boot-maven-plugin 因没有version节点导致idea提示错误 2. 添加完整的Crmeb-admin.jar和Cremb-front.jar启动和停止shell脚本 3. 修复文件导出可能出现错误的问题 4. 修复推广人列表可能...
通过 SpringBoot、MyBatis 和 Druid 配置动态数据源是一种常见的解决方案,它可以帮助开发者轻松地管理多个数据源,并提供了动态切换数据源的能力。在本文中,我们将通过示例代码详细介绍如何使用 SpringBoot、...
1. 优化pom文件中不全spring-boot-maven-plugin 因没有version节点导致idea提示错误 2. 添加完整的Crmeb-admin.jar和Cremb-front.jar启动和停止shell脚本 3. 修复文件导出可能出现错误的问题 4. 修复推广人列表可能...
- 配置流程引擎:在`application.yml`或`application.properties`中设置数据源,并声明Flowable的配置类,以启动流程引擎服务。 - 注册流程定义:将BPMN文件作为资源加载到应用中,Flowable会自动解析并注册流程...
这个系统的源代码版本为v2.0.1,它提供了丰富的功能和良好的用户体验,适用于企业网站、社区论坛等应用场景,帮助用户进行互动交流。 该系统的开发主要涉及以下几个核心知识点: 1. **多用户系统**:cuteBook支持...
通过这个项目,开发者可以学习到如何在Spring Boot环境中集成和使用Apache Olingo,创建一个支持OData的API服务,以及如何测试和调试这样的服务。同时,这也是提升Java、Spring和RESTful API设计技能的好机会。
1. 优化pom文件中不全spring-boot-maven-plugin 因没有version节点导致idea提示错误 2. 添加完整的Crmeb-admin.jar和Cremb-front.jar启动和停止shell脚本 3. 修复文件导出可能出现错误的问题 4. 修复推广人列表可能...
- **多数据源支持**:支持多种数据库如MySQL、Oracle等作为配置存储,同时支持远程配置中心如Git。 - **配置分组与命名空间**:提供配置分组和命名空间功能,便于管理复杂环境下的配置。 4. **API与SDK** Nacos...
- **插件机制**: 支持自定义数据源、审计、日志等插件,增强系统的灵活性。 8. **与其他技术的集成** - **Spring Boot**: 阿波罗与Spring Boot的无缝集成,使得Spring Boot应用能够轻松接入配置中心。 - **...
在Pitagorapp_2.0.1的压缩包中,"Pitagorapp_2.0.1-main"可能是项目的主模块或者主目录,包含了项目的核心源代码、配置文件和其他资源。通过这个文件名,我们可以推测这个目录可能包含了程序的主入口点,也就是程序...