问题描述:比如项目现在要使用在南京的8的区,这时这8个区分别建了一个数据库,但是只有一个项目,每个区的用户都使用这个项目进行登录

问题难点:如何验证登录人属于哪个区,然后确认之后,如何进行数据库的切换;

问题思路:除了8个数据库之外,在建一个数据库:数据库中包含的几张表:储存登录用户的信息等,直接上图理解

一、数据库的建立

h_right :

h_role:

红色表示登录人  所属哪一区

h_role_right:

分配显示的菜单

h_role_sysuser:

用于分配区编号

h_sysuser:

用户信息

以上所说的就是独立的一个数据库,加上8张之后就一共9个数据库了,至此数据库问题就先这样

二、java代码如何实现

1、项目使用的是shrio 进行安全处理

2、数据库的配置文件的编辑

两个配置文件:第一个:专门用于所有数据库的配置信息:

最重要的就是下面的数据库Key值的配置

3、如何动态切换数据库,JAVA中有提供这些接口的:

AbstractRoutingDataSource

这个时候要使用Spring的依赖注入和控制翻转了

@Aspect

@Component

public class LogAop implements Ordered{

@Pointcut("execution(* com.tangbo..*(..))")

public void recordLog(){}

//@Pointcut("execution(* com.tangbo.esmsys..*.*(..))")

//定义在service包里的任意方法的执行:

@Pointcut("execution(* com.tangbo.esmsys..*.*(..)) || execution(* com.tangbo.oprm.context..*.*(..)) || execution(* com.tangbo.oprm.institution..*.*(..))")

public void recordLog1(){}

@Pointcut("execution(* com.tangbo.oprm.right..*.*(..)) || execution(* com.tangbo.oprm.role..*.*(..)) || execution(* com.tangbo.oprm.sysuser..*.*(..)) ")

public void recordLogBySysUser(){}

@Before("recordLog1()")

public void before(JoinPoint call){

String className = call.getTarget().getClass().getName();

String methodName = call.getSignature().getName();

String sessionId = (String) SecurityUtils.getSubject().getSession().getId();

String dataSource = (String) SecurityUtils.getSubject().getSession().getAttribute(sessionId+"dataSource");

if(dataSource == null){

dataSource = (String) SecurityUtils.getSubject().getSession().getAttribute("datas");

}

DataSourceContextHolder.setDBType(dataSource);

String db =DataSourceContextHolder.getDBType();

System.out.println("开始执行:"+className+"."+methodName+"()方法..."+"选择的数据库为:"+ db);

}

@AfterThrowing("recordLog()")

public void afterThrowing(JoinPoint call){

String className = call.getTarget().getClass().getName();

String methodName = call.getSignature().getName();

System.out.println(className+"."+methodName+"()方法抛出了异常...");

}

@AfterReturning("recordLog()")

public void afterReturn(JoinPoint call){

String className = call.getTarget().getClass().getName();

String methodName = call.getSignature().getName();

System.out.println(className+"."+methodName+"()方法正常执行结束...");

}

@After("recordLog()")

public void after(JoinPoint call){

String className = call.getTarget().getClass().getName();

String methodName = call.getSignature().getName();

DataSourceContextHolder.clearDBType();

System.out.println(className+"."+methodName+"()最终执行步骤(finally)...");

}

@Before("recordLogBySysUser()")

public void beforeBySystem(JoinPoint call){

String className = call.getTarget().getClass().getName();

String methodName = call.getSignature().getName();

DataSourceContextHolder.setDBType("huawenchuan1");

String db =DataSourceContextHolder.getDBType();

System.out.println("开始执行:"+className+"."+methodName+"()方法..."+"选择的数据库为:"+ db);

}

@Override

public int getOrder() {

// TODO Auto-generated method stub

return 1;

}

}

解释:时候Spring的注解,实现在登录的时候使用哪个数据库,然后验证登录人属于哪个区之后,开始在调用每个接口之前,设置好要使用的数据库

