+ * DbAcess 自动配置类 + */ +@AllArgsConstructor +@EnableConfigurationProperties({DruidDataSourceProperties.class}) +public class DataSourceAutoConfiguration { +} diff --git a/pigx-common/pigx-common-datasource/src/main/java/com/pig4cloud/pigx/common/datasource/annotation/EnableDynamicDataSource.java b/pigx-common/pigx-common-datasource/src/main/java/com/pig4cloud/pigx/common/datasource/annotation/EnableDynamicDataSource.java new file mode 100644 index 000000000..99ebdbd6d --- /dev/null +++ b/pigx-common/pigx-common-datasource/src/main/java/com/pig4cloud/pigx/common/datasource/annotation/EnableDynamicDataSource.java @@ -0,0 +1,20 @@ +package com.pig4cloud.pigx.common.datasource.annotation; + +import com.pig4cloud.pigx.common.datasource.config.DynamicDataSourceConfig; +import org.springframework.context.annotation.Import; + +import java.lang.annotation.*; + +/** + * @author Lucky + * @date 2019-05-18 + *
+ * 开启动态数据源 + */ +@Target({ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@Inherited +@Import({DynamicDataSourceConfig.class}) +public @interface EnableDynamicDataSource { +} diff --git a/pigx-visual/pigx-codegen/src/main/java/com/pig4cloud/pigx/codegen/config/DruidDataSourceProperties.java b/pigx-common/pigx-common-datasource/src/main/java/com/pig4cloud/pigx/common/datasource/config/DruidDataSourceProperties.java similarity index 89% rename from pigx-visual/pigx-codegen/src/main/java/com/pig4cloud/pigx/codegen/config/DruidDataSourceProperties.java rename to pigx-common/pigx-common-datasource/src/main/java/com/pig4cloud/pigx/common/datasource/config/DruidDataSourceProperties.java index d80228ef8..efb00821c 100644 --- a/pigx-visual/pigx-codegen/src/main/java/com/pig4cloud/pigx/codegen/config/DruidDataSourceProperties.java +++ b/pigx-common/pigx-common-datasource/src/main/java/com/pig4cloud/pigx/common/datasource/config/DruidDataSourceProperties.java @@ -1,4 +1,4 @@ -package com.pig4cloud.pigx.codegen.config; +package com.pig4cloud.pigx.common.datasource.config; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; diff --git a/pigx-visual/pigx-codegen/src/main/java/com/pig4cloud/pigx/codegen/config/DynamicDataSource.java b/pigx-common/pigx-common-datasource/src/main/java/com/pig4cloud/pigx/common/datasource/config/DynamicDataSource.java similarity index 75% rename from pigx-visual/pigx-codegen/src/main/java/com/pig4cloud/pigx/codegen/config/DynamicDataSource.java rename to pigx-common/pigx-common-datasource/src/main/java/com/pig4cloud/pigx/common/datasource/config/DynamicDataSource.java index 252b8d87f..557b5d236 100644 --- a/pigx-visual/pigx-codegen/src/main/java/com/pig4cloud/pigx/codegen/config/DynamicDataSource.java +++ b/pigx-common/pigx-common-datasource/src/main/java/com/pig4cloud/pigx/common/datasource/config/DynamicDataSource.java @@ -1,6 +1,6 @@ -package com.pig4cloud.pigx.codegen.config; +package com.pig4cloud.pigx.common.datasource.config; -import com.pig4cloud.pigx.codegen.util.DynamicDataSourceContextHolder; +import com.pig4cloud.pigx.common.datasource.support.DynamicDataSourceContextHolder; import lombok.extern.slf4j.Slf4j; import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource; diff --git a/pigx-visual/pigx-codegen/src/main/java/com/pig4cloud/pigx/codegen/config/DynamicDataSourceConfig.java b/pigx-common/pigx-common-datasource/src/main/java/com/pig4cloud/pigx/common/datasource/config/DynamicDataSourceConfig.java similarity index 96% rename from pigx-visual/pigx-codegen/src/main/java/com/pig4cloud/pigx/codegen/config/DynamicDataSourceConfig.java rename to pigx-common/pigx-common-datasource/src/main/java/com/pig4cloud/pigx/common/datasource/config/DynamicDataSourceConfig.java index 88bf9ca93..b0d0d22df 100644 --- a/pigx-visual/pigx-codegen/src/main/java/com/pig4cloud/pigx/codegen/config/DynamicDataSourceConfig.java +++ b/pigx-common/pigx-common-datasource/src/main/java/com/pig4cloud/pigx/common/datasource/config/DynamicDataSourceConfig.java @@ -1,8 +1,13 @@ -package com.pig4cloud.pigx.codegen.config; +package com.pig4cloud.pigx.common.datasource.config; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import javax.annotation.PostConstruct; import com.alibaba.druid.pool.DruidDataSource; import com.mysql.cj.jdbc.Driver; -import com.pig4cloud.pigx.codegen.util.DataSourceConstants; +import com.pig4cloud.pigx.common.datasource.support.DataSourceConstants; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.jasypt.encryption.StringEncryptor; @@ -14,12 +19,6 @@ import org.springframework.jdbc.datasource.DriverManagerDataSource; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.annotation.TransactionManagementConfigurer; -import javax.annotation.PostConstruct; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Optional; - /** * @author lengleng * @date 2019-03-31 diff --git a/pigx-common/pigx-common-datasource/src/main/java/com/pig4cloud/pigx/common/datasource/config/DynamicDatasourceInterceptor.java b/pigx-common/pigx-common-datasource/src/main/java/com/pig4cloud/pigx/common/datasource/config/DynamicDatasourceInterceptor.java new file mode 100644 index 000000000..af25dc51d --- /dev/null +++ b/pigx-common/pigx-common-datasource/src/main/java/com/pig4cloud/pigx/common/datasource/config/DynamicDatasourceInterceptor.java @@ -0,0 +1,43 @@ +package com.pig4cloud.pigx.common.datasource.config; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import com.pig4cloud.pigx.common.datasource.support.DynamicDataSourceContextHolder; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.data.redis.core.HashOperations; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; +import org.springframework.lang.Nullable; +import org.springframework.stereotype.Component; +import org.springframework.web.servlet.HandlerInterceptor; + +/** + * @author lengleng + * @date 2019-05-18 + *
+ * 动态数据源拦截器
+ */
+@Slf4j
+@Component
+@AllArgsConstructor
+public class DynamicDatasourceInterceptor implements HandlerInterceptor {
+ private final RedisTemplate redisTemplate;
+
+ @Override
+ public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
+ redisTemplate.setHashValueSerializer(new Jackson2JsonRedisSerializer<>(String.class));
+ HashOperations
- * 保存上线文中数据库路由
+ * 根据当前线程来选择具体的数据源
*/
@UtilityClass
public class DynamicDataSourceContextHolder {
private final ThreadLocal