package com.hf.db.aspect;
import com.hf.db.utils.db.DataSourceCheckUtils;
import com.hf.db.utils.db.DynamicDataSourceHolder;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
import java.lang.reflect.Method;
/**
* 功能描述: <br>
* 〈
* Aop动态切换数据源的具体实现
* 〉
*
* @className: ChooseDataSource
* @author: hf
* @version: 1.0.0
* @date: 2018/12/25 18:21
* <p>
* History:
* <author:> <time:> <version:> <desc:>
*/
@Aspect
@Component
public class ChooseDataSourceAspect {
/**
* 功能描述: <br>
* 〈
* 配置接入点,切入controller层
* 〉
*
* @className: ChooseDataSourceAspect
* @author: hf
* @version: 1.0.0
* @date: 2018/12/25 18:25
* @param: []
* @return: void
* <p>
* History:
* <author:> <time:> <version:> <desc:>
*/
@Pointcut("execution(* com.hf.db.controller..*.*(..))")
private void controllerAspect() {
}
/**
* 功能描述: <br>
* 〈
* 配置切面动态切换数据源
* 〉
*
* @className: ChooseDataSourceAspect
* @author: hf
* @version: 1.0.0
* @date: 2018/12/25 18:25
* @param: [joinPoint 切点]
* @return: java.lang.Object
* <p>
* History:
* <author:> <time:> <version:> <desc:>
*/
@Around("controllerAspect()")
public Object permission(ProceedingJoinPoint joinPoint) throws Throwable {
Object target = joinPoint.getTarget();
Object[] args = joinPoint.getArgs();
Method method = getMethod(joinPoint, args);
//获取数据库名称参数
ChooseDataSource chooseDataSource = method.getAnnotation(ChooseDataSource.class);
if (chooseDataSource != null) {
String dataSourceName = chooseDataSource.dataSourceName();
//检查数据库名称是否存在
if (DataSourceCheckUtils.check(dataSourceName)) {
DynamicDataSourceHolder.putDataSourceName(dataSourceName);
} else {
DynamicDataSourceHolder.putDataSourceName("server_1");
}
}
return joinPoint.proceed();
}
/**
* 功能描述: <br>
* 〈
* 获取切面信息
* 〉
*
* @className: ChooseDataSourceAspect
* @author: hf
* @version: 1.0.0
* @date: 2018/12/7 15:28
* @param: [joinPoint 切点, args 参数]
* @return: java.lang.reflect.Method
* <p>
* History:
* <author:> <time:> <version:> <desc:>
*/
private Method getMethod(ProceedingJoinPoint joinPoint, Object[] args) throws NoSuchMethodException {
String methodName = joinPoint.getSignature().getName();
Class clazz = joinPoint.getTarget().getClass();
Method[] methods = clazz.getMethods();
for (Method method : methods) {
if (methodName.equals(method.getName())) {
return method;
}
}
return null;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
Spring+SpringMvc+MybatisPlus+Aop(自定义注解)动态切换数据源
共67个文件
xml:52个
java:10个
sql:3个
5星 · 超过95%的资源 需积分: 50 40 下载量 30 浏览量
2018-12-25
18:57:28
上传
评论
收藏 47KB ZIP 举报
温馨提示
Spring+SpringMvc+MybatisPlus实现多数据源切换、利用自定义Aop注解,只需要在需要切换数据库的方法上加上注解即可实现、极大避免了代码冗余。
资源推荐
资源详情
资源评论
收起资源包目录
ssm-db-dynamicswitching.zip (67个子文件)
ssm-db-dynamicswitching
src
main
resources
jdbc.properties 704B
sql
server_2.sql 2KB
server_1.sql 2KB
server_3.sql 2KB
mybatis
mapper
PersonMapper.xml 641B
mybatis-config.xml 210B
spring
spring-mybatis.xml 1KB
spring-aop.xml 1KB
springMvc.xml 1KB
spring-beans.xml 3KB
log4j.xml 2KB
java
com
hf
db
entity
Person.java 1KB
dao
PersonMapper.java 249B
aspect
ChooseDataSourceAspect.java 3KB
ChooseDataSource.java 584B
controller
PersonController.java 2KB
utils
db
DataSourceCheckUtils.java 1KB
DynamicDataSourceUtils.java 1KB
DynamicDataSourceHolder.java 800B
service
PersonService.java 247B
impl
PersonServiceImpl.java 439B
webapp
WEB-INF
web.xml 3KB
pom.xml 6KB
.idea
misc.xml 566B
encodings.xml 294B
libraries
Maven__org_springframework_spring_aspects_4_3_19_RELEASE.xml 644B
Maven__org_mybatis_mybatis_spring_1_3_2.xml 549B
Maven__org_slf4j_slf4j_log4j12_1_7_6.xml 534B
Maven__commons_logging_commons_logging_1_2.xml 558B
Maven__org_springframework_spring_expression_4_3_19_RELEASE.xml 665B
Maven__org_springframework_spring_context_4_3_19_RELEASE.xml 644B
Maven__com_fasterxml_jackson_core_jackson_core_2_7_4.xml 595B
Maven__org_springframework_spring_jdbc_4_3_19_RELEASE.xml 623B
Maven__org_springframework_spring_test_4_3_19_RELEASE.xml 623B
Maven__log4j_log4j_1_2_17.xml 469B
Maven__com_baomidou_mybatis_plus_core_2_3.xml 560B
Maven__com_github_jsqlparser_jsqlparser_1_1.xml 547B
Maven__org_springframework_spring_webmvc_portlet_4_3_19_RELEASE.xml 693B
Maven__javax_servlet_jstl_1_2.xml 473B
Maven__com_alibaba_druid_1_1_0.xml 486B
Maven__mysql_mysql_connector_java_5_1_42.xml 574B
Maven__com_baomidou_mybatis_plus_generate_2_3.xml 588B
Maven__com_baomidou_mybatis_plus_support_2_3.xml 581B
Maven__com_fasterxml_jackson_core_jackson_annotations_2_7_0.xml 644B
Maven__org_apache_commons_commons_lang3_3_5.xml 556B
Maven__org_springframework_spring_orm_4_3_19_RELEASE.xml 616B
Maven__org_springframework_spring_webmvc_4_3_19_RELEASE.xml 637B
Maven__org_mybatis_mybatis_3_4_6.xml 500B
Maven__com_baomidou_mybatis_plus_2_3.xml 525B
Maven__javax_servlet_servlet_api_2_5.xml 522B
Maven__org_springframework_spring_web_4_3_19_RELEASE.xml 616B
Maven__org_springframework_spring_context_support_4_3_19_RELEASE.xml 700B
Maven__org_apache_velocity_velocity_engine_core_2_0.xml 609B
Maven__org_springframework_spring_tx_4_3_19_RELEASE.xml 609B
Maven__org_springframework_spring_beans_4_3_19_RELEASE.xml 630B
Maven__org_aspectj_aspectjweaver_1_8_9.xml 542B
Maven__org_springframework_spring_core_4_3_19_RELEASE.xml 623B
Maven__javax_servlet_jsp_jsp_api_2_2.xml 510B
Maven__org_springframework_spring_aop_4_3_19_RELEASE.xml 616B
Maven__org_slf4j_slf4j_api_1_7_6.xml 506B
Maven__com_fasterxml_jackson_core_jackson_databind_2_7_4.xml 623B
workspace.xml 39KB
artifacts
ssm_db_dynamicswitching_war_exploded.xml 4KB
ssm_db_dynamicswitching_war.xml 348B
inspectionProfiles
compiler.xml 658B
modules.xml 286B
ssm-db-dynamicswitching.iml 5KB
共 67 条
- 1
资源评论
- 郭逗2023-07-28这个文件详细介绍了使用Spring、Spring MVC、Mybatis Plus和Aop的方法,并提供了动态切换数据源的实现。
- 高中化学孙环宇2023-07-28作者以简洁明了的语言介绍了自定义注解的使用,让人可以轻松上手。
- 老光私享2023-07-28对于想要学习以上技术栈的开发者来说,这是一个很有参考价值的文件。
- 叫我叔叔就行2023-07-28文件中的代码示例丰富而实用,可以帮助开发者快速解决实际问题。
- 俞林鑫2023-07-28这个文件虽然篇幅不长,但是介绍的内容却是实用且易于理解的,值得一读。
战·后风!!
- 粉丝: 85
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功