| pom.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/common/config/ds/AbstractRoutingDataSource.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/common/config/ds/DataSourceAop.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/common/config/ds/DataSourceConfig.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/common/config/ds/DataSourceType.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/common/config/ds/DynamicDataSource.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/common/config/ds/PrimaryDataSourceConfig.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/common/config/ds/SecondaryDataSourceConfig.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/common/properties/SystemProperties.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/resources/application.yml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
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> src/main/java/com/zy/common/config/ds/AbstractRoutingDataSource.java
New file @@ -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(); } src/main/java/com/zy/common/config/ds/DataSourceAop.java
New file @@ -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); } } src/main/java/com/zy/common/config/ds/DataSourceConfig.java
New file @@ -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(); } } src/main/java/com/zy/common/config/ds/DataSourceType.java
New file @@ -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(); } } src/main/java/com/zy/common/config/ds/DynamicDataSource.java
New file @@ -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; } } src/main/java/com/zy/common/config/ds/PrimaryDataSourceConfig.java
New file @@ -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的Mapper 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); } } src/main/java/com/zy/common/config/ds/SecondaryDataSourceConfig.java
New file @@ -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的Mapper 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); } } 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); 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: