java dbtype_java 动态操作数据库
问题描述:比如项目现在要使用在南京的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 动态操作数据库相关推荐
- java完整JDBC操作数据库
java使用JDBC操作数据库的包含以下7个主要步骤: 1.加载JDBC驱动程序 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机),这通过java.lang.Class类的 ...
- Java 技术篇-java连接并操作数据库实例演示,执行查询、插入、更新和删除操作
Java 操作数据库 第一章:Java 代码四个类实现 ① 项目结构展示 ② 数据库连接类 ③ 数据库查询类 ④ 数据库更新类 ⑤ 数据库主类 第二章:查询和更新操作实例演示 ① 查询操作演示 ② 更 ...
- java和jdbc操作数据库MySQL
大家初学java连接数据库一定遇到不少问题吧,我遇到这些问题也很头痛,所以我我把我初学jdbc连接数据库写的代码直接分享给大家.最后有完整代码可以直接复制运行 建表语句 CREATE TABLE `c ...
- Java伪界面操作数据库的小实例
首先在Mysql中有两个表fruit和login: package com.zuoye;import java.sql.*;import java.util.*;public class Test { ...
- java过滤器如何操作数据库_jsp – 使用Java中的过滤器验证用户名,密码(与数据库联系)...
String sql="select * from reg where username='"+user+"' and pass='"+pwd+"'& ...
- Java操作数据库方式五MyBatis使用入门
##概述 ##MyBatis是什么 MyBatis是一个持久层框架,作用是在java项目中操作数据库. ##MyBatis介绍 MyBatis 本是apache的一个开源项目iBatis, 2010年 ...
- Java操作数据库方式(六)DataSource详解
##概述 在java世界里操作数据库有很多方式,在众多方式中除了JDBC外都有DataSource对象. DataSource可以看作数据源,它封装了数据库参数,连接数据库,程序中操作DataSour ...
- 一文带你学会使用java操作数据库(JDBC)
目录 1.数据库编程的条件 2.Java的数据库编程:JDBC 3.JDBC的使用 (1)环境准备 (2)JDBC的使用 (3)JDBC使用实例 1.数据库编程的条件 编程语言 数据库 数据库驱动包: ...
- JDBC操作数据库实例
返回目录:<学生信息管理系统(Java+JSP)> 这里以JDBC操作MySQL数据库为例. 假设有一个名为test的数据库,里面有一张学生表,表名称为student,表结构如下: stu ...
最新文章
- 原生js.ajax内存溢出,javascript - 代码点火器-如何使用jQuery向数据库提交ajax javascript对象 - 堆栈内存溢出...
- php背景图片 存放位置,CSS中背景图片位置 background-position 的使用方法
- java xml 合并_Java中合并XML文档的设计与实现
- 详细讲解Quartz.NET
- windows docker常用命令
- 排名怎么查_公布考研成绩排名?怎么查?
- 从零开始学 Web 之 jQuery(二)获取和操作元素的属性
- 第十一届“认证杯”数学中国数学建模国际赛(小美赛) (2022 CERTIFICATE AUTHORITY CUP INTERNATIONAL MATHEMATICAL CONTEST IN MOD
- 如何检测VC运行库是否安装
- 部署VC2008的程序
- 媒体:28省份已开展不动产登记机构整合工作
- pythonunicode编码_python unicode 编码整理
- C++语句 与简单方法
- 人工智能传奇——关于AI起源与发展的故事
- SQLite Expert 5.X 通用注册版-你的SQL好帮手
- linux:ping不通www.baidu.com
- DirectX12_API流程入门篇
- 外卖商品的标准化建设与应用
- 尼康D90对焦模式图解
- Linux平台设备框架驱动
热门文章
- windows编写linux脚本,Windows PowerShell:共享您的脚本 - 在脚本中编写 Cmdlet | Microsoft Docs...
- 零基础学Python:函数的参数详解
- python 三元表达式 if for 构建List 进阶用法
- Python 定时任务的实现方式
- php 多维数组按值排序,按子值对php多维数组排序
- cJSON使用教程(树外构建 out of tree build 概念)(组包概念)
- 静态页面cors跨域问题
- Logstash配置多个Input、Filter、Output
- js判断是由含有a节点_怎么判断某个dom节点是否包含某个dom节点?
- CentOS7下安装Redis伪集群(基于Redis官方Cluster集群模式版本redis-5.0.10)