做 爱 网站小视频,淘宝客网站推广备案信息,wordpress 会员可见,wordpress在哪里修改密码每一个请求与其他的用户是面对不同的数据库#xff0c;这就需要用到动态数据源切换#xff0c;来满足不同数据库、不同数据表(不同数据源)的灵活调用。动态数据源切换满足mysql、oracle等主流数据库进行动态数据源切换。使用方法在 WEB-INF 目录下建立 lib 目录#xff0c;并…每一个请求与其他的用户是面对不同的数据库这就需要用到动态数据源切换来满足不同数据库、不同数据表(不同数据源)的灵活调用。动态数据源切换满足mysql、oracle等主流数据库进行动态数据源切换。使用方法在 WEB-INF 目录下建立 lib 目录并把jar包复制到 lib 目录在maven配置文件即 pom.xml 中需要包含以下依赖org.aspectjaspectjweaver1.8.13org.springframeworkspring-context5.0.4.RELEASEorg.springframeworkspring-web5.0.4.RELEASEjavax.servletservlet-api2.5provideddynamicdsdynamicds1.0system${project.basedir}/src/main/webapp/WEB-INF/lib/dynamicds.jar注册项目的数据源(这是必须要做的)继承DynamicDataSourceRegister类并完成相关的方法重写。import com.ycj.fastframe.dynamicds.aop.DynamicDataSourceRegister;import com.ycj.fastframe.dynamicds.entity.DataBaseInfo;import org.springframework.core.env.Environment;import java.util.List;/*** author: Frank* email 1320259466qq.com* date: 2019/11/17* time: 12:57* fuction: about the role of class.*/public class MyDataSource extends DynamicDataSourceRegister {Overridepublic DataBaseInfo initDefaultDataSource(Environment env) {// 读取主数据源DataBaseInfo dataBaseInfonew DataBaseInfo();dataBaseInfo.setDriver(env.getProperty(spring.datasource.driver));dataBaseInfo.setUrl(env.getProperty(spring.datasource.url));dataBaseInfo.setUsername(env.getProperty(spring.datasource.username));dataBaseInfo.setPassword(env.getProperty(spring.datasource.password));dataBaseInfo.setType(com.alibaba.druid.pool.DruidDataSource);return dataBaseInfo;}Overridepublic List initOtherDataSources(Environment env) {return null;}}设置数据源切换规则(这个可以四选一实现就行)架构中采用了LRU算法的缓存策略以适应高并发和高性能需求。这里举例其中一个实现策略只需要继承BindDynamicDataSourceByUserIdentifier类并完成相关的方法重写。import com.ycj.fastframe.dynamicds.aop.BindDynamicDataSourceByUserIdentifier;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Pointcut;import org.springframework.core.annotation.Order;import org.springframework.stereotype.Component;import javax.servlet.http.HttpServletRequest;/*** author: Frank* email 1320259466qq.com* date: 2019/11/16* time: 14:00* fuction: about the role of class.*/AspectOrder(-1)//保证在Transactional之前执行Componentpublic class TestDynamicDataSource extends BindDynamicDataSourceByUserIdentifier {OverridePointcut(execution(public * com.ycj.fastframe.controller..*.*(..)))public void dataSourceAspectPath() {}Overridepublic void logPrint(String msg) {System.out.println(msg);}Overridepublic int initCacheSize() {return 100;}Overridepublic String setDataSouceForUser(String userUniqueIdentifier) {if (userUniqueIdentifier.contains(1001)){return project1;}else if (userUniqueIdentifier.contains(1002)){return project2;}else {return dataSource;}}Overridepublic String getUserUniqueIdentifier(HttpServletRequest request, String requestArgs) {return request.getSession().getId();}public static void main(String[] args) {}}四种方法动态数据源切换有四种实现方式一、通过注解这个最简单只需要继承BindDynamicDataSourceByAnnotation类并在controller中的每个方法前面添加 RegisterDataSource(name “数据源名称”) 注解即可如下AspectOrder(-1)//保证在Transactional之前执行Componentpublic class TestDynamicDataSource extends BindDynamicDataSourceByAnnotation {}二、通过继承BindDynamicDataSourceByArgs类来实现步骤跟上面一样都很简单。三、通过继承BindDynamicDataSourceByRequest类来实现步骤跟上面一样都很简单。四、通过继承BindDynamicDataSourceByUserIdentifier类来实现步骤跟上面一样都很简单。原文链接https://blog.csdn.net/u014374009/article/details/103108025