`

spring boot 2.0.1版本,多数据源支持

 
阅读更多

有时候我们需要在程序中加载多个数据源,用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 2.0.1_freemarker_redis

    在Spring Boot中,通过添加Mybatis Starter依赖,可以轻松配置数据源和Mapper接口,实现数据库的CRUD操作。在用户登录注册系统中,Mybatis用于处理用户信息的存储和查询。 三、Redis集成 Redis是一个高性能的键值...

    spring-boot-starter-mybatis-spring-boot-2.0.1.tar.gz

    值得注意的是,Spring Boot 2.0.1相较于之前的版本,引入了一些新的特性和改进,如更好的Actuator支持、对Java 9的兼容性以及Spring Framework 5的升级,这些都可能影响到MyBatis的集成和使用。因此,在实际项目中,...

    spring-boot-reference 2.0 官方文档(英文)

    它涵盖了数据源、缓存、JPA、WebSocket、Actuator等多个方面。 5. **Web开发**: 文档介绍了如何使用Spring MVC构建RESTful服务,包括控制器、视图解析、静态资源处理、模板引擎等。此外,还涉及了安全、国际化和...

    springboot-2.0.1.RELEASE + mybatis整合

    在Spring Boot中整合MyBatis,我们需要在`pom.xml`中添加MyBatis及其依赖,然后创建配置文件`mybatis-config.xml`,配置数据源、事务管理器以及SqlSessionFactory。接着,我们可以使用注解来定义Mapper接口,编写...

    spring-boot.zip

    在压缩包中,只列出了 "spring-boot" 这个文件名,这通常表示压缩包里包含了一个 Spring Boot 项目的源代码目录。在实际的项目结构中,我们可以期待看到以下文件和目录: 1. **src/main/java**: 存放 Java 源代码,...

    spring boot2.1.4 + mybaits.zip

    这个压缩包文件包含了Spring Boot 2.1.4.RELEASE版本和MyBatis 2.0.1版本的集成示例,为初学者提供了一个很好的学习起点。下面将详细介绍这两个框架的整合过程及其核心知识点。 1. **Spring Boot 简介** Spring ...

    spring-boot-mybatis-redis.zip

    Spring Boot 2.0.1引入了大量改进和新特性,如对Java 9的支持、Spring Framework 5的集成以及对WebFlux非阻塞反应式编程的支持等。 2. **统一返回**:项目可能包含一个全局的结果集封装类,用于标准化HTTP响应结果...

    lenosp-master.zip

    lenos(p为spring boot 2.0 版本扩展名)一款快速开发模块化脚手架,采用spring boot 2.0.1、spring、SpringMvc、mybatis、shiro、activiti工作流、swagger、ehcache、redis、quartz、freemarker、layui技术开发;...

    lenosp-dev-2020.zip

    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.doc

    在本文中,我们将深入探讨如何将SpringBoot与Druid数据源和MyBatis集成,以连接到Gbase8s v8.7数据库。Gbase8s是一款高性能的关系型数据库管理系统,特别适合处理大规模数据。我们将使用Spring Boot 2.1.11版本,...

    CRMEB【Java版】单商户商城系统v2.0.1,CRMEB_JAVA_SY_v2.0.1(20220214)

    1. 优化pom文件中不全spring-boot-maven-plugin 因没有version节点导致idea提示错误 2. 添加完整的Crmeb-admin.jar和Cremb-front.jar启动和停止shell脚本 3. 修复文件导出可能出现错误的问题 4. 修复推广人列表可能...

    通过springboot+mybatis+druid配置动态数据源

    通过 SpringBoot、MyBatis 和 Druid 配置动态数据源是一种常见的解决方案,它可以帮助开发者轻松地管理多个数据源,并提供了动态切换数据源的能力。在本文中,我们将通过示例代码详细介绍如何使用 SpringBoot、...

    crmeb java2.0.1最新完整包 含app 小程序 公众号 h5 ;仅限学习使用切勿商用,商用请购买正版

    1. 优化pom文件中不全spring-boot-maven-plugin 因没有version节点导致idea提示错误 2. 添加完整的Crmeb-admin.jar和Cremb-front.jar启动和停止shell脚本 3. 修复文件导出可能出现错误的问题 4. 修复推广人列表可能...

    springboot-flow.zip

    - 配置流程引擎:在`application.yml`或`application.properties`中设置数据源,并声明Flowable的配置类,以启动流程引擎服务。 - 注册流程定义:将BPMN文件作为资源加载到应用中,Flowable会自动解析并注册流程...

    商业编程-源码-多用户留言板(cuteBook) v2.0.1.zip

    这个系统的源代码版本为v2.0.1,它提供了丰富的功能和良好的用户体验,适用于企业网站、社区论坛等应用场景,帮助用户进行互动交流。 该系统的开发主要涉及以下几个核心知识点: 1. **多用户系统**:cuteBook支持...

    CRMEB【Java版】单商户商城系统v2.0.1(完整包)

    1. 优化pom文件中不全spring-boot-maven-plugin 因没有version节点导致idea提示错误 2. 添加完整的Crmeb-admin.jar和Cremb-front.jar启动和停止shell脚本 3. 修复文件导出可能出现错误的问题 4. 修复推广人列表可能...

    olingo2-spring

    通过这个项目,开发者可以学习到如何在Spring Boot环境中集成和使用Apache Olingo,创建一个支持OData的API服务,以及如何测试和调试这样的服务。同时,这也是提升Java、Spring和RESTful API设计技能的好机会。

    apollo-configservice-1.7.1-github.zip

    - **插件机制**: 支持自定义数据源、审计、日志等插件,增强系统的灵活性。 8. **与其他技术的集成** - **Spring Boot**: 阿波罗与Spring Boot的无缝集成,使得Spring Boot应用能够轻松接入配置中心。 - **...

    Pitagorapp_2.0.1

    在Pitagorapp_2.0.1的压缩包中,"Pitagorapp_2.0.1-main"可能是项目的主模块或者主目录,包含了项目的核心源代码、配置文件和其他资源。通过这个文件名,我们可以推测这个目录可能包含了程序的主入口点,也就是程序...

    doctorHaus:这个项目基本上是一个小型的医院管理部门,通过它您可以接收患者并管理他的信息

    Spring Boot 2.0.1是该项目的核心框架,简化了Spring应用的初始搭建以及配置过程。Spring Boot基于Spring框架,旨在简化微服务的开发,通过内嵌的Tomcat服务器,可以快速构建可独立运行的Java应用。其自动配置特性极...

Global site tag (gtag.js) - Google Analytics