首页 > 编程语言 >多数据源程序开发

多数据源程序开发

时间:2022-11-10 17:46:55浏览次数:38  
标签:数据源 程序开发 db datasource import array com

多数据源程序开发

由于读写分离,主从实时备份等业务场景的需要,往往在开发数据库应用时,要配置多个数据源。本文结合springboot,mybatis等应用框架,实现多数据源应用程序。

在build.grade 文件中添加springboot 依赖 ,

//动态数据源的依赖包
// https://mvnrepository.com/artifact/com.baomidou/dynamic-datasource-spring-boot-starter
implementation 'com.baomidou:dynamic-datasource-spring-boot-starter:3.5.2'

springboot 项目配置文件 application.yml

server:
  port: 8888


spring:
  web:
    resources:
      static-locations:
      - classpath:/static/
  mvc:
    static-path-pattern: /**

# 
  datasource:
    dynamic:
      primary: db-reomte   #默认数据库
      datasource:
        db-reomte:
          url: jdbc:mysql://10.8.0.5:3306/jmrc?useUnicode=true&characterEncoding=utf-8
          username: XXXX
          password: XXXX
          driver-class-name: com.mysql.cj.jdbc.Driver
        db-localhost:
          url: jdbc:mysql://localhost:3306/jmrc?useUnicode=true&characterEncoding=utf-8
          username: XXXX
          password: XXXX
          driver-class-name: com.mysql.cj.jdbc.Driver
      druid:
        initial-size: 5  #初始大小
        max-active: 20		#最大活跃
        min-idle: 5		#最小
        max-wait: 60000		#最长等待时间
        time-between-eviction-runs-millis: 60000  #俩次之间的间隔时间 毫秒
        min-evictable-idle-time-millis: 300000		#多长时间不访问就称最小
        validation-query: SELECT 1 FROM DUAL   #验证查询
        test-while-idle: true			#是否开启闲置测试
        test-on-borrow: false    #在这个上测试
        test-on-return: false   #开启返回测试
        filters: stat,wall,log4j  #配置过滤器
        stat:
          log-slow-sql: true
    

    
mybatis:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

其中,核心的内容是 datasource 部分, 默认数据设置 primary 是必定要的,dynamic 是动态数据源的依赖,如果前一骤没有引入这个依赖包的话,在配置这项时,就会提示出错。此外,数据源的名称可以自定义,如上而的db-localhost 和 db_remote 就是自定义的数据源名称。

使用注解来调用不同的数据库进行读写

package com.enixlin.double_database.service.impl;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.baomidou.dynamic.datasource.annotation.DS;
import com.enixlin.double_database.mapper.SynamicMapper;
import com.enixlin.double_database.service.SynamicDBService;

@Service
public class SynamicServiceImpl implements SynamicDBService {

    private SynamicMapper synamicMapper;

    @Autowired
    public SynamicServiceImpl(SynamicMapper synamicMapper) {
        this.synamicMapper = synamicMapper;
    }

    @DS("db-remote")
    @Override
    public ArrayList<LinkedHashMap<String, String>> readFormRemoteDB() {
        // TODO Auto-generated method stub
        ArrayList<LinkedHashMap<String, String>> array = this.synamicMapper.readFormRemoteDB();
        return array;
    }

    @DS("db-localhost")
    @Override
    public int writeToLocalDB(ArrayList<LinkedHashMap<String, String>> array) {
        // TODO Auto-generated method stub
        if (array.size()!=0) {
            try {
                this.synamicMapper.writeToLocalDB(array);
            } catch (Exception e) {
                // TODO: handle exception
                System.out.println(e);
                e.printStackTrace();
            }
            
        }
      
       return array.size();
    }

}

注意上面的示例代码中,使用@DS("db-remote")注解,说明该方法是使用名称为"db_remote" 的数据源。 同理,也可以在类名层级加数据源注解,这样就可以实现这个类的所有操作都使用注解引用数据源。这样就比较灵活的实现动态数据源。但这样的使用方法也有不好的地方。例如有几十个类,或者上百个方法要添加不周的数据源,这样一个一个类,或者是一个一个方法来手工添加的话,效率是比较差的。一般可以使用AOP来解决这个问题。

使用AOP来实现批量的动态数据源

标签:数据源,程序开发,db,datasource,import,array,com
From: https://www.cnblogs.com/enixlin/p/16877850.html

相关文章

  • 多数据源配置MyBatisPlus(十八)
    二八佳人体似酥,腰间仗剑斩愚夫。虽然不见人头落,暗里教君骨髓枯。上一章简单介绍了多数据源配置MyBatis(十七),如果没有看过,​​请观看上一章​​工作中,在业务的发展或业务......
  • 多数据源配置JdbcTemplate(十五)
    二八佳人体似酥,腰间仗剑斩愚夫。虽然不见人头落,暗里教君骨髓枯。上一章简单介绍了SpringBoot整合MyBatisPlus(十四),如果没有看过,​​请观看上一章​​工作中,在业务的发展......
  • 多数据源配置Jpa(十六)
    二八佳人体似酥,腰间仗剑斩愚夫。虽然不见人头落,暗里教君骨髓枯。上一章简单介绍了多数据源配置JdbcTemplate(十五),如果没有看过,​​请观看上一章​​工作中,在业务的发展或......
  • 多数据源配置MyBatis(十七)
    二八佳人体似酥,腰间仗剑斩愚夫。虽然不见人头落,暗里教君骨髓枯。上一章简单介绍了多数据源配置Jpa(十六),如果没有看过,​​请观看上一章​​工作中,在业务的发展或业务数据......
  • Kendo ui grid的数据源Url 在被identityServer保护的情况下的使用方法
    newkendo.data.DataSource({transport:{read:{url:"http://someserver:8554/search",type:'POST',beforeSen......
  • 微信共享停车场小程序开发设计方案
    随着城市的发展,人们的生活水平提高,车辆的增多,在有限的城市空间中,停车难成为了人们经常遇到的问题,附近找不到停车位置的情况时有发生,为了更好的解决这一问题,可以通过共享停车......
  • 数据源开发步骤; 数据源(连接池)的作用; IOC与DI的理解; 怎么把UserDao注入到UserService内
    数据源开发步骤1、导入数据源的坐标和数据库驱动坐标2、创建数据源对象3、设置数据源的基本连接数据4、使用数据源获取连接资源和归还连接资源数据源(连接池)的作用1、提高程......
  • 小程序开发vscode常用插件
    wechat-snippet微信小程序代码辅助,代码片段自动完成minapp微信小程序标签、属性的智能补全(同时支持原生小程序、mpvue和wepy框架,并提供snippets)wxapp-helper微信......
  • mybatis数据源单一
    1.打包方式jar包1.导入依赖<dependencies><!--Mybatis核心--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.7</v......
  • Java解决单机环境下多数据源的事务问题
    springboot单机环境下的@Transictional可以保证事务,但多数据源的情况就无法使用了,这里简单实现一下多数据源的情况下如何保证事务。一,事务实现方案利用ThreadLocal将事......