From eca308e06fe2c172871f57d17837cb85035d8329 Mon Sep 17 00:00:00 2001 From: wangw <1594593906@qq.com> Date: Mon, 30 Dec 2024 14:02:26 +0800 Subject: [PATCH 1/6] ShardingConfig --- pom.xml | 55 ++++- src/main/java/com/sqx/SqxApplication.java | 43 ++-- src/main/java/com/sqx/config/RedisConfig.java | 7 + .../java/com/sqx/config/ShardingConfig.java | 153 ++++++++++++++ ...ataSourcePoolMetricsAutoConfiguration.java | 67 ++++++ .../java/com/sqx/config/SwaggerConfig.java | 143 +++++++------ .../sqx/datasource/annotation/DataSource.java | 14 -- .../datasource/aspect/DataSourceAspect.java | 61 ------ .../config/DynamicContextHolder.java | 47 ----- .../datasource/config/DynamicDataSource.java | 15 -- .../config/DynamicDataSourceConfig.java | 53 ----- .../config/DynamicDataSourceFactory.java | 44 ---- .../properties/DataSourceProperties.java | 192 ------------------ .../DynamicDataSourceProperties.java | 22 -- .../app/controller/app/AppController.java | 2 +- .../controller/app/AppCommonController.java | 2 +- .../com/sqx/sharding/MasterSlaveRules.java | 22 ++ .../com/sqx/sharding/ShardingDataBase.java | 61 ++++++ src/main/resources/application-local.yml | 61 ++++++ src/main/resources/application.properties | 1 + src/main/resources/application.yml | 10 +- 21 files changed, 542 insertions(+), 533 deletions(-) create mode 100644 src/main/java/com/sqx/config/ShardingConfig.java create mode 100644 src/main/java/com/sqx/config/ShardingDataSourcePoolMetricsAutoConfiguration.java delete mode 100644 src/main/java/com/sqx/datasource/annotation/DataSource.java delete mode 100644 src/main/java/com/sqx/datasource/aspect/DataSourceAspect.java delete mode 100644 src/main/java/com/sqx/datasource/config/DynamicContextHolder.java delete mode 100644 src/main/java/com/sqx/datasource/config/DynamicDataSource.java delete mode 100644 src/main/java/com/sqx/datasource/config/DynamicDataSourceConfig.java delete mode 100644 src/main/java/com/sqx/datasource/config/DynamicDataSourceFactory.java delete mode 100644 src/main/java/com/sqx/datasource/properties/DataSourceProperties.java delete mode 100644 src/main/java/com/sqx/datasource/properties/DynamicDataSourceProperties.java create mode 100644 src/main/java/com/sqx/sharding/MasterSlaveRules.java create mode 100644 src/main/java/com/sqx/sharding/ShardingDataBase.java create mode 100644 src/main/resources/application-local.yml create mode 100644 src/main/resources/application.properties diff --git a/pom.xml b/pom.xml index b22e84e9..31ec0b85 100644 --- a/pom.xml +++ b/pom.xml @@ -35,12 +35,14 @@ 7.2.23 3.4.0 4.4 - 2.7.0 + + 2.9.2 2.9.9 2.8.5 1.2.83 4.6.10 1.18.4 + 4.1.1 + + com.baomidou + dynamic-datasource-spring-boot-starter + 4.1.3 + + mysql mysql-connector-java @@ -257,6 +278,23 @@ com.oracle ojdbc6 ${oracle.version} + + + + org.apache.shardingsphere + sharding-core-api + ${shardingsphere.version} + compile + + + org.apache.shardingsphere + sharding-jdbc-core + ${shardingsphere.version} + compile + + + org.springframework.boot + spring-boot-starter-actuator @@ -327,14 +365,25 @@ io.springfox - springfox-swagger2 + springfox-swagger-ui ${swagger.version} io.springfox - springfox-swagger-ui + springfox-swagger2 ${swagger.version} + + io.swagger + swagger-annotations + 1.5.22 + + + io.swagger + swagger-models + 1.5.22 + + com.qiniu qiniu-java-sdk diff --git a/src/main/java/com/sqx/SqxApplication.java b/src/main/java/com/sqx/SqxApplication.java index a3c22cfd..fada8ced 100644 --- a/src/main/java/com/sqx/SqxApplication.java +++ b/src/main/java/com/sqx/SqxApplication.java @@ -1,6 +1,7 @@ package com.sqx; import com.sqx.modules.pay.wuyou.WuyouPay; +import org.springframework.boot.Banner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCaching; @@ -18,25 +19,29 @@ import java.util.Map; public class SqxApplication { public static void main(String[] args) { - ConfigurableApplicationContext context = SpringApplication.run(SqxApplication.class, args); - context.getEnvironment().getPropertySources().forEach(source -> { - if (source.getName().contains("application-dev.yml") || source.getName().contains("application-prod.yml")) { - if (source.getSource() instanceof Map) { - ((Map) source.getSource()).forEach((key, value) -> { - System.out.println(key + ": " + value); - if ("pay.orderNotifyUrl".equals(key)) { - WuyouPay.setNotifyUrl(value.toString()); - } - if ("pay.extractNotifyUrl".equals(key)) { - WuyouPay.setExtractNotifyUrl(value.toString()); - } - if ("pay.h5BaseUrl".equals(key)) { - WuyouPay.setH5BaseUrl(value.toString()); - } - }); - } - } - }); + SpringApplication application = new SpringApplication(SqxApplication.class); + application.setBannerMode(Banner.Mode.OFF); + application.run(args); + +// ConfigurableApplicationContext context = SpringApplication.run(SqxApplication.class, args); +// context.getEnvironment().getPropertySources().forEach(source -> { +// if (source.getName().contains("application-dev.yml") || source.getName().contains("application-prod.yml")) { +// if (source.getSource() instanceof Map) { +// ((Map) source.getSource()).forEach((key, value) -> { +// System.out.println(key + ": " + value); +// if ("pay.orderNotifyUrl".equals(key)) { +// WuyouPay.setNotifyUrl(value.toString()); +// } +// if ("pay.extractNotifyUrl".equals(key)) { +// WuyouPay.setExtractNotifyUrl(value.toString()); +// } +// if ("pay.h5BaseUrl".equals(key)) { +// WuyouPay.setH5BaseUrl(value.toString()); +// } +// }); +// } +// } +// }); System.out.println("(♥◠‿◠)ノ゙ 短剧系统启动成功 ლ(´ڡ`ლ)゙ \n"+ " _ \n" + " | | \n" + diff --git a/src/main/java/com/sqx/config/RedisConfig.java b/src/main/java/com/sqx/config/RedisConfig.java index 6fddb78c..3188988c 100644 --- a/src/main/java/com/sqx/config/RedisConfig.java +++ b/src/main/java/com/sqx/config/RedisConfig.java @@ -1,5 +1,6 @@ package com.sqx.config; +import com.sqx.common.utils.RedisUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.CacheManager; import org.springframework.context.annotation.Bean; @@ -70,4 +71,10 @@ public class RedisConfig { public ZSetOperations zSetOperations(RedisTemplate redisTemplate) { return redisTemplate.opsForZSet(); } + + @Bean + public RedisUtils redisUtils() { + // 根据实际情况初始化RedisUtils实例,可能需要传入相关配置参数,如Redis连接信息等 + return new RedisUtils(); + } } diff --git a/src/main/java/com/sqx/config/ShardingConfig.java b/src/main/java/com/sqx/config/ShardingConfig.java new file mode 100644 index 00000000..12e0e2ed --- /dev/null +++ b/src/main/java/com/sqx/config/ShardingConfig.java @@ -0,0 +1,153 @@ +package com.sqx.config; + +import com.sqx.sharding.MasterSlaveRules; +import com.sqx.sharding.ShardingDataBase; +import com.zaxxer.hikari.HikariConfig; +import com.zaxxer.hikari.HikariDataSource; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.apache.shardingsphere.api.config.masterslave.MasterSlaveRuleConfiguration; +import org.apache.shardingsphere.api.config.sharding.ShardingRuleConfiguration; +import org.apache.shardingsphere.api.config.sharding.TableRuleConfiguration; +import org.apache.shardingsphere.shardingjdbc.api.ShardingDataSourceFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import javax.annotation.PostConstruct; +import javax.sql.DataSource; +import java.sql.SQLException; +import java.util.*; +import java.util.stream.Collectors; + + +/** + * sharding-jdbc 配置文件 + */ +@Slf4j +@Data +@Configuration +@ConfigurationProperties(prefix = "spring.shardingsphere") +public class ShardingConfig { + + /** + * 读取数据源信息 + */ + private Map datasource; + /** + * 读写分离的配置 + */ + private Map masterSlaveRules; + /** + * 显示sharding-jdbc的sql + */ + private String showSql; + + /** + * 中心库的节点 + */ + private String centerTablesDataNode; + + @Value("${center-tables}") + private String tableNamesAsString; + + /** + * 中心表,不进行分库操作 + */ +// @Value("${center-tables}") + private Set centerTables; + + @PostConstruct + public void init() { + // 使用换行符进行分割,然后去除空白字符,收集到Set集合中 + centerTables = Arrays.stream(tableNamesAsString.split(",")) + .map(String::trim) + .collect(Collectors.toSet()); + } + + + /** + * 配置sharding-jdbc数据源 + */ + @Bean + public DataSource dataSource() throws SQLException { + ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration(); + + // 配置数据库主从 + shardingRuleConfig.setMasterSlaveRuleConfigs(masterSlaveRuleConfigs()); + + // 配置表的切分策略 + shardingRuleConfig.setTableRuleConfigs(addTableRuleConfigs()); + + // 配置是否显示sql +// Properties props = new Properties(); +// props.put("sql.show", true); + + // 配置数据源 + Map dataSourceMap = getShardingDataBase(); + return ShardingDataSourceFactory.createDataSource(dataSourceMap, shardingRuleConfig, null); +// return ShardingDataSourceFactory.createDataSource(dataSourceMap, shardingRuleConfig, props); + } + + /** + * 配置 + */ + private Set addTableRuleConfigs() { + Set sets = new HashSet<>(); + for (String centerTable : centerTables) { + TableRuleConfiguration tableRuleConfig = new TableRuleConfiguration(centerTable, + String.format(centerTablesDataNode, centerTable)); + sets.add(tableRuleConfig); + } + +// // 定义区域表的分库规则 +// InlineShardingStrategyConfiguration databaseShardingStrategyConfig = new InlineShardingStrategyConfiguration( +// regionTablesShardingDatabaseColumn, regionTablesShardingDatabaseAlgorithm); +// for (String regionTable : regionTables) { +// TableRuleConfiguration tableRuleConfig = new TableRuleConfiguration(regionTable, String.format(regionTablesDataNode, regionTable)); +// tableRuleConfig.setDatabaseShardingStrategyConfig(databaseShardingStrategyConfig); +// sets.add(tableRuleConfig); +// } + return sets; + } + + /** + * 配置数据源 + */ + private Map getShardingDataBase() { + String testQuery = "SELECT 1"; + Map map = new HashMap<>(); + datasource.forEach((datasourceName, shardingDataBase) -> { + HikariConfig config = new HikariConfig(); + config.setDriverClassName(shardingDataBase.getDriverClassName()); + config.setJdbcUrl(shardingDataBase.getJdbcUrl()); + config.setUsername(shardingDataBase.getUsername()); + config.setPassword(shardingDataBase.getPassword()); + config.setPoolName(datasourceName); + config.setMinimumIdle(shardingDataBase.getMinimumIdle()); + config.setMaximumPoolSize(shardingDataBase.getMaximumPoolSize()); + config.setIdleTimeout(shardingDataBase.getIdleTimeout()); + config.setMaxLifetime(shardingDataBase.getMaxLifetime()); + config.setConnectionTimeout(shardingDataBase.getConnectionTimeout()); + config.setConnectionTestQuery(testQuery); + map.put(datasourceName, new HikariDataSource(config)); + }); + return map; + } + + /** + * 配置读写分离 + */ + private Set masterSlaveRuleConfigs() { + Set sets = new HashSet<>(); + masterSlaveRules.forEach((databaseName, masterSlaveRules) -> { + MasterSlaveRuleConfiguration masterSlaveRuleConfig = new MasterSlaveRuleConfiguration(databaseName, + masterSlaveRules.getMasterDataSourceName(), masterSlaveRules.getSlaveDataSourceNames()); + System.out.println("写入"+masterSlaveRules.getMasterDataSourceName()); + System.out.println("读出"+masterSlaveRules.getSlaveDataSourceNames()); + sets.add(masterSlaveRuleConfig); + }); + return sets; + } +} \ No newline at end of file diff --git a/src/main/java/com/sqx/config/ShardingDataSourcePoolMetricsAutoConfiguration.java b/src/main/java/com/sqx/config/ShardingDataSourcePoolMetricsAutoConfiguration.java new file mode 100644 index 00000000..c3454b5a --- /dev/null +++ b/src/main/java/com/sqx/config/ShardingDataSourcePoolMetricsAutoConfiguration.java @@ -0,0 +1,67 @@ +package com.sqx.config; + +import com.zaxxer.hikari.HikariDataSource; +import com.zaxxer.hikari.metrics.micrometer.MicrometerMetricsTrackerFactory; +import io.micrometer.core.instrument.MeterRegistry; +import lombok.extern.slf4j.Slf4j; +import org.apache.shardingsphere.shardingjdbc.jdbc.core.datasource.ShardingDataSource; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration; +import org.springframework.boot.actuate.autoconfigure.metrics.export.simple.SimpleMetricsExportAutoConfiguration; +import org.springframework.boot.autoconfigure.AutoConfigureAfter; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.boot.jdbc.DataSourceUnwrapper; +import org.springframework.context.annotation.Configuration; + +import javax.sql.DataSource; +import java.util.Collection; + +/** + * @author wxkj0012 + */ +@Configuration(proxyBeanMethods = false) +@AutoConfigureAfter({MetricsAutoConfiguration.class, DataSourceAutoConfiguration.class, + SimpleMetricsExportAutoConfiguration.class}) +@ConditionalOnClass({DataSource.class, MeterRegistry.class}) +@ConditionalOnBean({DataSource.class, MeterRegistry.class}) +@Slf4j +public class ShardingDataSourcePoolMetricsAutoConfiguration { + + @Configuration(proxyBeanMethods = false) + @ConditionalOnClass({ShardingDataSource.class, HikariDataSource.class}) + static class ShardingDataSourceMetricsConfiguration { + + private final MeterRegistry registry; + + ShardingDataSourceMetricsConfiguration(MeterRegistry registry) { + this.registry = registry; + } + + @Autowired + void bindMetricsRegistryToHikariDataSources(Collection dataSources) { + for (DataSource dataSource : dataSources) { + ShardingDataSource shardingDataSource = DataSourceUnwrapper.unwrap(dataSource, ShardingDataSource.class); + Collection shardDataSources = shardingDataSource.getDataSourceMap().values(); + for (DataSource ds : shardDataSources) { + HikariDataSource hikariDataSource = DataSourceUnwrapper.unwrap(ds, HikariDataSource.class); + if (hikariDataSource != null) { + bindMetricsRegistryToHikariDataSource(hikariDataSource); + } + } + } + } + + private void bindMetricsRegistryToHikariDataSource(HikariDataSource hikari) { + if (hikari.getMetricRegistry() == null && hikari.getMetricsTrackerFactory() == null) { + try { + hikari.setMetricsTrackerFactory(new MicrometerMetricsTrackerFactory(this.registry)); + } catch (Exception ex) { + log.warn("Failed to bind Hikari metrics: {}}", ex.getMessage()); + } + } + } + + } +} \ No newline at end of file diff --git a/src/main/java/com/sqx/config/SwaggerConfig.java b/src/main/java/com/sqx/config/SwaggerConfig.java index 8cf4bfee..8f991bfa 100644 --- a/src/main/java/com/sqx/config/SwaggerConfig.java +++ b/src/main/java/com/sqx/config/SwaggerConfig.java @@ -1,58 +1,85 @@ -package com.sqx.config; - -import io.swagger.annotations.ApiOperation; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; -import springfox.documentation.builders.ApiInfoBuilder; -import springfox.documentation.builders.PathSelectors; -import springfox.documentation.builders.RequestHandlerSelectors; -import springfox.documentation.service.ApiInfo; -import springfox.documentation.service.ApiKey; -import springfox.documentation.spi.DocumentationType; -import springfox.documentation.spring.web.plugins.Docket; -import springfox.documentation.swagger2.annotations.EnableSwagger2; - -import java.util.List; - -import static com.google.common.collect.Lists.newArrayList; - -@Configuration -@EnableSwagger2 -public class SwaggerConfig implements WebMvcConfigurer { - - @Value("${swagger.enabled}") - private boolean enabled; - - @Bean - public Docket createRestApi() { - return new Docket(DocumentationType.SWAGGER_2) - .enable(enabled) - .apiInfo(apiInfo()) - .select() - //加了ApiOperation注解的类,才生成接口文档 - .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)) - //包下的类,才生成接口文档 - //.apis(RequestHandlerSelectors.basePackage("com.sqx.controller")) - .paths(PathSelectors.any()) - .build() - .securitySchemes(security()); - } - - private ApiInfo apiInfo() { - return new ApiInfoBuilder() - .title("") - .description("sqx-fast文档") - .termsOfServiceUrl("") - .version("3.0.0") - .build(); - } - - private List security() { - return newArrayList( - new ApiKey("token", "token", "header") - ); - } - -} \ No newline at end of file +//package com.sqx.config; +// +//import io.swagger.annotations.Api; +//import io.swagger.annotations.ApiOperation; +//import org.springframework.beans.factory.annotation.Value; +//import org.springframework.context.annotation.Bean; +//import org.springframework.context.annotation.Configuration; +//import org.springframework.context.annotation.Profile; +//import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; +//import springfox.documentation.builders.ApiInfoBuilder; +//import springfox.documentation.builders.PathSelectors; +//import springfox.documentation.builders.RequestHandlerSelectors; +//import springfox.documentation.service.ApiInfo; +//import springfox.documentation.service.ApiKey; +//import springfox.documentation.spi.DocumentationType; +//import springfox.documentation.spring.web.plugins.Docket; +//import springfox.documentation.swagger2.annotations.EnableSwagger2; +// +//import java.util.List; +// +//import static com.google.common.collect.Lists.newArrayList; +// +////@Configuration +////@EnableSwagger2 +////public class SwaggerConfig implements WebMvcConfigurer { +//// +//// @Value("${swagger.enabled}") +//// private boolean enabled; +//// +//// @Bean +//// public Docket createRestApi() { +//// return new Docket(DocumentationType.SWAGGER_2) +//// .enable(enabled) +//// .apiInfo(apiInfo()) +//// .select() +//// //加了ApiOperation注解的类,才生成接口文档 +//// .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)) +//// //包下的类,才生成接口文档 +//// //.apis(RequestHandlerSelectors.basePackage("com.sqx.controller")) +//// .paths(PathSelectors.any()) +//// .build() +//// .securitySchemes(security()); +//// } +//// +//// private ApiInfo apiInfo() { +//// return new ApiInfoBuilder() +//// .title("") +//// .description("sqx-fast文档") +//// .termsOfServiceUrl("") +//// .version("3.0.0") +//// .build(); +//// } +//// +//// private List security() { +//// return newArrayList( +//// new ApiKey("token", "token", "header") +//// ); +//// } +//// +////} +// +//@Configuration +//@EnableSwagger2 +//@Profile({"local", "dev"}) +//public class SwaggerConfig { +// +// @Bean +// public Docket api() { +// return new Docket(DocumentationType.SWAGGER_2) +// .apiInfo(apiInfo()) +// .select() +// .apis(RequestHandlerSelectors.withClassAnnotation(Api.class)) +// .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)) +// .paths(PathSelectors.any()) +// .build(); +// } +// +// private ApiInfo apiInfo() { +// return new ApiInfoBuilder() +// .title("悠车位后台API接口文档") +// .description("悠车位服务端后台API接口文档") +// .version("1.0") +// .build(); +// } +//} \ No newline at end of file diff --git a/src/main/java/com/sqx/datasource/annotation/DataSource.java b/src/main/java/com/sqx/datasource/annotation/DataSource.java deleted file mode 100644 index 082da71b..00000000 --- a/src/main/java/com/sqx/datasource/annotation/DataSource.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.sqx.datasource.annotation; - -import java.lang.annotation.*; - -/** - * 多数据源注解 - */ -@Target({ElementType.METHOD, ElementType.TYPE}) -@Retention(RetentionPolicy.RUNTIME) -@Documented -@Inherited -public @interface DataSource { - String value() default ""; -} diff --git a/src/main/java/com/sqx/datasource/aspect/DataSourceAspect.java b/src/main/java/com/sqx/datasource/aspect/DataSourceAspect.java deleted file mode 100644 index b3c5d0ac..00000000 --- a/src/main/java/com/sqx/datasource/aspect/DataSourceAspect.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.sqx.datasource.aspect; - - -import com.sqx.datasource.annotation.DataSource; -import com.sqx.datasource.config.DynamicContextHolder; -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.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.core.Ordered; -import org.springframework.core.annotation.Order; -import org.springframework.stereotype.Component; - -import java.lang.reflect.Method; - -/** - * 多数据源,切面处理类 - */ -@Aspect -@Component -@Order(Ordered.HIGHEST_PRECEDENCE) -public class DataSourceAspect { - protected Logger logger = LoggerFactory.getLogger(getClass()); - - @Pointcut("@annotation(com.sqx.datasource.annotation.DataSource) " + - "|| @within(com.sqx.datasource.annotation.DataSource)") - public void dataSourcePointCut() { - - } - - @Around("dataSourcePointCut()") - public Object around(ProceedingJoinPoint point) throws Throwable { - MethodSignature signature = (MethodSignature) point.getSignature(); - Class targetClass = point.getTarget().getClass(); - Method method = signature.getMethod(); - - DataSource targetDataSource = (DataSource)targetClass.getAnnotation(DataSource.class); - DataSource methodDataSource = method.getAnnotation(DataSource.class); - if(targetDataSource != null || methodDataSource != null){ - String value; - if(methodDataSource != null){ - value = methodDataSource.value(); - }else { - value = targetDataSource.value(); - } - - DynamicContextHolder.push(value); - logger.debug("set datasource is {}", value); - } - - try { - return point.proceed(); - } finally { - DynamicContextHolder.poll(); - logger.debug("clean datasource"); - } - } -} \ No newline at end of file diff --git a/src/main/java/com/sqx/datasource/config/DynamicContextHolder.java b/src/main/java/com/sqx/datasource/config/DynamicContextHolder.java deleted file mode 100644 index f059bf76..00000000 --- a/src/main/java/com/sqx/datasource/config/DynamicContextHolder.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.sqx.datasource.config; - -import java.util.ArrayDeque; -import java.util.Deque; - -/** - * 多数据源上下文 - */ -public class DynamicContextHolder { - @SuppressWarnings("unchecked") - private static final ThreadLocal> CONTEXT_HOLDER = new ThreadLocal() { - @Override - protected Object initialValue() { - return new ArrayDeque(); - } - }; - - /** - * 获得当前线程数据源 - * - * @return 数据源名称 - */ - public static String peek() { - return CONTEXT_HOLDER.get().peek(); - } - - /** - * 设置当前线程数据源 - * - * @param dataSource 数据源名称 - */ - public static void push(String dataSource) { - CONTEXT_HOLDER.get().push(dataSource); - } - - /** - * 清空当前线程数据源 - */ - public static void poll() { - Deque deque = CONTEXT_HOLDER.get(); - deque.poll(); - if (deque.isEmpty()) { - CONTEXT_HOLDER.remove(); - } - } - -} \ No newline at end of file diff --git a/src/main/java/com/sqx/datasource/config/DynamicDataSource.java b/src/main/java/com/sqx/datasource/config/DynamicDataSource.java deleted file mode 100644 index 4374032b..00000000 --- a/src/main/java/com/sqx/datasource/config/DynamicDataSource.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.sqx.datasource.config; - -import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource; - -/** - * 多数据源 - */ -public class DynamicDataSource extends AbstractRoutingDataSource { - - @Override - protected Object determineCurrentLookupKey() { - return DynamicContextHolder.peek(); - } - -} diff --git a/src/main/java/com/sqx/datasource/config/DynamicDataSourceConfig.java b/src/main/java/com/sqx/datasource/config/DynamicDataSourceConfig.java deleted file mode 100644 index 9c1033fd..00000000 --- a/src/main/java/com/sqx/datasource/config/DynamicDataSourceConfig.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.sqx.datasource.config; - -import com.alibaba.druid.pool.DruidDataSource; -import com.sqx.datasource.properties.DataSourceProperties; -import com.sqx.datasource.properties.DynamicDataSourceProperties; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import java.util.HashMap; -import java.util.Map; - -/** - * 配置多数据源 - */ -@Configuration -@EnableConfigurationProperties(DynamicDataSourceProperties.class) -public class DynamicDataSourceConfig { - @Autowired - private DynamicDataSourceProperties properties; - - @Bean - @ConfigurationProperties(prefix = "spring.datasource.druid") - public DataSourceProperties dataSourceProperties() { - return new DataSourceProperties(); - } - - @Bean - public DynamicDataSource dynamicDataSource(DataSourceProperties dataSourceProperties) { - DynamicDataSource dynamicDataSource = new DynamicDataSource(); - dynamicDataSource.setTargetDataSources(getDynamicDataSource()); - - //默认数据源 - DruidDataSource defaultDataSource = DynamicDataSourceFactory.buildDruidDataSource(dataSourceProperties); - dynamicDataSource.setDefaultTargetDataSource(defaultDataSource); - - return dynamicDataSource; - } - - private Map getDynamicDataSource(){ - Map dataSourcePropertiesMap = properties.getDatasource(); - Map targetDataSources = new HashMap<>(dataSourcePropertiesMap.size()); - dataSourcePropertiesMap.forEach((k, v) -> { - DruidDataSource druidDataSource = DynamicDataSourceFactory.buildDruidDataSource(v); - targetDataSources.put(k, druidDataSource); - }); - - return targetDataSources; - } - -} \ No newline at end of file diff --git a/src/main/java/com/sqx/datasource/config/DynamicDataSourceFactory.java b/src/main/java/com/sqx/datasource/config/DynamicDataSourceFactory.java deleted file mode 100644 index b506b40c..00000000 --- a/src/main/java/com/sqx/datasource/config/DynamicDataSourceFactory.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.sqx.datasource.config; - -import com.alibaba.druid.pool.DruidDataSource; -import com.sqx.datasource.properties.DataSourceProperties; - -import java.sql.SQLException; - -/** - * DruidDataSource - * - */ -public class DynamicDataSourceFactory { - - public static DruidDataSource buildDruidDataSource(DataSourceProperties properties) { - DruidDataSource druidDataSource = new DruidDataSource(); - druidDataSource.setDriverClassName(properties.getDriverClassName()); - druidDataSource.setUrl(properties.getUrl()); - druidDataSource.setUsername(properties.getUsername()); - druidDataSource.setPassword(properties.getPassword()); - - druidDataSource.setInitialSize(properties.getInitialSize()); - druidDataSource.setMaxActive(properties.getMaxActive()); - druidDataSource.setMinIdle(properties.getMinIdle()); - druidDataSource.setMaxWait(properties.getMaxWait()); - druidDataSource.setTimeBetweenEvictionRunsMillis(properties.getTimeBetweenEvictionRunsMillis()); - druidDataSource.setMinEvictableIdleTimeMillis(properties.getMinEvictableIdleTimeMillis()); - druidDataSource.setMaxEvictableIdleTimeMillis(properties.getMaxEvictableIdleTimeMillis()); - druidDataSource.setValidationQuery(properties.getValidationQuery()); - druidDataSource.setValidationQueryTimeout(properties.getValidationQueryTimeout()); - druidDataSource.setTestOnBorrow(properties.isTestOnBorrow()); - druidDataSource.setTestOnReturn(properties.isTestOnReturn()); - druidDataSource.setPoolPreparedStatements(properties.isPoolPreparedStatements()); - druidDataSource.setMaxOpenPreparedStatements(properties.getMaxOpenPreparedStatements()); - druidDataSource.setSharePreparedStatements(properties.isSharePreparedStatements()); - - try { - druidDataSource.setFilters(properties.getFilters()); - druidDataSource.init(); - } catch (SQLException e) { - e.printStackTrace(); - } - return druidDataSource; - } -} \ No newline at end of file diff --git a/src/main/java/com/sqx/datasource/properties/DataSourceProperties.java b/src/main/java/com/sqx/datasource/properties/DataSourceProperties.java deleted file mode 100644 index 0cc4fc44..00000000 --- a/src/main/java/com/sqx/datasource/properties/DataSourceProperties.java +++ /dev/null @@ -1,192 +0,0 @@ -package com.sqx.datasource.properties; - -/** - * 多数据源属性 - * - */ -public class DataSourceProperties { - private String driverClassName; - private String url; - private String username; - private String password; - - /** - * Druid默认参数 - */ - private int initialSize = 2; - private int maxActive = 10; - private int minIdle = -1; - private long maxWait = 60 * 1000L; - private long timeBetweenEvictionRunsMillis = 60 * 1000L; - private long minEvictableIdleTimeMillis = 1000L * 60L * 30L; - private long maxEvictableIdleTimeMillis = 1000L * 60L * 60L * 7; - private String validationQuery = "select 1"; - private int validationQueryTimeout = -1; - private boolean testOnBorrow = false; - private boolean testOnReturn = false; - private boolean testWhileIdle = true; - private boolean poolPreparedStatements = false; - private int maxOpenPreparedStatements = -1; - private boolean sharePreparedStatements = false; - private String filters = "stat,wall"; - - public String getDriverClassName() { - return driverClassName; - } - - public void setDriverClassName(String driverClassName) { - this.driverClassName = driverClassName; - } - - public String getUrl() { - return url; - } - - public void setUrl(String url) { - this.url = url; - } - - public String getUsername() { - return username; - } - - public void setUsername(String username) { - this.username = username; - } - - public String getPassword() { - return password; - } - - public void setPassword(String password) { - this.password = password; - } - - public int getInitialSize() { - return initialSize; - } - - public void setInitialSize(int initialSize) { - this.initialSize = initialSize; - } - - public int getMaxActive() { - return maxActive; - } - - public void setMaxActive(int maxActive) { - this.maxActive = maxActive; - } - - public int getMinIdle() { - return minIdle; - } - - public void setMinIdle(int minIdle) { - this.minIdle = minIdle; - } - - public long getMaxWait() { - return maxWait; - } - - public void setMaxWait(long maxWait) { - this.maxWait = maxWait; - } - - public long getTimeBetweenEvictionRunsMillis() { - return timeBetweenEvictionRunsMillis; - } - - public void setTimeBetweenEvictionRunsMillis(long timeBetweenEvictionRunsMillis) { - this.timeBetweenEvictionRunsMillis = timeBetweenEvictionRunsMillis; - } - - public long getMinEvictableIdleTimeMillis() { - return minEvictableIdleTimeMillis; - } - - public void setMinEvictableIdleTimeMillis(long minEvictableIdleTimeMillis) { - this.minEvictableIdleTimeMillis = minEvictableIdleTimeMillis; - } - - public long getMaxEvictableIdleTimeMillis() { - return maxEvictableIdleTimeMillis; - } - - public void setMaxEvictableIdleTimeMillis(long maxEvictableIdleTimeMillis) { - this.maxEvictableIdleTimeMillis = maxEvictableIdleTimeMillis; - } - - public String getValidationQuery() { - return validationQuery; - } - - public void setValidationQuery(String validationQuery) { - this.validationQuery = validationQuery; - } - - public int getValidationQueryTimeout() { - return validationQueryTimeout; - } - - public void setValidationQueryTimeout(int validationQueryTimeout) { - this.validationQueryTimeout = validationQueryTimeout; - } - - public boolean isTestOnBorrow() { - return testOnBorrow; - } - - public void setTestOnBorrow(boolean testOnBorrow) { - this.testOnBorrow = testOnBorrow; - } - - public boolean isTestOnReturn() { - return testOnReturn; - } - - public void setTestOnReturn(boolean testOnReturn) { - this.testOnReturn = testOnReturn; - } - - public boolean isTestWhileIdle() { - return testWhileIdle; - } - - public void setTestWhileIdle(boolean testWhileIdle) { - this.testWhileIdle = testWhileIdle; - } - - public boolean isPoolPreparedStatements() { - return poolPreparedStatements; - } - - public void setPoolPreparedStatements(boolean poolPreparedStatements) { - this.poolPreparedStatements = poolPreparedStatements; - } - - public int getMaxOpenPreparedStatements() { - return maxOpenPreparedStatements; - } - - public void setMaxOpenPreparedStatements(int maxOpenPreparedStatements) { - this.maxOpenPreparedStatements = maxOpenPreparedStatements; - } - - public boolean isSharePreparedStatements() { - return sharePreparedStatements; - } - - public void setSharePreparedStatements(boolean sharePreparedStatements) { - this.sharePreparedStatements = sharePreparedStatements; - } - - public String getFilters() { - return filters; - } - - public void setFilters(String filters) { - this.filters = filters; - } -} \ No newline at end of file diff --git a/src/main/java/com/sqx/datasource/properties/DynamicDataSourceProperties.java b/src/main/java/com/sqx/datasource/properties/DynamicDataSourceProperties.java deleted file mode 100644 index ebd2a269..00000000 --- a/src/main/java/com/sqx/datasource/properties/DynamicDataSourceProperties.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.sqx.datasource.properties; - -import org.springframework.boot.context.properties.ConfigurationProperties; - -import java.util.LinkedHashMap; -import java.util.Map; - -/** - * 多数据源属性 - */ -@ConfigurationProperties(prefix = "dynamic") -public class DynamicDataSourceProperties { - private Map datasource = new LinkedHashMap<>(); - - public Map getDatasource() { - return datasource; - } - - public void setDatasource(Map datasource) { - this.datasource = datasource; - } -} diff --git a/src/main/java/com/sqx/modules/app/controller/app/AppController.java b/src/main/java/com/sqx/modules/app/controller/app/AppController.java index 56121135..c55a5cb6 100644 --- a/src/main/java/com/sqx/modules/app/controller/app/AppController.java +++ b/src/main/java/com/sqx/modules/app/controller/app/AppController.java @@ -107,8 +107,8 @@ public class AppController { userEntity.setUserId(userId); old.setZhiFuBao(userEntity.getZhiFuBao()); old.setZhiFuBaoName(userEntity.getZhiFuBaoName()); + boolean bool = userService.updateById(userEntity); // 去除首绑支付宝奖励 -// boolean bool = userService.updateById(userEntity); // if (bool && isFirstBind) { // userService.firstBindAwardsMoney(old); // } diff --git a/src/main/java/com/sqx/modules/common/controller/app/AppCommonController.java b/src/main/java/com/sqx/modules/common/controller/app/AppCommonController.java index 55c3a3dd..774f6966 100644 --- a/src/main/java/com/sqx/modules/common/controller/app/AppCommonController.java +++ b/src/main/java/com/sqx/modules/common/controller/app/AppCommonController.java @@ -47,7 +47,7 @@ public class AppCommonController { " 20后台管理平台域名配置\n" + " 22拼多多优惠券地址") @ResponseBody - @Login +// @Login public Result getCommonList(@PathVariable Integer type) { return commonService.findByType(type); } diff --git a/src/main/java/com/sqx/sharding/MasterSlaveRules.java b/src/main/java/com/sqx/sharding/MasterSlaveRules.java new file mode 100644 index 00000000..064773e0 --- /dev/null +++ b/src/main/java/com/sqx/sharding/MasterSlaveRules.java @@ -0,0 +1,22 @@ +package com.sqx.sharding; + +import lombok.Data; + +import java.util.List; + +/** + * 读写分离配置 + */ +@Data +public class MasterSlaveRules { + + /** + * 写库 + */ + private String masterDataSourceName; + + /** + * 读库 + */ + private List slaveDataSourceNames; +} \ No newline at end of file diff --git a/src/main/java/com/sqx/sharding/ShardingDataBase.java b/src/main/java/com/sqx/sharding/ShardingDataBase.java new file mode 100644 index 00000000..ccf6f58c --- /dev/null +++ b/src/main/java/com/sqx/sharding/ShardingDataBase.java @@ -0,0 +1,61 @@ +package com.sqx.sharding; + +import lombok.Data; + +/** + * 用于注入sharding-jdbc的值 + */ +@Data +public class ShardingDataBase { + + /** + * 连接池 + */ + private String type; + + /** + * 驱动名称 + */ + private String driverClassName; + + /** + * 数据库地址 + */ + private String jdbcUrl; + + /** + * 数据库用户名 + */ + private String username; + + /** + * 数据库密码 + */ + private String password; + + /** + * 最小空闲连接,默认值10,小于0或大于maximum-pool-size,都会重置为maximum-pool-size + */ + private int minimumIdle; + + /** + * 最大连接数,小于等于0会被重置为默认值10;大于零小于1会被重置为minimum-idle的值 + */ + private int maximumPoolSize; + + /** + * 空闲连接超时时间,默认值600000(10分钟),大于等于max-lifetime且max-lifetime>0,会被重置为0;不等于0且小于10秒,会被重置为10秒。 + */ + private int idleTimeout; + + /** + * 连接最大存活时间.不等于0且小于30秒,会被重置为默认值30分钟.设置应该比mysql设置的超时时间短 + */ + private int maxLifetime; + + /** + * 连接超时时间:毫秒,小于250毫秒,否则被重置为默认值30秒 + */ + private int connectionTimeout; + +} \ No newline at end of file diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml new file mode 100644 index 00000000..2c965598 --- /dev/null +++ b/src/main/resources/application-local.yml @@ -0,0 +1,61 @@ +# 数据源的一些配置 +driver-class-name: com.mysql.cj.jdbc.Driver +# 最小空闲连接,默认值10,小于0或大于maximum-pool-size,都会重置为maximum-pool-size +minimum-idle: 5 +# 最大连接数,小于等于0会被重置为默认值10;大于零小于1会被重置为minimum-idle的值 +maximum-pool-size: 15 +# 空闲连接超时时间,默认值600000(10分钟),大于等于max-lifetime且max-lifetime>0,会被重置为0;不等于0且小于10秒,会被重置为10秒。 +idle-timeout: 30000 +# 连接最大存活时间.不等于0且小于30秒,会被重置为默认值30分钟.设置应该比mysql设置的超时时间短 +max-lifetime: 30000 +# 连接超时时间:毫秒,小于250毫秒,否则被重置为默认值30秒 +connection-timeout: 30000 + +spring: + # sharding-jdbc 配置 + shardingsphere: + center-tables-data-node: duanju.%s + # 显示sharding-jdbc改写的sql语句 + show-sql: true + # 数据源名称 + datasource: + # 数据源配置begin + master-0: +# slave-0: + driver-class-name: ${driver-class-name} + jdbc-url: jdbc:mysql://rm-gc712o11yndj78x6a6o.mysql.cn-chengdu.rds.aliyuncs.com/duanju?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=CTT + username: video_user + password: VideoUser@1 + minimum-idle: ${minimum-idle} + maximum-pool-size: ${maximum-pool-size} + idle-timeout: ${idle-timeout} + max-lifetime: ${max-lifetime} + connection-timeout: ${connection-timeout} + slave-0: +# master-0: + driver-class-name: ${driver-class-name} + jdbc-url: jdbc:mysql://47.122.26.160:3306/duanju?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=CTT + username: root + password: 0fd6497c308ccfa8 + minimum-idle: ${minimum-idle} + maximum-pool-size: ${maximum-pool-size} + idle-timeout: ${idle-timeout} + max-lifetime: ${max-lifetime} + connection-timeout: ${connection-timeout} + # 数据源配置end + + # 读写分离配置begin + master-slave-rules: + #数据源 + duanju: + master-data-source-name: master-0 + slave-data-source-names: slave-0 +# - master-0 +# - slave-0 + +swagger: + enabled: true +pay: + h5BaseUrl: https://video-h5.hnsiyao.cn/me/detail/detail?allId= + orderNotifyUrl: https://video.hnsiyao.cn/czg/app/wuyou/notify + extractNotifyUrl: https://video.hnsiyao.cn/czg/app/wuyou/extractNotify diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties new file mode 100644 index 00000000..3621d08e --- /dev/null +++ b/src/main/resources/application.properties @@ -0,0 +1 @@ +center-tables=activity,app,banner,cash_out,comment_good,common_info,complet_award,coupon,coupon_user,course,course_classification,course_collect,course_comment,course_details,course_user,disc_spinning,disc_spinning_amount,disc_spinning_record,help_classify,help_word,invite,invite_award,invite_money,message_info,msg,orders,pay_classify,pay_details,qrtz_blob_triggers,qrtz_calendars,qrtz_cron_triggers,qrtz_fired_triggers,qrtz_job_details,qrtz_locks,qrtz_paused_trigger_grps,qrtz_scheduler_state,qrtz_simple_triggers,qrtz_simprop_triggers,qrtz_triggers,schedule_job,schedule_job_log,sdk_info,sdk_type,search,sys_captcha,sys_config,sys_dict,sys_log,sys_menu,sys_oss,sys_role,sys_role_menu,sys_user,sys_user_role,sys_user_token,task_center,task_center_record,task_center_reward,tb_user,uni_ad_callback_record,url_address,user_integral,user_integral_details,user_money,user_money_details,user_prize_exchange,user_sign_record,user_vip,vip_details \ No newline at end of file diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 3c9ca3c1..55267cae 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -20,7 +20,7 @@ spring: allow-bean-definition-overriding: true # 环境 dev|test|prod profiles: - active: dev + active: local # jackson时间格式化 jackson: time-zone: GMT+8 @@ -45,10 +45,14 @@ spring: min-idle: 5 # 连接池中的最小空闲连接 mvc: throw-exception-if-no-handler-found: true - pathmatch: - matching-strategy: ant_path_matcher +# pathmatch: +# matching-strategy: ant_path_matcher +management: + health: + db: + enabled: false #关闭数据库健康检查isV #mybatis mybatis-plus: mapper-locations: classpath*:/mapper/**/*.xml From 8ca14e05a114392be6d54a289e94de4b832be608 Mon Sep 17 00:00:00 2001 From: wangw <1594593906@qq.com> Date: Mon, 30 Dec 2024 15:32:56 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 38 ++--- .../java/com/sqx/common/utils/IPUtils.java | 2 +- .../java/com/sqx/config/ShardingConfig.java | 9 +- .../modules/job/config/ScheduleConfig.java | 57 ------- .../job/controller/ScheduleJobController.java | 58 +++---- .../job/service/ScheduleJobService.java | 28 ++-- .../service/impl/ScheduleJobServiceImpl.java | 89 ++++------- .../com/sqx/modules/job/task/CashOutTask.java | 5 +- .../sqx/modules/job/task/CashOutTask2.java | 6 +- .../java/com/sqx/modules/job/task/ITask.java | 15 -- .../sqx/modules/job/task/SpinningTask3.java | 16 +- .../job/task/SupplyAgainSignRewardTask.java | 5 +- .../sqx/modules/job/task/TempCashOutTask.java | 5 +- .../sqx/modules/job/task/TempOrdersTask.java | 5 +- .../com/sqx/modules/job/task/TestTask.java | 25 --- .../sqx/modules/job/utils/ScheduleJob.java | 72 --------- .../sqx/modules/job/utils/ScheduleUtils.java | 147 ------------------ .../com/sqx/modules/pay/wuyou/Encrypt.java | 4 +- ...ataSourcePoolMetricsAutoConfiguration.java | 2 +- src/main/resources/application-local.yml | 2 +- src/main/resources/application.properties | 2 +- 21 files changed, 127 insertions(+), 465 deletions(-) delete mode 100644 src/main/java/com/sqx/modules/job/config/ScheduleConfig.java delete mode 100644 src/main/java/com/sqx/modules/job/task/ITask.java delete mode 100644 src/main/java/com/sqx/modules/job/task/TestTask.java delete mode 100644 src/main/java/com/sqx/modules/job/utils/ScheduleJob.java delete mode 100644 src/main/java/com/sqx/modules/job/utils/ScheduleUtils.java rename src/main/java/com/sqx/{config => sharding}/ShardingDataSourcePoolMetricsAutoConfiguration.java (99%) diff --git a/pom.xml b/pom.xml index 31ec0b85..5de3422f 100644 --- a/pom.xml +++ b/pom.xml @@ -137,11 +137,11 @@ 5.5.0 - - com.alibaba - druid - 1.1.10 - + + + + + com.auth0 @@ -262,11 +262,11 @@ - - com.baomidou - dynamic-datasource-spring-boot-starter - 4.1.3 - + + + + + mysql @@ -274,11 +274,11 @@ ${mysql.version} - - com.oracle - ojdbc6 - ${oracle.version} - + + + + + org.apache.shardingsphere @@ -303,10 +303,10 @@ ${mssql.version} - - org.postgresql - postgresql - + + + + com.alibaba druid-spring-boot-starter diff --git a/src/main/java/com/sqx/common/utils/IPUtils.java b/src/main/java/com/sqx/common/utils/IPUtils.java index 0fbd6c9f..24248d3f 100644 --- a/src/main/java/com/sqx/common/utils/IPUtils.java +++ b/src/main/java/com/sqx/common/utils/IPUtils.java @@ -1,6 +1,6 @@ package com.sqx.common.utils; -import com.alibaba.druid.util.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/src/main/java/com/sqx/config/ShardingConfig.java b/src/main/java/com/sqx/config/ShardingConfig.java index 12e0e2ed..f8efb899 100644 --- a/src/main/java/com/sqx/config/ShardingConfig.java +++ b/src/main/java/com/sqx/config/ShardingConfig.java @@ -81,13 +81,12 @@ public class ShardingConfig { shardingRuleConfig.setTableRuleConfigs(addTableRuleConfigs()); // 配置是否显示sql -// Properties props = new Properties(); -// props.put("sql.show", true); + Properties props = new Properties(); + props.put("sql.show", showSql); // 配置数据源 Map dataSourceMap = getShardingDataBase(); - return ShardingDataSourceFactory.createDataSource(dataSourceMap, shardingRuleConfig, null); -// return ShardingDataSourceFactory.createDataSource(dataSourceMap, shardingRuleConfig, props); + return ShardingDataSourceFactory.createDataSource(dataSourceMap, shardingRuleConfig, props); } /** @@ -144,8 +143,6 @@ public class ShardingConfig { masterSlaveRules.forEach((databaseName, masterSlaveRules) -> { MasterSlaveRuleConfiguration masterSlaveRuleConfig = new MasterSlaveRuleConfiguration(databaseName, masterSlaveRules.getMasterDataSourceName(), masterSlaveRules.getSlaveDataSourceNames()); - System.out.println("写入"+masterSlaveRules.getMasterDataSourceName()); - System.out.println("读出"+masterSlaveRules.getSlaveDataSourceNames()); sets.add(masterSlaveRuleConfig); }); return sets; diff --git a/src/main/java/com/sqx/modules/job/config/ScheduleConfig.java b/src/main/java/com/sqx/modules/job/config/ScheduleConfig.java deleted file mode 100644 index 8b7653b7..00000000 --- a/src/main/java/com/sqx/modules/job/config/ScheduleConfig.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.sqx.modules.job.config; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.scheduling.quartz.SchedulerFactoryBean; - -import javax.sql.DataSource; -import java.util.Properties; - -/** - * 定时任务配置 - * - */ -@Configuration -public class ScheduleConfig { - - @Bean - public SchedulerFactoryBean schedulerFactoryBean(DataSource dataSource) { - SchedulerFactoryBean factory = new SchedulerFactoryBean(); - factory.setDataSource(dataSource); - - //quartz参数 - Properties prop = new Properties(); - prop.put("org.quartz.scheduler.instanceName", "sqxScheduler"); - prop.put("org.quartz.scheduler.instanceId", "AUTO"); - //线程池配置 - prop.put("org.quartz.threadPool.class", "org.quartz.simpl.SimpleThreadPool"); - prop.put("org.quartz.threadPool.threadCount", "20"); - prop.put("org.quartz.threadPool.threadPriority", "5"); - //JobStore配置 - prop.put("org.quartz.jobStore.class", "org.springframework.scheduling.quartz.LocalDataSourceJobStore"); - //集群配置 - prop.put("org.quartz.jobStore.isClustered", "true"); - prop.put("org.quartz.jobStore.clusterCheckinInterval", "15000"); - prop.put("org.quartz.jobStore.maxMisfiresToHandleAtATime", "1"); - - prop.put("org.quartz.jobStore.misfireThreshold", "12000"); - prop.put("org.quartz.jobStore.tablePrefix", "QRTZ_"); - prop.put("org.quartz.jobStore.selectWithLockSQL", "SELECT * FROM {0}LOCKS UPDLOCK WHERE LOCK_NAME = ?"); - - //PostgreSQL数据库,需要打开此注释 - //prop.put("org.quartz.jobStore.driverDelegateClass", "org.quartz.impl.jdbcjobstore.PostgreSQLDelegate"); - - factory.setQuartzProperties(prop); - - factory.setSchedulerName("sqxScheduler"); - //延时启动 - factory.setStartupDelay(30); - factory.setApplicationContextSchedulerContextKey("applicationContextKey"); - //可选,QuartzScheduler 启动时更新己存在的Job,这样就不用每次修改targetObject后删除qrtz_job_details表对应记录了 - factory.setOverwriteExistingJobs(true); - //设置自动启动,默认为true - factory.setAutoStartup(true); - - return factory; - } -} diff --git a/src/main/java/com/sqx/modules/job/controller/ScheduleJobController.java b/src/main/java/com/sqx/modules/job/controller/ScheduleJobController.java index 3ab91d53..3acdc51e 100644 --- a/src/main/java/com/sqx/modules/job/controller/ScheduleJobController.java +++ b/src/main/java/com/sqx/modules/job/controller/ScheduleJobController.java @@ -81,34 +81,34 @@ public class ScheduleJobController { /** * 立即执行任务 */ - @SysLog("立即执行任务") - @RequestMapping("/run") - public Result run(@RequestBody Long[] jobIds){ - scheduleJobService.run(jobIds); - - return Result.success(); - } - - /** - * 暂停定时任务 - */ - @SysLog("暂停定时任务") - @RequestMapping("/pause") - public Result pause(@RequestBody Long[] jobIds){ - scheduleJobService.pause(jobIds); - - return Result.success(); - } - - /** - * 恢复定时任务 - */ - @SysLog("恢复定时任务") - @RequestMapping("/resume") - public Result resume(@RequestBody Long[] jobIds){ - scheduleJobService.resume(jobIds); - - return Result.success(); - } +// @SysLog("立即执行任务") +// @RequestMapping("/run") +// public Result run(@RequestBody Long[] jobIds){ +// scheduleJobService.run(jobIds); +// +// return Result.success(); +// } +// +// /** +// * 暂停定时任务 +// */ +// @SysLog("暂停定时任务") +// @RequestMapping("/pause") +// public Result pause(@RequestBody Long[] jobIds){ +// scheduleJobService.pause(jobIds); +// +// return Result.success(); +// } +// +// /** +// * 恢复定时任务 +// */ +// @SysLog("恢复定时任务") +// @RequestMapping("/resume") +// public Result resume(@RequestBody Long[] jobIds){ +// scheduleJobService.resume(jobIds); +// +// return Result.success(); +// } } diff --git a/src/main/java/com/sqx/modules/job/service/ScheduleJobService.java b/src/main/java/com/sqx/modules/job/service/ScheduleJobService.java index 407a197d..515663c4 100644 --- a/src/main/java/com/sqx/modules/job/service/ScheduleJobService.java +++ b/src/main/java/com/sqx/modules/job/service/ScheduleJobService.java @@ -34,18 +34,18 @@ public interface ScheduleJobService extends IService { */ int updateBatch(Long[] jobIds, int status); - /** - * 立即执行 - */ - void run(Long[] jobIds); - - /** - * 暂停运行 - */ - void pause(Long[] jobIds); - - /** - * 恢复运行 - */ - void resume(Long[] jobIds); +// /** +// * 立即执行 +// */ +// void run(Long[] jobIds); +// +// /** +// * 暂停运行 +// */ +// void pause(Long[] jobIds); +// +// /** +// * 恢复运行 +// */ +// void resume(Long[] jobIds); } diff --git a/src/main/java/com/sqx/modules/job/service/impl/ScheduleJobServiceImpl.java b/src/main/java/com/sqx/modules/job/service/impl/ScheduleJobServiceImpl.java index 33db3560..84f29fa4 100644 --- a/src/main/java/com/sqx/modules/job/service/impl/ScheduleJobServiceImpl.java +++ b/src/main/java/com/sqx/modules/job/service/impl/ScheduleJobServiceImpl.java @@ -9,38 +9,22 @@ import com.sqx.common.utils.Query; import com.sqx.modules.job.dao.ScheduleJobDao; import com.sqx.modules.job.entity.ScheduleJobEntity; import com.sqx.modules.job.service.ScheduleJobService; -import com.sqx.modules.job.utils.ScheduleUtils; import org.apache.commons.lang.StringUtils; -import org.quartz.CronTrigger; -import org.quartz.Scheduler; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import javax.annotation.PostConstruct; -import java.util.*; +import java.util.Arrays; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; @Service("scheduleJobService") public class ScheduleJobServiceImpl extends ServiceImpl implements ScheduleJobService { - @Autowired - private Scheduler scheduler; /** * 项目启动时,初始化定时器 */ - @PostConstruct - public void init(){ - List scheduleJobList = this.list(); - for(ScheduleJobEntity scheduleJob : scheduleJobList){ - CronTrigger cronTrigger = ScheduleUtils.getCronTrigger(scheduler, scheduleJob.getJobId()); - //如果不存在,则创建 - if(cronTrigger == null) { - ScheduleUtils.createScheduleJob(scheduler, scheduleJob); - }else { - ScheduleUtils.updateScheduleJob(scheduler, scheduleJob); - } - } - } + @Override public PageUtils queryPage(Map params) { @@ -61,25 +45,18 @@ public class ScheduleJobServiceImpl extends ServiceImpl cashOuts = cashOutDao.selectYesterday(); diff --git a/src/main/java/com/sqx/modules/job/task/CashOutTask2.java b/src/main/java/com/sqx/modules/job/task/CashOutTask2.java index 8cc74dae..365e2135 100644 --- a/src/main/java/com/sqx/modules/job/task/CashOutTask2.java +++ b/src/main/java/com/sqx/modules/job/task/CashOutTask2.java @@ -15,6 +15,7 @@ import com.sqx.modules.utils.AliPayOrderUtil; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import javax.annotation.Resource; @@ -23,8 +24,8 @@ import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; -@Component("CashOutTask2") -public class CashOutTask2 implements ITask { +@Component +public class CashOutTask2{ @Resource private CashOutDao cashOutDao; @@ -35,7 +36,6 @@ public class CashOutTask2 implements ITask { private Logger logger = LoggerFactory.getLogger(getClass()); - @Override public void run(String params) { logger.info("提现开始"); if (StringUtils.isBlank(params) || isValidDate(params)) { diff --git a/src/main/java/com/sqx/modules/job/task/ITask.java b/src/main/java/com/sqx/modules/job/task/ITask.java deleted file mode 100644 index 2e98de28..00000000 --- a/src/main/java/com/sqx/modules/job/task/ITask.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.sqx.modules.job.task; - -/** - * 定时任务接口,所有定时任务都要实现该接口 - * - */ -public interface ITask { - - /** - * 执行定时任务接口 - * - * @param params 参数,多参数使用JSON数据 - */ - void run(String params); -} \ No newline at end of file diff --git a/src/main/java/com/sqx/modules/job/task/SpinningTask3.java b/src/main/java/com/sqx/modules/job/task/SpinningTask3.java index 2f083680..fc3d89c8 100644 --- a/src/main/java/com/sqx/modules/job/task/SpinningTask3.java +++ b/src/main/java/com/sqx/modules/job/task/SpinningTask3.java @@ -9,14 +9,17 @@ import com.sqx.modules.discSpinning.service.DiscSpinningService; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.Date; import java.util.List; -@Component("SpinningTask3") -public class SpinningTask3 implements ITask { +@Component +@EnableScheduling +public class SpinningTask3 { @Resource private DiscSpinningService spinningController; @@ -25,8 +28,12 @@ public class SpinningTask3 implements ITask { private Logger logger = LoggerFactory.getLogger(getClass()); - @Override - public void run(String params) { + @Scheduled(cron = "0 0/2 * * * ? ") + public void record() { + record("1"); + } + + public void record(String params) { logger.info("大转盘到账补偿机制"); // 获取当前时间 Date now = DateUtil.date(); @@ -48,6 +55,7 @@ public class SpinningTask3 implements ITask { recordQueryWrapper.lt("create_time", fiveMinutesAgoStr); //小于 recordQueryWrapper.gt("create_time", tenMinutesAgoStr); + logger.info("大转盘到账补偿时间范围:{}-----{}", tenMinutesAgoStr, fiveMinutesAgoStr); List list = recordService.list(recordQueryWrapper); ThreadUtil.execAsync(() -> { for (DiscSpinningRecord record : list) { diff --git a/src/main/java/com/sqx/modules/job/task/SupplyAgainSignRewardTask.java b/src/main/java/com/sqx/modules/job/task/SupplyAgainSignRewardTask.java index 57527923..6c5dd15e 100644 --- a/src/main/java/com/sqx/modules/job/task/SupplyAgainSignRewardTask.java +++ b/src/main/java/com/sqx/modules/job/task/SupplyAgainSignRewardTask.java @@ -21,8 +21,8 @@ import java.util.List; * @author GYJoker */ @Slf4j -@Component("SupplyAgainSignRewardTask") -public class SupplyAgainSignRewardTask implements ITask { +@Component +public class SupplyAgainSignRewardTask{ @Autowired private UserService userService; @@ -35,7 +35,6 @@ public class SupplyAgainSignRewardTask implements ITask { @Autowired private UserMoneyService userMoneyService; - @Override public void run(String params) { if (StringUtils.isBlank(params)) { log.error("参数为空"); diff --git a/src/main/java/com/sqx/modules/job/task/TempCashOutTask.java b/src/main/java/com/sqx/modules/job/task/TempCashOutTask.java index a7a9adc2..8b2ab3ea 100644 --- a/src/main/java/com/sqx/modules/job/task/TempCashOutTask.java +++ b/src/main/java/com/sqx/modules/job/task/TempCashOutTask.java @@ -15,8 +15,8 @@ import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.List; -@Component("TempCashOutTask") -public class TempCashOutTask implements ITask { +@Component +public class TempCashOutTask{ @Resource private CashOutDao cashOutDao; @@ -27,7 +27,6 @@ public class TempCashOutTask implements ITask { private Logger logger = LoggerFactory.getLogger(getClass()); - @Override public void run(String params) { logger.info("提现开始"); List cashOuts = cashOutDao.selectTemp(); diff --git a/src/main/java/com/sqx/modules/job/task/TempOrdersTask.java b/src/main/java/com/sqx/modules/job/task/TempOrdersTask.java index f9d5d4d1..74cb5a16 100644 --- a/src/main/java/com/sqx/modules/job/task/TempOrdersTask.java +++ b/src/main/java/com/sqx/modules/job/task/TempOrdersTask.java @@ -40,8 +40,8 @@ import java.util.List; import java.util.Map; import java.util.concurrent.CompletableFuture; -@Component("TempOrdersTask") -public class TempOrdersTask implements ITask { +@Component +public class TempOrdersTask { @Resource private OrdersDao ordersDao; @@ -69,7 +69,6 @@ public class TempOrdersTask implements ITask { private Logger logger = LoggerFactory.getLogger(getClass()); - @Override public void run(String params) { logger.info("订单表数据处理开始"); List orders = ordersDao.selectList(Wrappers.lambdaQuery() diff --git a/src/main/java/com/sqx/modules/job/task/TestTask.java b/src/main/java/com/sqx/modules/job/task/TestTask.java deleted file mode 100644 index 8f566e10..00000000 --- a/src/main/java/com/sqx/modules/job/task/TestTask.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.sqx.modules.job.task; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Component; - -/** - * 测试定时任务(演示Demo,可删除) - * - * testTask为spring bean的名称 - * - */ -@Component("testTask") -public class TestTask implements ITask { - private Logger logger = LoggerFactory.getLogger(getClass()); - - @Override - public void run(String params){ - - logger.debug("TestTask定时任务正在执行,参数为:{}", params); - } - - - -} diff --git a/src/main/java/com/sqx/modules/job/utils/ScheduleJob.java b/src/main/java/com/sqx/modules/job/utils/ScheduleJob.java deleted file mode 100644 index deb910fb..00000000 --- a/src/main/java/com/sqx/modules/job/utils/ScheduleJob.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.sqx.modules.job.utils; - -import com.sqx.common.utils.SpringContextUtils; -import com.sqx.modules.job.entity.ScheduleJobEntity; -import com.sqx.modules.job.entity.ScheduleJobLogEntity; -import com.sqx.modules.job.service.ScheduleJobLogService; -import org.apache.commons.lang.StringUtils; -import org.quartz.JobExecutionContext; -import org.quartz.JobExecutionException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.scheduling.quartz.QuartzJobBean; - -import java.lang.reflect.Method; -import java.util.Date; - - -/** - * 定时任务 - * - */ -public class ScheduleJob extends QuartzJobBean { - private Logger logger = LoggerFactory.getLogger(getClass()); - - @Override - protected void executeInternal(JobExecutionContext context) throws JobExecutionException { - ScheduleJobEntity scheduleJob = (ScheduleJobEntity) context.getMergedJobDataMap() - .get(ScheduleJobEntity.JOB_PARAM_KEY); - - //获取spring bean - ScheduleJobLogService scheduleJobLogService = (ScheduleJobLogService) SpringContextUtils.getBean("scheduleJobLogService"); - - //数据库保存执行记录 - ScheduleJobLogEntity log = new ScheduleJobLogEntity(); - log.setJobId(scheduleJob.getJobId()); - log.setBeanName(scheduleJob.getBeanName()); - log.setParams(scheduleJob.getParams()); - log.setCreateTime(new Date()); - - //任务开始时间 - long startTime = System.currentTimeMillis(); - - try { - //执行任务 - logger.debug("任务准备执行,任务ID:" + scheduleJob.getJobId()); - - Object target = SpringContextUtils.getBean(scheduleJob.getBeanName()); - Method method = target.getClass().getDeclaredMethod("run", String.class); - method.invoke(target, scheduleJob.getParams()); - - //任务执行总时长 - long times = System.currentTimeMillis() - startTime; - log.setTimes((int)times); - //任务状态 0:成功 1:失败 - log.setStatus(0); - - logger.debug("任务执行完毕,任务ID:" + scheduleJob.getJobId() + " 总共耗时:" + times + "毫秒"); - } catch (Exception e) { - logger.error("任务执行失败,任务ID:" + scheduleJob.getJobId(), e); - - //任务执行总时长 - long times = System.currentTimeMillis() - startTime; - log.setTimes((int)times); - - //任务状态 0:成功 1:失败 - log.setStatus(1); - log.setError(StringUtils.substring(e.toString(), 0, 2000)); - }finally { - scheduleJobLogService.save(log); - } - } -} diff --git a/src/main/java/com/sqx/modules/job/utils/ScheduleUtils.java b/src/main/java/com/sqx/modules/job/utils/ScheduleUtils.java deleted file mode 100644 index f2895570..00000000 --- a/src/main/java/com/sqx/modules/job/utils/ScheduleUtils.java +++ /dev/null @@ -1,147 +0,0 @@ -package com.sqx.modules.job.utils; - -import com.sqx.common.exception.SqxException; -import com.sqx.common.utils.Constant; -import com.sqx.modules.job.entity.ScheduleJobEntity; -import org.quartz.*; - -/** - * 定时任务工具类 - * - */ -public class ScheduleUtils { - private final static String JOB_NAME = "TASK_"; - - /** - * 获取触发器key - */ - public static TriggerKey getTriggerKey(Long jobId) { - return TriggerKey.triggerKey(JOB_NAME + jobId); - } - - /** - * 获取jobKey - */ - public static JobKey getJobKey(Long jobId) { - return JobKey.jobKey(JOB_NAME + jobId); - } - - /** - * 获取表达式触发器 - */ - public static CronTrigger getCronTrigger(Scheduler scheduler, Long jobId) { - try { - return (CronTrigger) scheduler.getTrigger(getTriggerKey(jobId)); - } catch (SchedulerException e) { - throw new SqxException("获取定时任务CronTrigger出现异常", e); - } - } - - /** - * 创建定时任务 - */ - public static void createScheduleJob(Scheduler scheduler, ScheduleJobEntity scheduleJob) { - try { - //构建job信息 - JobDetail jobDetail = JobBuilder.newJob(ScheduleJob.class).withIdentity(getJobKey(scheduleJob.getJobId())).build(); - - //表达式调度构建器 - CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(scheduleJob.getCronExpression()) - .withMisfireHandlingInstructionDoNothing(); - - //按新的cronExpression表达式构建一个新的trigger - CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(getTriggerKey(scheduleJob.getJobId())).withSchedule(scheduleBuilder).build(); - - //放入参数,运行时的方法可以获取 - jobDetail.getJobDataMap().put(ScheduleJobEntity.JOB_PARAM_KEY, scheduleJob); - - scheduler.scheduleJob(jobDetail, trigger); - - //暂停任务 - if(scheduleJob.getStatus() == Constant.ScheduleStatus.PAUSE.getValue()){ - pauseJob(scheduler, scheduleJob.getJobId()); - } - } catch (SchedulerException e) { - throw new SqxException("创建定时任务失败", e); - } - } - - /** - * 更新定时任务 - */ - public static void updateScheduleJob(Scheduler scheduler, ScheduleJobEntity scheduleJob) { - try { - TriggerKey triggerKey = getTriggerKey(scheduleJob.getJobId()); - - //表达式调度构建器 - CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(scheduleJob.getCronExpression()) - .withMisfireHandlingInstructionDoNothing(); - - CronTrigger trigger = getCronTrigger(scheduler, scheduleJob.getJobId()); - - //按新的cronExpression表达式重新构建trigger - trigger = trigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(scheduleBuilder).build(); - - //参数 - trigger.getJobDataMap().put(ScheduleJobEntity.JOB_PARAM_KEY, scheduleJob); - - scheduler.rescheduleJob(triggerKey, trigger); - - //暂停任务 - if(scheduleJob.getStatus() == Constant.ScheduleStatus.PAUSE.getValue()){ - pauseJob(scheduler, scheduleJob.getJobId()); - } - - } catch (SchedulerException e) { - throw new SqxException("更新定时任务失败", e); - } - } - - /** - * 立即执行任务 - */ - public static void run(Scheduler scheduler, ScheduleJobEntity scheduleJob) { - try { - //参数 - JobDataMap dataMap = new JobDataMap(); - dataMap.put(ScheduleJobEntity.JOB_PARAM_KEY, scheduleJob); - - scheduler.triggerJob(getJobKey(scheduleJob.getJobId()), dataMap); - } catch (SchedulerException e) { - throw new SqxException("立即执行定时任务失败", e); - } - } - - /** - * 暂停任务 - */ - public static void pauseJob(Scheduler scheduler, Long jobId) { - try { - scheduler.pauseJob(getJobKey(jobId)); - } catch (SchedulerException e) { - throw new SqxException("暂停定时任务失败", e); - } - } - - /** - * 恢复任务 - */ - public static void resumeJob(Scheduler scheduler, Long jobId) { - try { - scheduler.resumeJob(getJobKey(jobId)); - } catch (SchedulerException e) { - throw new SqxException("暂停定时任务失败", e); - } - } - - /** - * 删除定时任务 - */ - public static void deleteScheduleJob(Scheduler scheduler, Long jobId) { - try { - scheduler.deleteJob(getJobKey(jobId)); - } catch (SchedulerException e) { - throw new SqxException("删除定时任务失败", e); - } - } -} diff --git a/src/main/java/com/sqx/modules/pay/wuyou/Encrypt.java b/src/main/java/com/sqx/modules/pay/wuyou/Encrypt.java index 79d99fde..91938961 100644 --- a/src/main/java/com/sqx/modules/pay/wuyou/Encrypt.java +++ b/src/main/java/com/sqx/modules/pay/wuyou/Encrypt.java @@ -1,6 +1,6 @@ package com.sqx.modules.pay.wuyou; -import com.alibaba.druid.util.Utils; +import com.sqx.modules.utils.MD5Util; import java.util.HashMap; import java.util.Map; @@ -23,7 +23,7 @@ public class Encrypt { sb.append("key=").append(APP_SECRET); String signStr = sb.toString(); System.out.println("signStr: " + signStr); - return Utils.md5(signStr).toUpperCase(); + return MD5Util.encodeByMD5(signStr).toUpperCase(); } public static void main(String[] args) { diff --git a/src/main/java/com/sqx/config/ShardingDataSourcePoolMetricsAutoConfiguration.java b/src/main/java/com/sqx/sharding/ShardingDataSourcePoolMetricsAutoConfiguration.java similarity index 99% rename from src/main/java/com/sqx/config/ShardingDataSourcePoolMetricsAutoConfiguration.java rename to src/main/java/com/sqx/sharding/ShardingDataSourcePoolMetricsAutoConfiguration.java index c3454b5a..3c7252ac 100644 --- a/src/main/java/com/sqx/config/ShardingDataSourcePoolMetricsAutoConfiguration.java +++ b/src/main/java/com/sqx/sharding/ShardingDataSourcePoolMetricsAutoConfiguration.java @@ -1,4 +1,4 @@ -package com.sqx.config; +package com.sqx.sharding; import com.zaxxer.hikari.HikariDataSource; import com.zaxxer.hikari.metrics.micrometer.MicrometerMetricsTrackerFactory; diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml index 2c965598..e7978925 100644 --- a/src/main/resources/application-local.yml +++ b/src/main/resources/application-local.yml @@ -16,7 +16,7 @@ spring: shardingsphere: center-tables-data-node: duanju.%s # 显示sharding-jdbc改写的sql语句 - show-sql: true + show-sql: false # 数据源名称 datasource: # 数据源配置begin diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 3621d08e..80305245 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1 +1 @@ -center-tables=activity,app,banner,cash_out,comment_good,common_info,complet_award,coupon,coupon_user,course,course_classification,course_collect,course_comment,course_details,course_user,disc_spinning,disc_spinning_amount,disc_spinning_record,help_classify,help_word,invite,invite_award,invite_money,message_info,msg,orders,pay_classify,pay_details,qrtz_blob_triggers,qrtz_calendars,qrtz_cron_triggers,qrtz_fired_triggers,qrtz_job_details,qrtz_locks,qrtz_paused_trigger_grps,qrtz_scheduler_state,qrtz_simple_triggers,qrtz_simprop_triggers,qrtz_triggers,schedule_job,schedule_job_log,sdk_info,sdk_type,search,sys_captcha,sys_config,sys_dict,sys_log,sys_menu,sys_oss,sys_role,sys_role_menu,sys_user,sys_user_role,sys_user_token,task_center,task_center_record,task_center_reward,tb_user,uni_ad_callback_record,url_address,user_integral,user_integral_details,user_money,user_money_details,user_prize_exchange,user_sign_record,user_vip,vip_details \ No newline at end of file +center-tables=activity,app,banner,cash_out,comment_good,common_info,complet_award,coupon,coupon_user,course,course_classification,course_collect,course_comment,course_details,course_user,disc_spinning,disc_spinning_amount,disc_spinning_record,help_classify,help_word,invite,invite_award,invite_money,message_info,msg,orders,pay_classify,pay_details,qrtz_blob_triggers,qrtz_calendars,qrtz_cron_triggers,qrtz_fired_triggers,qrtz_job_details,qrtz_locks,qrtz_paused_trigger_grps,qrtz_scheduler_state,qrtz_simple_triggers,qrtz_simprop_triggers,qrtz_triggers,schedule_job,schedule_job_log,sdk_info,sdk_type,search,sys_captcha,sys_config,sys_dict,sys_log,sys_menu,sys_oss,sys_role,sys_role_menu,sys_user,sys_user_role,sys_user_token,task_center,task_center_record,task_center_reward,tb_user,uni_ad_callback_record,url_address,user_integral,user_integral_details,user_money,user_money_details,user_prize_exchange,user_sign_record,user_vip,vip_details,invite_achievement \ No newline at end of file From 41eabc21b55cd86155008f087f0b62426d997af6 Mon Sep 17 00:00:00 2001 From: wangw <1594593906@qq.com> Date: Mon, 30 Dec 2024 16:17:12 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E8=B5=84=E6=BA=90=E9=A1=B5=E6=8A=A5?= =?UTF-8?q?=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sqx/modules/sys/oauth2/OAuth2Filter.java | 24 ++++++------------- .../resources/mapper/course/CourseDao.xml | 11 +-------- 2 files changed, 8 insertions(+), 27 deletions(-) diff --git a/src/main/java/com/sqx/modules/sys/oauth2/OAuth2Filter.java b/src/main/java/com/sqx/modules/sys/oauth2/OAuth2Filter.java index c13b6713..1a546607 100644 --- a/src/main/java/com/sqx/modules/sys/oauth2/OAuth2Filter.java +++ b/src/main/java/com/sqx/modules/sys/oauth2/OAuth2Filter.java @@ -21,7 +21,6 @@ import java.io.IOException; /** * oauth2过滤器 - * */ public class OAuth2Filter extends AuthenticatingFilter { @@ -32,7 +31,7 @@ public class OAuth2Filter extends AuthenticatingFilter { //获取请求token String token = getRequestToken((HttpServletRequest) request); - if(StringUtils.isBlank(token)){ + if (StringUtils.isBlank(token)) { return null; } @@ -41,7 +40,7 @@ public class OAuth2Filter extends AuthenticatingFilter { @Override protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) { - if(((HttpServletRequest) request).getMethod().equals(RequestMethod.OPTIONS.name())){ + if (((HttpServletRequest) request).getMethod().equals(RequestMethod.OPTIONS.name())) { return true; } @@ -52,7 +51,7 @@ public class OAuth2Filter extends AuthenticatingFilter { protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception { //获取请求token,如果token不存在,直接返回401 String token = getRequestToken((HttpServletRequest) request); - if(StringUtils.isBlank(token)){ + if (StringUtils.isBlank(token)) { HttpServletResponse httpResponse = (HttpServletResponse) response; httpResponse.setHeader("Access-Control-Allow-Credentials", "true"); httpResponse.setHeader("Access-Control-Allow-Origin", HttpContextUtils.getOrigin()); @@ -63,17 +62,8 @@ public class OAuth2Filter extends AuthenticatingFilter { return false; } - try{ - return executeLogin(request, response); - }catch (AbstractMethodError e){ - if (e.getMessage().contains("sessionCreated")) { - logger.error(e.getMessage()); - return false; - }else { - logger.error(e.getMessage()); - return false; - } - } + return executeLogin(request, response); + } @Override @@ -99,12 +89,12 @@ public class OAuth2Filter extends AuthenticatingFilter { /** * 获取请求的token */ - private String getRequestToken(HttpServletRequest httpRequest){ + private String getRequestToken(HttpServletRequest httpRequest) { //从header中获取token String token = httpRequest.getHeader("token"); //如果header中不存在token,则从参数中获取token - if(StringUtils.isBlank(token)){ + if (StringUtils.isBlank(token)) { token = httpRequest.getParameter("token"); } diff --git a/src/main/resources/mapper/course/CourseDao.xml b/src/main/resources/mapper/course/CourseDao.xml index a8118457..d85de90f 100644 --- a/src/main/resources/mapper/course/CourseDao.xml +++ b/src/main/resources/mapper/course/CourseDao.xml @@ -185,9 +185,6 @@ (select sum(o.pay_money) from orders o where o.course_id=c.course_id and o.status=1) as payMoney, (select sum(good_num) from course_details d where d.course_id=c.course_id ) as goodNum, (select count(*) from course_details d where d.course_id=c.course_id ) as courseDetailsCount, - (select count(*) from course_collect d where d.course_id=c.course_id - and date_format(create_time,'%Y-%m-%d')>=date_format(#{startTime},'%Y-%m-%d') and - date_format(create_time,'%Y-%m-%d')<=date_format(#{endTime},'%Y-%m-%d') ) as weekGoodNum, (select count(*) from course_details cd where c.course_id=cd.course_id and cd.good=1 ) as isRecommend FROM course AS c @@ -217,7 +214,7 @@ and c.banner_id = #{bannerId} - + and c.is_recommend=1 @@ -244,12 +241,6 @@ order by c.sort asc,c.create_time desc - - order by goodNum desc - - - order by weekGoodNum desc -