首页 > 其他分享 >【Spring】jdbc

【Spring】jdbc

时间:2024-03-09 18:12:07浏览次数:21  
标签:jdbc lookupKey Spring private DataSource key 数据源 dataSource

 

动态数据源切换:

https://www.jianshu.com/p/a042ff2ee2ae

实现数据源切换的功能就是自定义一个类扩展AbstractRoutingDataSource抽象类,其实该相当于数据源DataSourcer的路由中介,可以实现在项目运行时根据相应key值切换到对应的数据源DataSource上。

public abstract class AbstractRoutingDataSource extends AbstractDataSource implements InitializingBean {
    /* 只列出部分代码 */
    private Map<Object, Object> targetDataSources;

    private Object defaultTargetDataSource;

    private boolean lenientFallback = true;

    private DataSourceLookup dataSourceLookup = new JndiDataSourceLookup();

    private Map<Object, DataSource> resolvedDataSources;

    private DataSource resolvedDefaultDataSource;

    @Override
    public Connection getConnection() throws SQLException {
        return determineTargetDataSource().getConnection();
    }

    @Override
    public Connection getConnection(String username, String password) throws SQLException {
        return determineTargetDataSource().getConnection(username, password);
    }

    protected DataSource determineTargetDataSource() {
        Assert.notNull(this.resolvedDataSources, "DataSource router not initialized");
        Object lookupKey = determineCurrentLookupKey();
        DataSource dataSource = this.resolvedDataSources.get(lookupKey);
        if (dataSource == null && (this.lenientFallback || lookupKey == null)) {
            dataSource = this.resolvedDefaultDataSource;
        }
        if (dataSource == null) {
            throw new IllegalStateException("Cannot determine target DataSource for lookup key [" + lookupKey + "]");
        }
        return dataSource;
    }

    protected abstract Object determineCurrentLookupKey();
}
方法里使用到了determineCurrentLookupKey()方法,它是AbstractRoutingDataSource类的抽象方法,也是实现数据源切换要扩展的方法,该方法的返回值就是项目中所要用的DataSource的key值,拿到该key后就可以在resolvedDataSource中取出对应的DataSource,如果key找不到对应的DataSource就使用默认的数据源。

 

标签:jdbc,lookupKey,Spring,private,DataSource,key,数据源,dataSource
From: https://www.cnblogs.com/clarino/p/18063085

相关文章

  • SpringCloud入门
    微服务架构的出现单体应用之殇无法快速迭代代码合并冲突,沟通成本大幅提高回归用例庞杂,无法快速迭代无法快速恢复某版本小需求有bug需要回退整个版本的功能,且需要再走一遍冗长的发布流程微服务架构优势微服务架构是在SOA(Service-OrientedArchitecture,面向服务的架......
  • springboot注册
    查询用户,判断用户名是否被占用。1.没有被占用,则注册2.被占用,则显示用户名已被占用!service:UserServiceimportcom.example.pojo.User;publicinterfaceUserService{//根据用户名查询用户UserfindByUserName(Stringusername);}mapper:UserMapper@Map......
  • spring - mvc -2
    springmvc1.@Required注解的作用是什么@Required注解用在setter方法上,它表明具有该注解的bean属性必须在配置时填充。否则,Spring容器将抛出BeanInitializationException异常。此外,@Required与@Autowired不同——因为它仅限于setter,而@Autowired则不然。@Autowired也可用于......
  • spring - mvc - @Valid
    自定义验证创建自定义验证器需要推出我们自己的注释并在我们的模型中使用它来强制执行验证规则。因此,让我们创建自定义验证器来检查电话号码。电话号码必须是至少8位数字,但不超过11位数字。1.新注释让我们创建一个新的@interface来定义我们的注释:@Documented@Constrain......
  • springboot项目构建docker镜像
    springboot项目构建docker镜像springboot项目构建成docker镜像的两种方式手动方式:将springboot项目打成一个jar包,将jar包上次到服务器的指定目录下(具备docker环境),然后在同一目录下编写Dockerfile文件,通过dockerbuild命令构建镜像,之后把镜像发布到远程仓库中。半自动方式:......
  • SpringCloud Gateway实战
    SpringCloudGateway目录SpringCloudGateway认识SpringCloudGatewaySpringCloudGateway和Zuul最核心的区别SpringCloudGateway工作模型图及解读SpringCloudGateway三大核心概念Route、Predicate、FilterSpringCloudGateway过滤器全局过滤器和局部过滤器SpringCloudGatew......
  • 基于苍穹外卖写的springboot学习笔记,私聊拿源码
    一.关于md5加密的了解与使用1.分析MD5加密是一种不可逆的加密算法。也就是说我们只能正向加密,无法反向解密。于是乎,当我们用它作为密码加密方式时,我们只能加密码从数据库拿来与前端传来的数据加密后进行比较。2.使用方法他是由springboot框架提供二.关于swagge......
  • Spring-Boot AOP 的简单创建
    AOP切面1.导依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency>定义一个切面类@Aspect@ComponentpublicclassAop......
  • spring-event-事件监听机制实现
    1.事件监听机制概述1.场景模型版本更新了,新版本需要继承老版本的构件分享、自定义属性、着色数据,以后还可能有其他数据要继承,这些数据之间没有直接联系,就是当模型版本变更的时候,他们各自需要执行。2.涉及的三个对象事件源(提供事件处理时的元数据)这里就是模型版本更新了......
  • Spring知识回顾
    首先对于我们来说Spring是什么,Spring可以让我们对刚开始写项目时,有一个明确的框架结构,用比较专业的话来讲,就是使用IOC和AOP,即Inversionofcontrol控制反转和AspectOrientedProgramming面向切面编程,总结:Spring就是一个轻量级的控制反转(IOC)和面向切面编程(AOP)的框架。学习IOC的组......