java dbtype_java 动态操作数据库相关推荐

  1. java完整JDBC操作数据库

    java使用JDBC操作数据库的包含以下7个主要步骤: 1.加载JDBC驱动程序 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机),这通过java.lang.Class类的 ...

  2. Java 技术篇-java连接并操作数据库实例演示,执行查询、插入、更新和删除操作

    Java 操作数据库 第一章:Java 代码四个类实现 ① 项目结构展示 ② 数据库连接类 ③ 数据库查询类 ④ 数据库更新类 ⑤ 数据库主类 第二章:查询和更新操作实例演示 ① 查询操作演示 ② 更 ...

  3. java和jdbc操作数据库MySQL

    大家初学java连接数据库一定遇到不少问题吧,我遇到这些问题也很头痛,所以我我把我初学jdbc连接数据库写的代码直接分享给大家.最后有完整代码可以直接复制运行 建表语句 CREATE TABLE `c ...

  4. Java伪界面操作数据库的小实例

    首先在Mysql中有两个表fruit和login: package com.zuoye;import java.sql.*;import java.util.*;public class Test { ...

  5. java过滤器如何操作数据库_jsp – 使用Java中的过滤器验证用户名,密码(与数据库联系)...

    String sql="select * from reg where username='"+user+"' and pass='"+pwd+"'& ...

  6. Java操作数据库方式五MyBatis使用入门

    ##概述 ##MyBatis是什么 MyBatis是一个持久层框架,作用是在java项目中操作数据库. ##MyBatis介绍 MyBatis 本是apache的一个开源项目iBatis, 2010年 ...

  7. Java操作数据库方式(六)DataSource详解

    ##概述 在java世界里操作数据库有很多方式,在众多方式中除了JDBC外都有DataSource对象. DataSource可以看作数据源,它封装了数据库参数,连接数据库,程序中操作DataSour ...

  8. 一文带你学会使用java操作数据库(JDBC)

    目录 1.数据库编程的条件 2.Java的数据库编程:JDBC 3.JDBC的使用 (1)环境准备 (2)JDBC的使用 (3)JDBC使用实例 1.数据库编程的条件 编程语言 数据库 数据库驱动包: ...

  9. JDBC操作数据库实例

    返回目录:<学生信息管理系统(Java+JSP)> 这里以JDBC操作MySQL数据库为例. 假设有一个名为test的数据库,里面有一张学生表,表名称为student,表结构如下: stu ...

最新文章

  1. 原生js.ajax内存溢出,javascript - 代码点火器-如何使用jQuery向数据库提交ajax javascript对象 - 堆栈内存溢出...
  2. php背景图片 存放位置,CSS中背景图片位置 background-position 的使用方法
  3. java xml 合并_Java中合并XML文档的设计与实现
  4. 详细讲解Quartz.NET
  5. windows docker常用命令
  6. 排名怎么查_公布考研成绩排名?怎么查?
  7. 从零开始学 Web 之 jQuery(二)获取和操作元素的属性
  8. 第十一届“认证杯”数学中国数学建模国际赛(小美赛) (2022 CERTIFICATE AUTHORITY CUP INTERNATIONAL MATHEMATICAL CONTEST IN MOD
  9. 如何检测VC运行库是否安装
  10. 部署VC2008的程序
  11. 媒体:28省份已开展不动产登记机构整合工作
  12. pythonunicode编码_python unicode 编码整理
  13. C++语句 与简单方法
  14. 人工智能传奇——关于AI起源与发展的故事
  15. SQLite Expert 5.X 通用注册版-你的SQL好帮手
  16. linux:ping不通www.baidu.com
  17. DirectX12_API流程入门篇
  18. 外卖商品的标准化建设与应用
  19. 尼康D90对焦模式图解
  20. Linux平台设备框架驱动

热门文章

  1. windows编写linux脚本,Windows PowerShell:共享您的脚本 - 在脚本中编写 Cmdlet | Microsoft Docs...
  2. 零基础学Python:函数的参数详解
  3. python 三元表达式 if for 构建List 进阶用法
  4. Python 定时任务的实现方式
  5. php 多维数组按值排序,按子值对php多维数组排序
  6. cJSON使用教程(树外构建 out of tree build 概念)(组包概念)
  7. 静态页面cors跨域问题
  8. Logstash配置多个Input、Filter、Output
  9. js判断是由含有a节点_怎么判断某个dom节点是否包含某个dom节点?
  10. CentOS7下安装Redis伪集群(基于Redis官方Cluster集群模式版本redis-5.0.10)