From cd1fdec5fc60198780ed239779052bf6954427ea Mon Sep 17 00:00:00 2001
From: zwl <1051256694@qq.com>
Date: 星期一, 08 九月 2025 21:30:20 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/ycawdasrs-2' into ycawdasrs-2
---
src/main/java/com/zy/common/config/ds/DataSourceType.java | 32 ++++++
src/main/java/com/zy/common/config/ds/DataSourceAop.java | 27 +++++
src/main/java/com/zy/common/config/ds/SecondaryDataSourceConfig.java | 38 +++++++
src/main/java/com/zy/common/config/ds/DataSourceConfig.java | 44 ++++++++
src/main/java/com/zy/common/properties/SystemProperties.java | 2
src/main/java/com/zy/common/config/ds/AbstractRoutingDataSource.java | 38 +++++++
pom.xml | 26 +++--
src/main/resources/application.yml | 10 ++
src/main/java/com/zy/common/config/ds/DynamicDataSource.java | 11 ++
src/main/java/com/zy/common/config/ds/PrimaryDataSourceConfig.java | 40 ++++++++
10 files changed, 256 insertions(+), 12 deletions(-)
diff --git a/pom.xml b/pom.xml
index f2b6bc0..d62daf4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -15,22 +15,14 @@
<properties>
<java.version>1.8</java.version>
- <cool.version>3.2.0</cool.version>
- <mysql-driver.version>5.1.47</mysql-driver.version>
+ <cool.version>3.4.0</cool.version>
+ <mysql-driver.version>8.0.28</mysql-driver.version>
<mybatis-plus.version>2.3.2</mybatis-plus.version>
<fastjson.version>1.2.58</fastjson.version>
<springfox.version>2.7.0</springfox.version>
</properties>
-
-
<dependencies>
- <dependency>
- <groupId>javax.mail</groupId>
- <artifactId>mail</artifactId>
- <version>1.4.7</version>
- </dependency>
-
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
@@ -38,11 +30,15 @@
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
- <scope>provided</scope>
+ <scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>cn.cool</groupId>
@@ -54,6 +50,7 @@
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-driver.version}</version>
</dependency>
+
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
@@ -64,6 +61,13 @@
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
+ <!-- jdk 8+ 寮曞叆鍙�夋ā鍧� -->
+ <!-- <dependency>-->
+ <!-- <groupId>com.baomidou</groupId>-->
+ <!-- <artifactId>mybatis-plus-jsqlparser-4.9</artifactId>-->
+ <!-- <version>3.5.9</version>-->
+ <!-- </dependency>-->
+
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
diff --git a/src/main/java/com/zy/common/config/ds/AbstractRoutingDataSource.java b/src/main/java/com/zy/common/config/ds/AbstractRoutingDataSource.java
new file mode 100644
index 0000000..d8b8519
--- /dev/null
+++ b/src/main/java/com/zy/common/config/ds/AbstractRoutingDataSource.java
@@ -0,0 +1,38 @@
+package com.zy.common.config.ds;
+
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.jdbc.datasource.AbstractDataSource;
+import org.springframework.util.Assert;
+
+import javax.sql.DataSource;
+import java.util.Map;
+
+public abstract class AbstractRoutingDataSource extends AbstractDataSource implements InitializingBean {
+ //澶氭暟鎹簮map闆嗗悎
+ private Map<Object, Object> targetDataSources;
+ //榛樿鏁版嵁婧�
+ private Object defaultTargetDataSource;
+ //鍏跺疄灏辨槸targetDataSources锛屽悗闈㈢殑afterPropertiesSet锛堬級鏂规硶浼氬皢targetDataSources璧嬪�肩粰resolvedDataSources
+ private Map<Object, DataSource> resolvedDataSources;
+ private DataSource resolvedDefaultDataSource;
+
+ public void setTargetDataSources(Map<Object, Object> targetDataSources) {
+ this.targetDataSources = targetDataSources;
+ }
+
+ protected DataSource determineTargetDataSource() {
+ Assert.notNull(this.resolvedDataSources, "DataSource router not initialized");
+ Object lookupKey = this.determineCurrentLookupKey();
+ DataSource dataSource = (DataSource) this.resolvedDataSources.get(lookupKey);
+ if (dataSource == null && ( lookupKey == null)) {
+ dataSource = this.resolvedDefaultDataSource;
+ }
+ if (dataSource == null) {
+ throw new IllegalStateException("Cannot determine target DataSource for lookup key [" + lookupKey + "]");
+ } else {
+ return dataSource;
+ }
+ }
+
+ protected abstract Object determineCurrentLookupKey();
+}
\ No newline at end of file
diff --git a/src/main/java/com/zy/common/config/ds/DataSourceAop.java b/src/main/java/com/zy/common/config/ds/DataSourceAop.java
new file mode 100644
index 0000000..4de4666
--- /dev/null
+++ b/src/main/java/com/zy/common/config/ds/DataSourceAop.java
@@ -0,0 +1,27 @@
+package com.zy.common.config.ds;
+
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Before;
+import org.springframework.stereotype.Component;
+
+@Aspect
+@Component
+public class DataSourceAop {
+ @Before("execution(* com.zy.asrs..*(..))")
+ public void setDataSource2test01() {
+ //System.err.println("test01涓氬姟");
+ DataSourceType.setDataBaseType(DataSourceType.DataBaseType.TEST01);
+ }
+
+ @Before("execution(* com.zy.system..*(..))")
+ public void setDataSource2test012() {
+ //System.err.println("test01涓氬姟");
+ DataSourceType.setDataBaseType(DataSourceType.DataBaseType.TEST01);
+ }
+
+ @Before("execution(* com.zy.nc..*(..))")
+ public void setDataSource2test02() {
+ //System.err.println("test02涓氬姟");
+ DataSourceType.setDataBaseType(DataSourceType.DataBaseType.TEST02);
+ }
+}
diff --git a/src/main/java/com/zy/common/config/ds/DataSourceConfig.java b/src/main/java/com/zy/common/config/ds/DataSourceConfig.java
new file mode 100644
index 0000000..755f6d3
--- /dev/null
+++ b/src/main/java/com/zy/common/config/ds/DataSourceConfig.java
@@ -0,0 +1,44 @@
+package com.zy.common.config.ds;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+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;
+
+@Configuration
+public class DataSourceConfig {
+
+ @Value("${other.datasource.jdbc-url}")
+ private String url;
+ @Value("${other.datasource.username}")
+ private String username;
+ @Value("${other.datasource.password}")
+ private String password;
+ @Value("${other.datasource.driver-class-name}")
+ private String driverClassName;
+
+ // 涓绘暟鎹簮
+ @Bean(name = "dataSource")
+ @Primary
+ @ConfigurationProperties(prefix = "spring.datasource")
+ public DataSource primaryDataSource() {
+ return DataSourceBuilder.create().build();
+ }
+
+ // 娆℃暟鎹簮
+ @Bean(name = "slaveDataSource")
+ public DataSource secondaryDataSource() {
+ return DataSourceBuilder.create()
+ .driverClassName(driverClassName)
+ .url(url)
+ .username(username)
+ .password(password)
+ .build();
+
+ }
+
+}
diff --git a/src/main/java/com/zy/common/config/ds/DataSourceType.java b/src/main/java/com/zy/common/config/ds/DataSourceType.java
new file mode 100644
index 0000000..57ce62b
--- /dev/null
+++ b/src/main/java/com/zy/common/config/ds/DataSourceType.java
@@ -0,0 +1,32 @@
+package com.zy.common.config.ds;
+
+public class DataSourceType {
+
+ public enum DataBaseType {
+ TEST01, TEST02
+ }
+
+ // 浣跨敤ThreadLocal淇濊瘉绾跨▼瀹夊叏
+ private static final ThreadLocal<DataBaseType> TYPE = new ThreadLocal<DataBaseType>();
+
+ // 寰�褰撳墠绾跨▼閲岃缃暟鎹簮绫诲瀷
+ public static void setDataBaseType(DataBaseType dataBaseType) {
+ if (dataBaseType == null) {
+ throw new NullPointerException();
+ }
+ //System.err.println("[灏嗗綋鍓嶆暟鎹簮鏀逛负]锛�" + dataBaseType);
+ TYPE.set(dataBaseType);
+ }
+
+ // 鑾峰彇鏁版嵁婧愮被鍨�
+ public static DataBaseType getDataBaseType() {
+ DataBaseType dataBaseType = TYPE.get() == null ? DataBaseType.TEST01 : TYPE.get();
+ //System.err.println("[鑾峰彇褰撳墠鏁版嵁婧愮殑绫诲瀷涓篯锛�" + dataBaseType);
+ return dataBaseType;
+ }
+
+ // 娓呯┖鏁版嵁绫诲瀷
+ public static void clearDataBaseType() {
+ TYPE.remove();
+ }
+}
diff --git a/src/main/java/com/zy/common/config/ds/DynamicDataSource.java b/src/main/java/com/zy/common/config/ds/DynamicDataSource.java
new file mode 100644
index 0000000..a0e228c
--- /dev/null
+++ b/src/main/java/com/zy/common/config/ds/DynamicDataSource.java
@@ -0,0 +1,11 @@
+package com.zy.common.config.ds;
+
+import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
+
+public class DynamicDataSource extends AbstractRoutingDataSource {
+ @Override
+ protected Object determineCurrentLookupKey() {
+ DataSourceType.DataBaseType dataBaseType = DataSourceType.getDataBaseType();
+ return dataBaseType;
+ }
+}
diff --git a/src/main/java/com/zy/common/config/ds/PrimaryDataSourceConfig.java b/src/main/java/com/zy/common/config/ds/PrimaryDataSourceConfig.java
new file mode 100644
index 0000000..16b482c
--- /dev/null
+++ b/src/main/java/com/zy/common/config/ds/PrimaryDataSourceConfig.java
@@ -0,0 +1,40 @@
+package com.zy.common.config.ds;
+
+import com.baomidou.mybatisplus.plugins.PaginationInterceptor;
+import com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean;
+import org.apache.ibatis.plugin.Interceptor;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
+import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
+import org.springframework.jdbc.datasource.DataSourceTransactionManager;
+
+import javax.sql.DataSource;
+
+@Configuration
+@MapperScan(basePackages = {"com.zy.asrs.mapper", "com.zy.system.mapper"}, sqlSessionFactoryRef = "primarySqlSessionFactory")
+public class PrimaryDataSourceConfig {
+
+ @Bean(name = "primarySqlSessionFactory")
+ @Primary
+ public MybatisSqlSessionFactoryBean primarySqlSessionFactory(@Qualifier("dataSource") DataSource dataSource, PaginationInterceptor paginationInterceptor) throws Exception {
+ MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean();
+ sessionFactory.setDataSource(dataSource);
+ // 璁剧疆MyBatis鐨凪apper XML鏂囦欢璺緞
+ sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
+ .getResources("classpath:mapper/asrs/*.xml"));
+ Interceptor[] interceptors = new Interceptor[]{paginationInterceptor};
+ sessionFactory.setPlugins(interceptors);
+ return sessionFactory;
+ }
+
+ @Bean(name = "transactionManager")
+ @Primary
+ public DataSourceTransactionManager primaryTransactionManager(@Qualifier("dataSource") DataSource dataSource) {
+ return new DataSourceTransactionManager(dataSource);
+ }
+
+
+}
diff --git a/src/main/java/com/zy/common/config/ds/SecondaryDataSourceConfig.java b/src/main/java/com/zy/common/config/ds/SecondaryDataSourceConfig.java
new file mode 100644
index 0000000..48652f8
--- /dev/null
+++ b/src/main/java/com/zy/common/config/ds/SecondaryDataSourceConfig.java
@@ -0,0 +1,38 @@
+package com.zy.common.config.ds;
+
+import com.baomidou.mybatisplus.plugins.PaginationInterceptor;
+import com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean;
+import org.apache.ibatis.plugin.Interceptor;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
+import org.springframework.jdbc.datasource.DataSourceTransactionManager;
+
+import javax.sql.DataSource;
+
+@Configuration
+@MapperScan(basePackages = "com.zy.nc.mapper", sqlSessionFactoryRef = "secondarySqlSessionFactory")
+public class SecondaryDataSourceConfig {
+
+ @Bean(name = "secondarySqlSessionFactory")
+ public MybatisSqlSessionFactoryBean secondarySqlSessionFactory(@Qualifier("slaveDataSource") DataSource dataSource, PaginationInterceptor paginationInterceptor) throws Exception {
+ MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean();
+ sessionFactory.setDataSource(dataSource);
+ // 璁剧疆MyBatis鐨凪apper XML鏂囦欢璺緞
+ sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
+ .getResources("classpath:mapper/nc/*.xml"));
+ Interceptor[] interceptors = new Interceptor[] { paginationInterceptor };
+ sessionFactory.setPlugins(interceptors);
+
+ return sessionFactory;
+ }
+
+ @Bean(name = "secondaryTransactionManager")
+ public DataSourceTransactionManager secondaryTransactionManager(@Qualifier("slaveDataSource") DataSource dataSource) {
+ return new DataSourceTransactionManager(dataSource);
+ }
+
+
+}
diff --git a/src/main/java/com/zy/common/properties/SystemProperties.java b/src/main/java/com/zy/common/properties/SystemProperties.java
index e10c272..d8bfe0f 100644
--- a/src/main/java/com/zy/common/properties/SystemProperties.java
+++ b/src/main/java/com/zy/common/properties/SystemProperties.java
@@ -63,7 +63,7 @@
// 鐢熸垚婵�娲荤爜
public static void main(String[] args) {
- String timeStr = "2026-08-05 13:48:35";
+ String timeStr = "2025-08-21 13:48:35";
Date exprTime = DateUtils.convert(timeStr);
String code = AesUtils.encrypt(DateUtils.convert(exprTime, DateUtils.yyyyMMddHHmmss), SystemProperties.SALT);
System.out.println("婵�娲荤爜锛�"+code);
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 1bb95db..5baf1a6 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -26,6 +26,16 @@
maxFileSize: 100MB
maxRequestSize: 100MB
+other:
+ datasource:
+ # jdbc-url: jdbc:mysql://127.0.0.1:3306/wmsdata
+ # username: root
+ # password: root
+ driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
+ url: jdbc:sqlserver://127.0.0.1:1433;databasename=ycawdasrs
+ username: liku
+ password: 123456
+
mybatis-plus:
mapper-locations: classpath:mapper/*.xml
# global-config:
--
Gitblit v1.9.1