diff --git a/pom.xml b/pom.xml
index eed4df0..063ba90 100644
--- a/pom.xml
+++ b/pom.xml
@@ -12,6 +12,7 @@
xservice-common
xservice-cache
xservice-third-part
+ xservice-mysql-starter
@@ -71,13 +72,17 @@
mybatis-spring-boot-starter
${mybatis-spring-boot.version}
-
-
org.springframework.boot
- spring-boot-starter-data-redis
+ spring-boot-starter-aop
+
+
+
+
+
+
org.apache.rocketmq
diff --git a/xservice-common/pom.xml b/xservice-common/pom.xml
index 10f07ac..2562933 100644
--- a/xservice-common/pom.xml
+++ b/xservice-common/pom.xml
@@ -8,6 +8,7 @@
xservice-basic
1.0-SNAPSHOT
+ 1.0.1-SNAPSHOT
xservice-common
diff --git a/xservice-mysql-starter/pom.xml b/xservice-mysql-starter/pom.xml
new file mode 100644
index 0000000..c1ee692
--- /dev/null
+++ b/xservice-mysql-starter/pom.xml
@@ -0,0 +1,20 @@
+
+
+ 4.0.0
+
+ com.xiang
+ xservice-basic
+ 1.0-SNAPSHOT
+
+
+ xservice-mysql-starter
+
+
+ 17
+ 17
+ UTF-8
+
+
+
\ No newline at end of file
diff --git a/xservice-mysql-starter/src/main/java/com/xiang/xservice/mysql/annotation/DynamicDataSource.java b/xservice-mysql-starter/src/main/java/com/xiang/xservice/mysql/annotation/DynamicDataSource.java
new file mode 100644
index 0000000..38bebdf
--- /dev/null
+++ b/xservice-mysql-starter/src/main/java/com/xiang/xservice/mysql/annotation/DynamicDataSource.java
@@ -0,0 +1,13 @@
+package com.xiang.xservice.mysql.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target({ElementType.METHOD, ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface DynamicDataSource {
+ // 数据源标识
+ String value();
+}
diff --git a/xservice-mysql-starter/src/main/java/com/xiang/xservice/mysql/aspect/DynamicDataSourceAspect.java b/xservice-mysql-starter/src/main/java/com/xiang/xservice/mysql/aspect/DynamicDataSourceAspect.java
new file mode 100644
index 0000000..8417bb5
--- /dev/null
+++ b/xservice-mysql-starter/src/main/java/com/xiang/xservice/mysql/aspect/DynamicDataSourceAspect.java
@@ -0,0 +1,31 @@
+package com.xiang.xservice.mysql.aspect;
+
+import com.xiang.xservice.mysql.annotation.DynamicDataSource;
+import com.xiang.xservice.mysql.config.DynamicDataSourceContext;
+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.aspectj.lang.reflect.MethodSignature;
+import org.springframework.stereotype.Component;
+
+@Aspect
+@Component
+public class DynamicDataSourceAspect {
+ @Pointcut("@annotation(com.xiang.xservice.mysql.annotation.DynamicDataSource)")
+ public void dataSourcePointCut() {}
+
+ @Around("dataSourcePointCut()")
+ public Object switchDataSource(ProceedingJoinPoint point) throws Throwable {
+ MethodSignature signature = (MethodSignature) point.getSignature();
+ DynamicDataSource ds = signature.getMethod().getAnnotation(DynamicDataSource.class);
+ if (ds != null) {
+ DynamicDataSourceContext.set(ds.value());
+ }
+ try {
+ return point.proceed();
+ } finally {
+ DynamicDataSourceContext.clear();
+ }
+ }
+}
diff --git a/xservice-mysql-starter/src/main/java/com/xiang/xservice/mysql/config/DynamicDataSourceConfig.java b/xservice-mysql-starter/src/main/java/com/xiang/xservice/mysql/config/DynamicDataSourceConfig.java
new file mode 100644
index 0000000..1a99752
--- /dev/null
+++ b/xservice-mysql-starter/src/main/java/com/xiang/xservice/mysql/config/DynamicDataSourceConfig.java
@@ -0,0 +1,37 @@
+package com.xiang.xservice.mysql.config;
+
+import com.google.common.collect.Maps;
+import com.xiang.xservice.mysql.entity.DynamicDataSourceProperties;
+import com.xiang.xservice.mysql.service.DynamicRoutingDataSource;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.boot.jdbc.DataSourceBuilder;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
+
+import javax.sql.DataSource;
+import java.util.Map;
+
+@Configuration
+@EnableConfigurationProperties(DynamicDataSourceProperties.class)
+public class DynamicDataSourceConfig {
+
+ @Bean
+ @Primary
+ public DataSource dataSource(DynamicDataSourceProperties props) {
+ Map