diff --git a/.github/workflows/MavenDeploy.yml b/.github/workflows/MavenDeploy.yml index 6128c542..a8a32200 100644 --- a/.github/workflows/MavenDeploy.yml +++ b/.github/workflows/MavenDeploy.yml @@ -11,6 +11,8 @@ on: env: APPLICATION_NAME: "starfish" + GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}" + # APPLICATION_VERSION: "1.0.0" # APPLICATION_ENV: "dev" @@ -33,18 +35,14 @@ jobs: cache: maven - name: Package - env: - GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}" run: mvn --batch-mode --update-snapshots package -Dmaven.test.skip=true # - name: Install -# env: -# GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}" # run: mvn --batch-mode --update-snapshots install -Dmaven.test.skip=true - name: Deploy - env: - GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}" +# env: +# GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}" run: mvn --batch-mode --update-snapshots deploy -Dmaven.test.skip=true # - name: Build With Maven diff --git a/.gitignore b/.gitignore index 193dd62a..473bb5f8 100644 --- a/.gitignore +++ b/.gitignore @@ -12,4 +12,6 @@ .tmp *.tar.gz /target/* -hs_err_pid* \ No newline at end of file +hs_err_pid* +/target/ +target \ No newline at end of file diff --git a/pom.xml b/pom.xml index 046fd0dd..850f7059 100644 --- a/pom.xml +++ b/pom.xml @@ -5,11 +5,11 @@ org.springframework.boot spring-boot-starter-parent - 3.4.4 + 4.0.0 com.github.sunkolin starfish - 1.0.0 + 2.0.2-SNAPSHOT jar starfish starfish @@ -33,12 +33,23 @@ - UTF-8 17 - 2023.0.1 + UTF-8 + + aliyun + aliyun + default + https://maven.aliyun.com/repository/central + + false + + + true + + central https://repo1.maven.org/maven2 @@ -49,15 +60,6 @@ true - - - aliyun - aliyun - default - https://maven.aliyun.com/repository/public - - false - true @@ -75,18 +77,12 @@ - - org.springframework.cloud - spring-cloud-dependencies - ${spring.cloud.version} - pom - import - + - + org.springframework.boot spring-boot @@ -111,19 +107,14 @@ org.springframework.boot spring-boot-starter-cache - - org.springframework.boot - spring-boot-starter-aop - + + + + org.springframework.boot spring-boot-starter-mail - - org.springframework.boot - spring-boot-starter-test - test - org.springframework.boot spring-boot-starter-data-redis @@ -134,15 +125,10 @@ org.springframework.boot - spring-boot-starter-quartz - - - c3p0 - c3p0 - - + spring-boot-starter-test + test - + org.springframework.boot spring-boot-configuration-processor @@ -187,12 +173,12 @@ cn.hutool hutool-all - 5.8.30 + 5.8.41 com.xuxueli xxl-job-core - 2.4.2 + 3.2.0 org.mybatis.spring.boot @@ -213,6 +199,17 @@ bcprov-jdk18on 1.78.1 + + + cn.idev.excel + fastexcel + 1.3.0 + + + + + + diff --git a/src/main/java/com/starfish/common/cache/CacheAutoConfiguration.java b/src/main/java/com/starfish/common/cache/CacheAutoConfiguration.java index 2a2c9de5..3189ac0b 100644 --- a/src/main/java/com/starfish/common/cache/CacheAutoConfiguration.java +++ b/src/main/java/com/starfish/common/cache/CacheAutoConfiguration.java @@ -12,6 +12,7 @@ import org.springframework.context.annotation.Configuration; import jakarta.annotation.Resource; + import java.util.concurrent.TimeUnit; /** @@ -64,9 +65,9 @@ public CacheManager cacheManager(Caffeine caffeine) { return cacheManager; } - @Bean(name = "cachePlus") - public CachePlus newCaffeineCachePlus(Cache caffeineCache) { - return new CachePlus(caffeineCache); + @Bean(name = "cache") + public CacheImpl newCaffeineCache(Cache caffeineCache) { + return new CacheImpl(caffeineCache); } } \ No newline at end of file diff --git a/src/main/java/com/starfish/common/cache/CacheCondition.java b/src/main/java/com/starfish/common/cache/CacheCondition.java index 61956fb8..f39fdc02 100644 --- a/src/main/java/com/starfish/common/cache/CacheCondition.java +++ b/src/main/java/com/starfish/common/cache/CacheCondition.java @@ -18,11 +18,11 @@ public class CacheCondition extends SpringBootCondition { @Override public ConditionOutcome getMatchOutcome(ConditionContext context, AnnotatedTypeMetadata metadata) { Environment environment = context.getEnvironment(); - Boolean cacheEnabled = environment.getProperty("application.cache.enabled", Boolean.class); + Boolean cacheEnabled = environment.getProperty("starfish.cache.enabled", Boolean.class); if (cacheEnabled != null && cacheEnabled) { - return ConditionOutcome.match("application.cache.enabled=true"); + return ConditionOutcome.match("starfish.cache.enabled=true"); } else { - return ConditionOutcome.noMatch("application.cache.enabled=false"); + return ConditionOutcome.noMatch("starfish.cache.enabled=false"); } } diff --git a/src/main/java/com/starfish/common/cache/CachePlus.java b/src/main/java/com/starfish/common/cache/CacheImpl.java similarity index 87% rename from src/main/java/com/starfish/common/cache/CachePlus.java rename to src/main/java/com/starfish/common/cache/CacheImpl.java index c703a5ef..0607ec93 100644 --- a/src/main/java/com/starfish/common/cache/CachePlus.java +++ b/src/main/java/com/starfish/common/cache/CacheImpl.java @@ -1,13 +1,13 @@ package com.starfish.common.cache; /** - * CachePlus,使用caffeine做本地缓存 + * Cache,使用caffeine做本地缓存 * * @author sunkolin * @version 1.0.0 * @since 2021-06-11 */ -public class CachePlus implements Cache { +public class CacheImpl implements Cache { /** * exist后缀 @@ -16,7 +16,7 @@ public class CachePlus implements Cache { private final com.github.benmanes.caffeine.cache.Cache caffeineCache; - public CachePlus(com.github.benmanes.caffeine.cache.Cache caffeineCache) { + public CacheImpl(com.github.benmanes.caffeine.cache.Cache caffeineCache) { this.caffeineCache = caffeineCache; } diff --git a/src/main/java/com/starfish/common/cache/EhcacheUtil.java b/src/main/java/com/starfish/common/cache/EhcacheUtil.java deleted file mode 100644 index 4ffa285a..00000000 --- a/src/main/java/com/starfish/common/cache/EhcacheUtil.java +++ /dev/null @@ -1,111 +0,0 @@ -//package com.starfish.common.cache; -// -//import org.ehcache.Cache; -//import org.ehcache.CacheManager; -//import org.ehcache.config.CacheConfiguration; -//import org.ehcache.config.builders.CacheConfigurationBuilder; -//import org.ehcache.config.builders.CacheManagerBuilder; -//import org.ehcache.config.builders.ResourcePoolsBuilder; -// -///** -// * EhcachePlus -// * -// * @author sunkolin -// * @version 1.0.0 -// * @since 2018-06-06 -// */ -//@SuppressWarnings("unused") -//@Deprecated -//public class EhcacheUtil { -// -// private static final CacheManager CACHE_MANAGER = CacheManagerBuilder.newCacheManagerBuilder() -// .withCache("customCache", CacheConfigurationBuilder.newCacheConfigurationBuilder(String.class, String.class, -// ResourcePoolsBuilder.heap(100)).build()).build(true); -// -// private static final Object LOCKER = new Object(); -// -// /** -// * 获取缓存 -// * -// * @param cacheName 缓存名称 -// * @param keyType key类型 -// * @param valueType value类型 -// * @param K -// * @param V -// */ -// private static Cache getCache(String cacheName, Class keyType, Class valueType) { -// Cache cache = CACHE_MANAGER.getCache(cacheName, keyType, valueType); -// if (cache == null) { -// synchronized (LOCKER) { -// cache = CACHE_MANAGER.getCache(cacheName, keyType, valueType); -// if (cache == null) { -// CacheConfiguration cacheConfiguration = CacheConfigurationBuilder.newCacheConfigurationBuilder(keyType, valueType, -// ResourcePoolsBuilder.heap(100)).build(); -// CACHE_MANAGER.createCache(cacheName, cacheConfiguration); -// cache = CACHE_MANAGER.getCache(cacheName, keyType, valueType); -// } -// } -// } -// return cache; -// } -// -// /** -// * 向缓存中存入指定的值 -// * -// * @param cacheName 缓存名称 -// * @param keyType key类型 -// * @param valueType value类型 -// * @param key 键 -// * @param value 值 -// * @param K -// * @param V -// */ -// public static void put(String cacheName, Class keyType, Class valueType, K key, V value) { -// getCache(cacheName, keyType, valueType).put(key, value); -// } -// -// /** -// * 删除缓存下指定key的数据 -// * -// * @param cacheName 缓存名称 -// * @param keyType key类型 -// * @param valueType value类型 -// * @param key 键 -// * @param K -// * @param V -// */ -// public static void remove(String cacheName, Class keyType, Class valueType, K key) { -// getCache(cacheName, keyType, valueType).remove(key); -// } -// -// /** -// * 删除cache下全部缓存 -// * -// * @param cacheName 缓存名称 -// * @param keyType key类型 -// * @param valueType value类型 -// * @param K -// * @param V -// */ -// public static void clear(String cacheName, Class keyType, Class valueType) { -// getCache(cacheName, keyType, valueType).clear(); -// } -// -// /** -// * 获取缓存下指定键的数据 -// * -// * @param cacheName 缓存名称 -// * @param keyType key类型 -// * @param valueType value类型 -// * @param key 键 -// * @param K -// * @param V -// * @return 值 -// */ -// public static V get(String cacheName, Class keyType, Class valueType, K key) { -// return getCache(cacheName, keyType, valueType).get(key); -// } -// -//} -// -// diff --git a/src/main/java/com/starfish/common/elastic/ElasticSearchPlus.java b/src/main/java/com/starfish/common/elastic/ElasticSearch.java similarity index 63% rename from src/main/java/com/starfish/common/elastic/ElasticSearchPlus.java rename to src/main/java/com/starfish/common/elastic/ElasticSearch.java index 2df545c1..7e174bc8 100644 --- a/src/main/java/com/starfish/common/elastic/ElasticSearchPlus.java +++ b/src/main/java/com/starfish/common/elastic/ElasticSearch.java @@ -1,18 +1,18 @@ package com.starfish.common.elastic; /** - * ElasticSearchPlus + * ElasticSearch * * @author sunkolin * @version 1.0.0 * @since 2022-08-02 */ -public class ElasticSearchPlus { +public class ElasticSearch { /** * constructor */ - private ElasticSearchPlus() { + private ElasticSearch() { } } diff --git a/src/main/java/com/starfish/common/executor/ExecutorAutoConfiguration.java b/src/main/java/com/starfish/common/executor/ExecutorAutoConfiguration.java index c0e35ca4..b84f0f43 100644 --- a/src/main/java/com/starfish/common/executor/ExecutorAutoConfiguration.java +++ b/src/main/java/com/starfish/common/executor/ExecutorAutoConfiguration.java @@ -30,7 +30,7 @@ @Slf4j @Configuration @AutoConfigureAfter(TaskExecutionAutoConfiguration.class) -@ConditionalOnProperty(prefix = "application.executor", name = "enabled", havingValue = "true") +@ConditionalOnProperty(prefix = "starfish.executor", name = "enabled", havingValue = "true") @EnableConfigurationProperties({ExecutorProperties.class}) public class ExecutorAutoConfiguration { diff --git a/src/main/java/com/starfish/common/executor/ExecutorProperties.java b/src/main/java/com/starfish/common/executor/ExecutorProperties.java index 382afb91..eb5863f6 100644 --- a/src/main/java/com/starfish/common/executor/ExecutorProperties.java +++ b/src/main/java/com/starfish/common/executor/ExecutorProperties.java @@ -13,7 +13,7 @@ */ @Deprecated @Data -@ConfigurationProperties(prefix = "application.executor") +@ConfigurationProperties(prefix = "starfish.executor") public class ExecutorProperties { /** diff --git a/src/main/java/com/starfish/common/kafka/KafkaPlus.java b/src/main/java/com/starfish/common/kafka/Kafka.java similarity index 70% rename from src/main/java/com/starfish/common/kafka/KafkaPlus.java rename to src/main/java/com/starfish/common/kafka/Kafka.java index 17993f94..eff70769 100644 --- a/src/main/java/com/starfish/common/kafka/KafkaPlus.java +++ b/src/main/java/com/starfish/common/kafka/Kafka.java @@ -1,18 +1,18 @@ package com.starfish.common.kafka; /** - * KafkaPlus + * Kafka * * @author sunkolin * @version 1.0.0 * @since 2022-08-02 */ -public class KafkaPlus { +public class Kafka { /** * constructor */ - private KafkaPlus() { + private Kafka() { } } diff --git a/src/main/java/com/starfish/common/nacos/NacosPlus.java b/src/main/java/com/starfish/common/nacos/Nacos.java similarity index 70% rename from src/main/java/com/starfish/common/nacos/NacosPlus.java rename to src/main/java/com/starfish/common/nacos/Nacos.java index cc6d14f4..2b39d680 100644 --- a/src/main/java/com/starfish/common/nacos/NacosPlus.java +++ b/src/main/java/com/starfish/common/nacos/Nacos.java @@ -1,18 +1,18 @@ package com.starfish.common.nacos; /** - * NacosPlus + * Nacos * * @author sunkolin * @version 1.0.0 * @since 2022-08-02 */ -public class NacosPlus { +public class Nacos { /** * constructor */ - private NacosPlus() { + private Nacos() { } } diff --git a/src/main/java/com/starfish/common/rocket/RocketPlus.java b/src/main/java/com/starfish/common/rocket/Rocket.java similarity index 69% rename from src/main/java/com/starfish/common/rocket/RocketPlus.java rename to src/main/java/com/starfish/common/rocket/Rocket.java index 3678b44f..cdd5e27c 100644 --- a/src/main/java/com/starfish/common/rocket/RocketPlus.java +++ b/src/main/java/com/starfish/common/rocket/Rocket.java @@ -1,18 +1,18 @@ package com.starfish.common.rocket; /** - * RocketPlus + * Rocket * * @author sunkolin * @version 1.0.0 * @since 2022-08-02 */ -public class RocketPlus { +public class Rocket { /** * constructor */ - private RocketPlus() { + private Rocket() { } } diff --git a/src/main/java/com/starfish/common/swagger/Swagger3AutoConfiguration.java b/src/main/java/com/starfish/common/swagger/Swagger3AutoConfiguration.java index 37115b09..7acc4cfb 100644 --- a/src/main/java/com/starfish/common/swagger/Swagger3AutoConfiguration.java +++ b/src/main/java/com/starfish/common/swagger/Swagger3AutoConfiguration.java @@ -6,6 +6,7 @@ import io.swagger.v3.oas.models.info.License; import org.springdoc.core.models.GroupedOpenApi; import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Profile; @@ -19,6 +20,7 @@ */ @Profile({"dev", "test"}) @AutoConfiguration +@ConditionalOnProperty(value = {"starfish.swagger.enabled"}, havingValue = "true") public class Swagger3AutoConfiguration { @Bean @@ -47,19 +49,12 @@ public OpenAPI openApi() { @Bean public GroupedOpenApi publicApi() { - return GroupedOpenApi.builder() - .group("public") - .pathsToMatch("/**") - .pathsToExclude("/admin/**") - .build(); + return GroupedOpenApi.builder().group("public").pathsToMatch("/**").pathsToExclude("/admin/**").build(); } @Bean public GroupedOpenApi adminApi() { - return GroupedOpenApi.builder() - .group("admin") - .pathsToMatch("/admin/**") - .build(); + return GroupedOpenApi.builder().group("admin").pathsToMatch("/admin/**").build(); } } diff --git a/src/main/java/com/starfish/common/task/XxlJobAutoConfiguration.java b/src/main/java/com/starfish/common/task/XxlJobAutoConfiguration.java index 5e134931..1c38ef26 100644 --- a/src/main/java/com/starfish/common/task/XxlJobAutoConfiguration.java +++ b/src/main/java/com/starfish/common/task/XxlJobAutoConfiguration.java @@ -17,7 +17,7 @@ */ @Slf4j @AutoConfiguration -@ConditionalOnProperty(prefix = "xxl.job", name = "enabled", havingValue = "true") +@ConditionalOnProperty(value = {"starfish.xxl.job.enabled"}, havingValue = "true", matchIfMissing = true) @EnableConfigurationProperties({XxlJobProperties.class}) public class XxlJobAutoConfiguration { diff --git a/src/main/java/com/starfish/common/task/XxlJobProperties.java b/src/main/java/com/starfish/common/task/XxlJobProperties.java index 3ea0cd18..023f2453 100644 --- a/src/main/java/com/starfish/common/task/XxlJobProperties.java +++ b/src/main/java/com/starfish/common/task/XxlJobProperties.java @@ -11,7 +11,7 @@ * @since 2021-07-02 */ @Data -@ConfigurationProperties(prefix = "xxl.job") +@ConfigurationProperties(prefix = "starfish.xxl.job") public class XxlJobProperties { /** diff --git a/src/main/java/com/starfish/common/trace/TraceAutoConfiguration.java b/src/main/java/com/starfish/common/trace/TraceAutoConfiguration.java index 0d8591cd..9973b787 100644 --- a/src/main/java/com/starfish/common/trace/TraceAutoConfiguration.java +++ b/src/main/java/com/starfish/common/trace/TraceAutoConfiguration.java @@ -13,7 +13,7 @@ * @since 2022-07-03 */ @AutoConfiguration -@ConditionalOnProperty(value = {"application.trace.enabled"}, matchIfMissing = true) +@ConditionalOnProperty(value = {"starfish.trace.enabled"}, havingValue = "true", matchIfMissing = true) @EnableConfigurationProperties({TraceProperties.class}) public class TraceAutoConfiguration { diff --git a/src/main/java/com/starfish/common/trace/TraceProperties.java b/src/main/java/com/starfish/common/trace/TraceProperties.java index e7e71336..3d56d3df 100644 --- a/src/main/java/com/starfish/common/trace/TraceProperties.java +++ b/src/main/java/com/starfish/common/trace/TraceProperties.java @@ -11,7 +11,7 @@ * @since 2022-06-08 */ @Data -@ConfigurationProperties(prefix = "application.trace") +@ConfigurationProperties(prefix = "starfish.trace") public class TraceProperties { /** diff --git a/src/main/java/com/starfish/core/CustomEnvironmentPostProcessor.java b/src/main/java/com/starfish/core/CustomEnvironmentPostProcessor.java index 890fde62..3cefe262 100644 --- a/src/main/java/com/starfish/core/CustomEnvironmentPostProcessor.java +++ b/src/main/java/com/starfish/core/CustomEnvironmentPostProcessor.java @@ -1,8 +1,8 @@ package com.starfish.core; import lombok.SneakyThrows; +import org.springframework.boot.EnvironmentPostProcessor; import org.springframework.boot.SpringApplication; -import org.springframework.boot.env.EnvironmentPostProcessor; import org.springframework.boot.env.PropertiesPropertySourceLoader; import org.springframework.boot.env.YamlPropertySourceLoader; import org.springframework.core.Ordered; diff --git a/src/main/java/com/starfish/core/SpringPlus.java b/src/main/java/com/starfish/core/Springs.java similarity index 96% rename from src/main/java/com/starfish/core/SpringPlus.java rename to src/main/java/com/starfish/core/Springs.java index f06a1ac2..cee26fe9 100644 --- a/src/main/java/com/starfish/core/SpringPlus.java +++ b/src/main/java/com/starfish/core/Springs.java @@ -1,5 +1,6 @@ package com.starfish.core; +import com.starfish.core.constant.SpringConstant; import lombok.Data; import org.springframework.beans.BeansException; import org.springframework.boot.system.ApplicationHome; @@ -17,9 +18,9 @@ import java.util.Map; /** - * SpringPlus + * Springs * 使用时无需注入ApplicationContext对象 - * 可以直接调用静态方法SpringPlus.getApplicationContext();这样可以实现在工具类中使用 + * 可以直接调用静态方法Springs.getApplicationContext();这样可以实现在工具类中使用 * 参考:cn.hutool.extra.spring.SpringUtil * * @author sunkolin @@ -28,7 +29,7 @@ */ @Data @Lazy(false) -public class SpringPlus implements ApplicationContextAware, EnvironmentAware { +public class Springs implements ApplicationContextAware, EnvironmentAware { private ApplicationPid applicationPid = new ApplicationPid(); diff --git a/src/main/java/com/starfish/core/SpringsAutoConfiguration.java b/src/main/java/com/starfish/core/SpringsAutoConfiguration.java new file mode 100644 index 00000000..54bdbaf3 --- /dev/null +++ b/src/main/java/com/starfish/core/SpringsAutoConfiguration.java @@ -0,0 +1,23 @@ +package com.starfish.core; + +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.annotation.Bean; + +/** + * SpringsAutoConfiguration + * + * @author sunkolin + * @version 1.0.0 + * @since 2025-12-24 + */ +@AutoConfiguration +@ConditionalOnMissingBean(Springs.class) +public class SpringsAutoConfiguration { + + @Bean + public Springs springs() { + return new Springs(); + } + +} diff --git a/src/main/java/com/starfish/core/annotation/EnableDataSource.java b/src/main/java/com/starfish/core/annotation/EnableDataSource.java index c238bd9c..29e8f9c3 100644 --- a/src/main/java/com/starfish/core/annotation/EnableDataSource.java +++ b/src/main/java/com/starfish/core/annotation/EnableDataSource.java @@ -1,6 +1,6 @@ package com.starfish.core.annotation; -import com.starfish.incubator.datasource.DataSourceImportSelector; +import com.starfish.experiment.datasource.DataSourceImportSelector; import org.springframework.context.annotation.Import; import java.lang.annotation.*; diff --git a/src/main/java/com/starfish/core/annotation/RequireToken.java b/src/main/java/com/starfish/core/annotation/RequireToken.java new file mode 100644 index 00000000..af6309d9 --- /dev/null +++ b/src/main/java/com/starfish/core/annotation/RequireToken.java @@ -0,0 +1,20 @@ +package com.starfish.core.annotation; + +import java.lang.annotation.*; + +/** + * RequireToken + * + * @author sunkolin + * @version 1.0.0 + * @since 2025-12-02 + */ +@Target({ElementType.TYPE, ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@Inherited +public @interface RequireToken { + + boolean value() default true; + +} diff --git a/src/main/java/com/starfish/core/client/WeatherClient.java b/src/main/java/com/starfish/core/client/WeatherClient.java new file mode 100644 index 00000000..becb0ab6 --- /dev/null +++ b/src/main/java/com/starfish/core/client/WeatherClient.java @@ -0,0 +1,21 @@ +package com.starfish.core.client; + +import com.starfish.core.client.result.WeatherModel; + +/** + * WeatherClient + * + * @author sunkolin + * @version 1.0.0 + * @since 2021-07-08 + */ +public interface WeatherClient { + + /** + * 根据城市名称查询天气 + * + * @param cityName 城市名称 + * @return 结果 + */ + WeatherModel getWeather(String cityName); +} diff --git a/src/main/java/com/starfish/core/client/impl/WeatherClientImpl.java b/src/main/java/com/starfish/core/client/impl/WeatherClientImpl.java new file mode 100644 index 00000000..c8d0da40 --- /dev/null +++ b/src/main/java/com/starfish/core/client/impl/WeatherClientImpl.java @@ -0,0 +1,36 @@ +package com.starfish.core.client.impl; + +import com.starfish.core.client.WeatherClient; +import com.starfish.core.client.result.WeatherModel; +import com.starfish.core.util.RestTemplates; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpMethod; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; + +import java.util.Map; + +/** + * WeatherClientImpl + * + * @author sunkolin + * @version 1.0.0 + * @since 2021-07-08 + */ +@Slf4j +@Service +public class WeatherClientImpl implements WeatherClient { + + /** + * 根据城市名称查询天气接口地址 + */ + private static final String GET_WEATHER_BY_CITY_NAME_URL = "https://wthrcdn.etouch.cn/weather_mini"; + + @Override + public WeatherModel getWeather(String cityName) { + Map params = Map.of("city", cityName); + ResponseEntity responseEntity = RestTemplates.exchange(GET_WEATHER_BY_CITY_NAME_URL, HttpMethod.GET, null, params, null, WeatherModel.class); + return responseEntity.getBody(); + } + +} diff --git a/src/main/java/com/starfish/core/model/weather/WeatherData.java b/src/main/java/com/starfish/core/client/result/WeatherData.java similarity index 90% rename from src/main/java/com/starfish/core/model/weather/WeatherData.java rename to src/main/java/com/starfish/core/client/result/WeatherData.java index 5d9125df..5669ba90 100644 --- a/src/main/java/com/starfish/core/model/weather/WeatherData.java +++ b/src/main/java/com/starfish/core/client/result/WeatherData.java @@ -1,4 +1,4 @@ -package com.starfish.core.model.weather; +package com.starfish.core.client.result; import lombok.Data; diff --git a/src/main/java/com/starfish/core/model/weather/WeatherDetail.java b/src/main/java/com/starfish/core/client/result/WeatherDetail.java similarity index 93% rename from src/main/java/com/starfish/core/model/weather/WeatherDetail.java rename to src/main/java/com/starfish/core/client/result/WeatherDetail.java index c9e08a03..874c6ad0 100644 --- a/src/main/java/com/starfish/core/model/weather/WeatherDetail.java +++ b/src/main/java/com/starfish/core/client/result/WeatherDetail.java @@ -1,4 +1,4 @@ -package com.starfish.core.model.weather; +package com.starfish.core.client.result; import lombok.Data; diff --git a/src/main/java/com/starfish/core/model/weather/WeatherModel.java b/src/main/java/com/starfish/core/client/result/WeatherModel.java similarity index 98% rename from src/main/java/com/starfish/core/model/weather/WeatherModel.java rename to src/main/java/com/starfish/core/client/result/WeatherModel.java index 8ace20a1..dc40eb07 100644 --- a/src/main/java/com/starfish/core/model/weather/WeatherModel.java +++ b/src/main/java/com/starfish/core/client/result/WeatherModel.java @@ -1,4 +1,4 @@ -package com.starfish.core.model.weather; +package com.starfish.core.client.result; import lombok.Data; diff --git a/src/main/java/com/starfish/core/condition/ConditionalOnProfile.java b/src/main/java/com/starfish/core/condition/ConditionalOnProfile.java new file mode 100644 index 00000000..4fb8c9f7 --- /dev/null +++ b/src/main/java/com/starfish/core/condition/ConditionalOnProfile.java @@ -0,0 +1,22 @@ +package com.starfish.core.condition; + +import org.springframework.context.annotation.Conditional; + +import java.lang.annotation.*; + +/** + * ConditionalOnDevProfile + * + * @author sunkolin + * @version 1.0.0 + * @since 2025-12-25 + */ +@Target({ElementType.TYPE, ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@Conditional(OnProfileCondition.class) +public @interface ConditionalOnProfile { + + String[] value(); + +} diff --git a/src/main/java/com/starfish/core/condition/OnProfileCondition.java b/src/main/java/com/starfish/core/condition/OnProfileCondition.java new file mode 100644 index 00000000..59b2cf2e --- /dev/null +++ b/src/main/java/com/starfish/core/condition/OnProfileCondition.java @@ -0,0 +1,49 @@ +package com.starfish.core.condition; + +import com.google.common.base.Joiner; +import com.google.common.collect.Sets; +import org.springframework.boot.autoconfigure.condition.ConditionOutcome; +import org.springframework.boot.autoconfigure.condition.SpringBootCondition; +import org.springframework.context.annotation.ConditionContext; +import org.springframework.core.env.Environment; +import org.springframework.core.type.AnnotatedTypeMetadata; +import org.springframework.util.CollectionUtils; + +import java.util.Map; +import java.util.Set; + +/** + * OnLinuxCondition + * + * @author sunkolin + * @version 1.0.0 + * @since 2021-06-08 + */ +public class OnProfileCondition extends SpringBootCondition { + + @Override + public ConditionOutcome getMatchOutcome(ConditionContext context, AnnotatedTypeMetadata metadata) { + // 获取当前生效的环境 + Environment environment = context.getEnvironment(); + String[] activeProfiles = environment.getActiveProfiles(); + + // 获取注解中配置的环境 + String[] annotationProfiles = new String[]{}; + Map attributes = metadata.getAnnotationAttributes(ConditionalOnProfile.class.getName()); + if (attributes != null) { + annotationProfiles = (String[]) attributes.get("value"); + } + + // 判断当前生效的环境中包含注解中的环境 + Set set1 = Sets.newHashSet(activeProfiles); + Set set2 = Sets.newHashSet(annotationProfiles); + Set intersectionResult = Sets.intersection(set1, set2); + boolean match = CollectionUtils.isEmpty(intersectionResult); + String activeProfilesString = Joiner.on(",").useForNull("null").join(activeProfiles); + String annotationProfilesString = Joiner.on(",").useForNull("null").join(annotationProfiles); + String message = "ConditionalOnProfile 环境验证结果是" + match + ",生效的环境是" + activeProfilesString + ",注解中环境是" + annotationProfilesString; + + return new ConditionOutcome(match, message); + } + +} diff --git a/src/main/java/com/starfish/core/config/ApplicationConfig.java b/src/main/java/com/starfish/core/config/ApplicationConfig.java index b593f7c9..0d8066bb 100644 --- a/src/main/java/com/starfish/core/config/ApplicationConfig.java +++ b/src/main/java/com/starfish/core/config/ApplicationConfig.java @@ -10,7 +10,7 @@ /** * ApplicationConfig - * 如果需要使用静态方法获取Bean,请使用SpringPlus类 + * 如果需要使用静态方法获取Bean,请使用Springs类 * * @author sunkolin * @version 1.0.0 diff --git a/src/main/java/com/starfish/core/constant/Constant.java b/src/main/java/com/starfish/core/constant/Constant.java index 2efa5aa5..647ac83e 100644 --- a/src/main/java/com/starfish/core/constant/Constant.java +++ b/src/main/java/com/starfish/core/constant/Constant.java @@ -75,6 +75,11 @@ public class Constant { */ public static final String REQUEST_START_TIME = "REQUEST-START-TIME"; + /** + * 请求结束时间 + */ + public static final String REQUEST_END_TIME = "REQUEST-END-TIME"; + /** * 框架版本 */ diff --git a/src/main/java/com/starfish/core/SpringConstant.java b/src/main/java/com/starfish/core/constant/SpringConstant.java similarity index 93% rename from src/main/java/com/starfish/core/SpringConstant.java rename to src/main/java/com/starfish/core/constant/SpringConstant.java index 16418e9a..3d1bc3e1 100644 --- a/src/main/java/com/starfish/core/SpringConstant.java +++ b/src/main/java/com/starfish/core/constant/SpringConstant.java @@ -1,4 +1,4 @@ -package com.starfish.core; +package com.starfish.core.constant; import org.springframework.context.ApplicationContext; import org.springframework.core.env.Environment; diff --git a/src/main/java/com/starfish/core/datasource/StarfishDataSourceAutoConfiguration.java b/src/main/java/com/starfish/core/datasource/StarfishDataSourceAutoConfiguration.java new file mode 100644 index 00000000..781168c7 --- /dev/null +++ b/src/main/java/com/starfish/core/datasource/StarfishDataSourceAutoConfiguration.java @@ -0,0 +1,25 @@ +package com.starfish.core.datasource; + +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.jdbc.autoconfigure.DataSourceAutoConfiguration; +import org.springframework.boot.jdbc.autoconfigure.DataSourceTransactionManagerAutoConfiguration; +import org.springframework.boot.jdbc.autoconfigure.JdbcTemplateAutoConfiguration; +import org.springframework.context.annotation.Import; + +/** + * StarfishDataSourceAutoConfiguration + * 通过org.springframework.boot.autoconfigure.AutoConfiguration.exclude配置 + * 默认排除原生数据源配置,原生事务管理器配置,原生JdbcTemplate配置 + * 仅当开关为true时,才导入原生配置(实现条件加载) + * + * @author sunkolin + * @version 1.0.0 + * @since 2025-12-24 + */ +@AutoConfiguration +@ConditionalOnProperty(value = "spring.datasource.enabled", havingValue = "true") +@Import({DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, JdbcTemplateAutoConfiguration.class}) +public class StarfishDataSourceAutoConfiguration { + +} \ No newline at end of file diff --git a/src/main/java/com/starfish/core/enumeration/ResultEnum.java b/src/main/java/com/starfish/core/enumeration/ResultEnum.java index 5cc72e66..efd9ff00 100644 --- a/src/main/java/com/starfish/core/enumeration/ResultEnum.java +++ b/src/main/java/com/starfish/core/enumeration/ResultEnum.java @@ -13,47 +13,47 @@ public enum ResultEnum { /** * 成功 */ - SUCCESS(0, "success", "成功"), + SUCCESS(0, "成功"), /** * 系统异常 */ - SYSTEM_EXCEPTION(500, "system_exception", "系统异常"), + SYSTEM_EXCEPTION(500, "系统异常"), /** * 自定义错误从1001开始 */ - PARAM_ERROR(1001, "param_error", "参数错误"), + PARAM_ERROR(1001, "参数错误"), - DATE_TIME_FORMAT_ERROR(1002, "date_time_format_error", "日期格式有误"), + DATE_TIME_FORMAT_ERROR(1002, "日期格式有误"), - PARSE_DATE_TIME_ERROR(1003, "parse_date_time_error", "解析日期异常"), + PARSE_DATE_TIME_ERROR(1003, "解析日期异常"), - FILE_PATH_IS_EMPTY(1004, "file_path_is_empty", "文件路径为空"), + FILE_PATH_IS_EMPTY(1004, "文件路径为空"), - FILE_ALREADY_EXIST(1005, "file_already_exist", "文件已存在"), + FILE_ALREADY_EXIST(1005, "文件已存在"), - FILE_DOWNLOAD_ERROR(1006, "file_download_error", "下载文件异常"), + FILE_DOWNLOAD_ERROR(1006, "下载文件异常"), - DECOMPRESS_FILE_ERROR(1007, "decompress_file_error", "解压文件异常"), + DECOMPRESS_FILE_ERROR(1007, "解压文件异常"), - COMPRESS_FILE_ERROR(1008, "compress_file_error", "压缩文件异常"), + COMPRESS_FILE_ERROR(1008, "压缩文件异常"), - CAN_NOT_FIND_METHOD(1009, "can_not_find_method", "找不到方法"), + CAN_NOT_FIND_METHOD(1009, "找不到方法"), - FIELD_COUNT_IS_ZERO(1010, "field_count_is_zero", "当前对象中没有任何属性值"), + FIELD_COUNT_IS_ZERO(1010, "当前对象中没有任何属性值"), - FILE_TYPE_ERROR(1011, "file_type_error", "文件类型错误"), + FILE_TYPE_ERROR(1011, "文件类型错误"), - SAVE_FILE_EXCEPTION(1012, "save_file_exception", "保存文件异常"), + SAVE_FILE_EXCEPTION(1012, "保存文件异常"), - GET_WEATHER_EXCEPTION(1013, "get_weather_exception", "查询天气异常"), + GET_WEATHER_EXCEPTION(1013, "查询天气异常"), - GET_FILE_NAME_EXCEPTION(1014, "get_file_name_exception", "获取文件名异常"), + GET_FILE_NAME_EXCEPTION(1014, "获取文件名异常"), - NO_READ_PERMISSION(1015, "no_read_permission", "没有读权限"), + NO_READ_PERMISSION(1015, "没有读权限"), - NO_WRITE_PERMISSION(1016, "no_write_permission", "没有写权限"), + NO_WRITE_PERMISSION(1016, "没有写权限"), ; @@ -72,6 +72,18 @@ public enum ResultEnum { */ private final String message; + /** + * ResultEnum + * + * @param code code + * @param message message + */ + ResultEnum(Integer code, String message) { + this.code = code; + this.name = ""; + this.message = message; + } + /** * ResultEnum * diff --git a/src/main/java/com/starfish/core/exception/CustomException.java b/src/main/java/com/starfish/core/exception/CustomException.java index 0bb4576a..fb83b943 100644 --- a/src/main/java/com/starfish/core/exception/CustomException.java +++ b/src/main/java/com/starfish/core/exception/CustomException.java @@ -1,10 +1,11 @@ package com.starfish.core.exception; import com.starfish.core.enumeration.ResultEnum; +import lombok.EqualsAndHashCode; +import lombok.Getter; import lombok.extern.slf4j.Slf4j; import java.io.Serializable; -import java.lang.reflect.Method; /** * @author sunkolin @@ -12,41 +13,52 @@ * @since 2013-06-01 */ @Slf4j +@Getter +@EqualsAndHashCode(callSuper = true) @SuppressWarnings("unused") public class CustomException extends RuntimeException implements Serializable { /** * code */ - public Integer code; + private final Integer code; /** * message */ - public String message; + private final String message; /** * description */ - public String description; - - public CustomException() { - super(); - this.code = ResultEnum.SYSTEM_EXCEPTION.getCode(); - this.message = ResultEnum.SYSTEM_EXCEPTION.getMessage(); - this.description = ResultEnum.SYSTEM_EXCEPTION.getMessage(); - } - - public CustomException(Integer code) { - this(code, ResultEnum.SYSTEM_EXCEPTION.getMessage(), ResultEnum.SYSTEM_EXCEPTION.getMessage()); - } + private final String description; + +// public CustomException() { +// super(ResultEnum.SYSTEM_EXCEPTION.getMessage()); +// this.code = ResultEnum.SYSTEM_EXCEPTION.getCode(); +// this.message = ResultEnum.SYSTEM_EXCEPTION.getMessage(); +// this.description = ResultEnum.SYSTEM_EXCEPTION.getMessage(); +// } +// +// public CustomException(Integer code) { +// super(ResultEnum.SYSTEM_EXCEPTION.getMessage()); +// this.code = code; +// this.message = ResultEnum.SYSTEM_EXCEPTION.getMessage(); +// this.description = ResultEnum.SYSTEM_EXCEPTION.getMessage(); +// } public CustomException(String message) { - this(ResultEnum.SYSTEM_EXCEPTION.getCode(), message, message); + super(message); + this.code = ResultEnum.SYSTEM_EXCEPTION.getCode(); + this.message = message; + this.description = message; } public CustomException(Integer code, String message) { - this(code, message, message); + super(message); + this.code = code; + this.message = message; + this.description = message; } public CustomException(Integer code, String message, String description) { @@ -65,45 +77,9 @@ public CustomException(ResultEnum resultEnum) { public CustomException(Exception exception) { super(exception); + this.code = ResultEnum.SYSTEM_EXCEPTION.getCode(); + this.message = exception.getMessage(); + this.description = exception.getMessage(); } - public CustomException(Object object) { - try { - Method getCodeMethod = object.getClass().getMethod("getCode"); - Method getMessageMethod = object.getClass().getMethod("getMessage"); - Object codeObject = getCodeMethod.invoke(object); - Object messageObject = getMessageMethod.invoke(object); - this.code = (codeObject == null ? -1 : (Integer) codeObject); - this.message = (messageObject == null ? "" : messageObject.toString()); - this.description = message; - } catch (Exception e) { - log.error("CustomException", e); - } - } - - public Integer getCode() { - return code; - } - - public void setCode(Integer code) { - this.code = code; - } - - @Override - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - -} +} \ No newline at end of file diff --git a/src/main/java/com/starfish/core/exception/ExceptionAutoConfiguration.java b/src/main/java/com/starfish/core/exception/ExceptionAutoConfiguration.java index dbaa3725..9d7ee99b 100644 --- a/src/main/java/com/starfish/core/exception/ExceptionAutoConfiguration.java +++ b/src/main/java/com/starfish/core/exception/ExceptionAutoConfiguration.java @@ -14,7 +14,7 @@ */ @Configuration(proxyBeanMethods = false) @EnableConfigurationProperties(ExceptionProperties.class) -@ConditionalOnProperty(prefix = "application.exception", name = "enabled", havingValue = "true", matchIfMissing = true) +@ConditionalOnProperty(prefix = "starfish.exception", name = "enabled", havingValue = "true", matchIfMissing = true) public class ExceptionAutoConfiguration { /** diff --git a/src/main/java/com/starfish/core/exception/ExceptionModel.java b/src/main/java/com/starfish/core/exception/ExceptionModel.java new file mode 100644 index 00000000..e40e950c --- /dev/null +++ b/src/main/java/com/starfish/core/exception/ExceptionModel.java @@ -0,0 +1,29 @@ +package com.starfish.core.exception; + +/** + * ExceptionModel + * + * @author sunkolin + * @version 1.0.0 + * @since 2025-09-30 + */ +public class ExceptionModel { + + private final Integer code; + + private final String message; + + public ExceptionModel(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } + +} diff --git a/src/main/java/com/starfish/core/exception/ExceptionProperties.java b/src/main/java/com/starfish/core/exception/ExceptionProperties.java index c8e9858b..f9bd9a28 100644 --- a/src/main/java/com/starfish/core/exception/ExceptionProperties.java +++ b/src/main/java/com/starfish/core/exception/ExceptionProperties.java @@ -11,7 +11,7 @@ * @since 2021-06-08 */ @Data -@ConfigurationProperties(prefix = "application.exception") +@ConfigurationProperties(prefix = "strafish.exception") public class ExceptionProperties { /** diff --git a/src/main/java/com/starfish/core/exception/ExceptionSupplier.java b/src/main/java/com/starfish/core/exception/ExceptionSupplier.java new file mode 100644 index 00000000..3155f745 --- /dev/null +++ b/src/main/java/com/starfish/core/exception/ExceptionSupplier.java @@ -0,0 +1,15 @@ +package com.starfish.core.exception; + +/** + * ExceptionSupplier + * + * @author sunkolin + * @version 1.0.0 + * @since 2025-09-30 + */ +@FunctionalInterface +public interface ExceptionSupplier { + + ExceptionModel get(); + +} diff --git a/src/main/java/com/starfish/core/interceptor/login/LoginInterceptor.java b/src/main/java/com/starfish/core/interceptor/login/LoginInterceptor.java new file mode 100644 index 00000000..f6edd902 --- /dev/null +++ b/src/main/java/com/starfish/core/interceptor/login/LoginInterceptor.java @@ -0,0 +1,62 @@ +package com.starfish.core.interceptor.login; + +import com.starfish.core.annotation.RequireToken; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.extern.slf4j.Slf4j; +import org.springframework.core.Ordered; +import org.springframework.core.annotation.AnnotationUtils; +import org.springframework.web.method.HandlerMethod; +import org.springframework.web.servlet.HandlerInterceptor; + +import java.lang.reflect.Method; + +/** + * LoginInterceptor + * + * @author sunkolin + * @version 1.0.0 + * @since 2022-07-29 + */ +@Slf4j +public abstract class LoginInterceptor implements HandlerInterceptor, Ordered { + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + HandlerMethod handlerMethod = (HandlerMethod) handler; + Method method = handlerMethod.getMethod(); + + // 默认需要token; + boolean requireToken = true; + RequireToken requireTokenOfMethod = AnnotationUtils.findAnnotation(method, RequireToken.class); + if (requireTokenOfMethod != null) { + if (!requireTokenOfMethod.value()) { + requireToken = false; + } + return requireToken; + } + + // 如果方法上没有RequireToken注解,看类上的RequireToken注解 + RequireToken requireTokenOfClass = AnnotationUtils.findAnnotation(handlerMethod.getClass(), RequireToken.class); + if (requireTokenOfClass != null && !requireTokenOfClass.value()) { + requireToken = false; + } + + return requireToken; + } + + /** + * 验证是否有写权限 + * + * @param request request + * @param response response + * @return 结果,有权限返回true,无权限返回false + */ + public abstract boolean checkWritePermission(HttpServletRequest request, HttpServletResponse response); + + @Override + public int getOrder() { + return Integer.MIN_VALUE; + } + +} diff --git a/src/main/java/com/starfish/common/permission/AbstractPermissionInterceptor.java b/src/main/java/com/starfish/core/interceptor/permission/AbstractPermissionInterceptor.java similarity index 98% rename from src/main/java/com/starfish/common/permission/AbstractPermissionInterceptor.java rename to src/main/java/com/starfish/core/interceptor/permission/AbstractPermissionInterceptor.java index c003546e..aa874955 100644 --- a/src/main/java/com/starfish/common/permission/AbstractPermissionInterceptor.java +++ b/src/main/java/com/starfish/core/interceptor/permission/AbstractPermissionInterceptor.java @@ -1,4 +1,4 @@ -package com.starfish.common.permission; +package com.starfish.core.interceptor.permission; import com.google.common.collect.Lists; import com.starfish.core.annotation.Permission; diff --git a/src/main/java/com/starfish/core/model/BasicParam.java b/src/main/java/com/starfish/core/model/BasicParam.java index c21f0aca..64c4f751 100644 --- a/src/main/java/com/starfish/core/model/BasicParam.java +++ b/src/main/java/com/starfish/core/model/BasicParam.java @@ -17,7 +17,7 @@ */ @Data @SuppressWarnings("unused") -@EqualsAndHashCode(callSuper=true) +@EqualsAndHashCode(callSuper = true) public class BasicParam extends BasicModel implements Serializable { /** diff --git a/src/main/java/com/starfish/core/model/DateTimeRange.java b/src/main/java/com/starfish/core/model/DateTimeRange.java new file mode 100644 index 00000000..b9730d73 --- /dev/null +++ b/src/main/java/com/starfish/core/model/DateTimeRange.java @@ -0,0 +1,22 @@ +package com.starfish.core.model; + +import java.util.Date; + +/** + * DateTimeRange + * + * @author sunkolin + * @version 1.0.0 + * @since 2023-05-12 + */ +public class DateTimeRange extends Range { + + public DateTimeRange() { + + } + + public DateTimeRange(Date start, Date end) { + super(start, end); + } + +} diff --git a/src/main/java/com/starfish/core/model/IntegerRange.java b/src/main/java/com/starfish/core/model/IntegerRange.java index fb53c270..cc168961 100644 --- a/src/main/java/com/starfish/core/model/IntegerRange.java +++ b/src/main/java/com/starfish/core/model/IntegerRange.java @@ -9,28 +9,12 @@ */ public class IntegerRange extends Range { - private Integer start; + public IntegerRange() { - private Integer end; - - @Override - public Integer getStart() { - return start; - } - - @Override - public void setStart(Integer start) { - this.start = start; - } - - @Override - public Integer getEnd() { - return end; } - @Override - public void setEnd(Integer end) { - this.end = end; + public IntegerRange(Integer start, Integer end) { + super(start, end); } } diff --git a/src/main/java/com/starfish/core/model/LongRange.java b/src/main/java/com/starfish/core/model/LongRange.java new file mode 100644 index 00000000..ffee9ef9 --- /dev/null +++ b/src/main/java/com/starfish/core/model/LongRange.java @@ -0,0 +1,20 @@ +package com.starfish.core.model; + +/** + * LongRange + * + * @author sunkolin + * @version 1.0.0 + * @since 2025-12-12 + */ +public class LongRange extends Range { + + public LongRange() { + + } + + public LongRange(Long start, Long end) { + super(start, end); + } + +} diff --git a/src/main/java/com/starfish/core/model/MultiResult.java b/src/main/java/com/starfish/core/model/MultiResult.java index 59a22aab..cad9f73a 100644 --- a/src/main/java/com/starfish/core/model/MultiResult.java +++ b/src/main/java/com/starfish/core/model/MultiResult.java @@ -1,9 +1,5 @@ package com.starfish.core.model; -import lombok.Data; - -import java.io.Serializable; - /** * MultiResult * 最多支持返回3个结果,不建议同一个方法返回太多结果 @@ -15,7 +11,6 @@ * @since 2021-12-12 */ @SuppressWarnings({"unchecked", "unused"}) -@Data public class MultiResult { private Object first; diff --git a/src/main/java/com/starfish/core/model/Range.java b/src/main/java/com/starfish/core/model/Range.java index 9ecb91d6..464e99bb 100644 --- a/src/main/java/com/starfish/core/model/Range.java +++ b/src/main/java/com/starfish/core/model/Range.java @@ -13,6 +13,15 @@ public class Range { private T end; + public Range() { + + } + + public Range(T start, T end) { + this.start = start; + this.end = end; + } + public T getStart() { return start; } diff --git a/src/main/java/com/starfish/core/model/TimeRange.java b/src/main/java/com/starfish/core/model/TimeRange.java deleted file mode 100644 index c1d0f61d..00000000 --- a/src/main/java/com/starfish/core/model/TimeRange.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.starfish.core.model; - -import java.util.Date; - -/** - * TimeRange - * - * @author sunkolin - * @version 1.0.0 - * @since 2023-05-12 - */ -public class TimeRange extends Range { - - private Date start; - - private Date end; - - public TimeRange() { - } - - public TimeRange(Date start, Date end) { - this.start = start; - this.end = end; - } - - @Override - public Date getStart() { - return start; - } - - @Override - public void setStart(Date start) { - this.start = start; - } - - @Override - public Date getEnd() { - return end; - } - - @Override - public void setEnd(Date end) { - this.end = end; - } - -} diff --git a/src/main/java/com/starfish/core/util/BusinessUtil.java b/src/main/java/com/starfish/core/util/BusinessUtil.java deleted file mode 100644 index fec98f92..00000000 --- a/src/main/java/com/starfish/core/util/BusinessUtil.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.starfish.core.util; - -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.IdcardUtil; -import com.google.common.base.Strings; -import com.starfish.core.constant.Constant; -import com.starfish.core.exception.CustomException; -import com.starfish.core.model.weather.WeatherModel; -import lombok.extern.slf4j.Slf4j; -import org.springframework.http.HttpMethod; -import org.springframework.http.ResponseEntity; - -import java.io.IOException; -import java.util.Date; -import java.util.List; -import java.util.Map; -import java.util.regex.Pattern; - -/** - * BusinessUtil - * - * @author sunkolin - * @version 1.0.0 - * @since 2021-07-08 - */ -@Slf4j -public class BusinessUtil { - - /** - * 参考文档 - */ - private static final String MOBILE_REGEX = "(?:0|86|\\+86)?1[3-9]\\d{9}"; - - private static final int MOBILE_LENGTH = 11; - - /** - * sensitive words list - */ - private static final List SENSITIVE_WORD_LIST; - - static { - try { - SENSITIVE_WORD_LIST = FileUtil.readLines("classpath:words.txt"); - } catch (IOException e) { - throw new CustomException(e); - } - } - - /** - * 根据城市名称查询天气接口地址 - */ - private static final String GET_WEATHER_BY_CITY_NAME_URL = "https://wthrcdn.etouch.cn/weather_mini"; - - private BusinessUtil() { - - } - - /** - * 判断一个字符串是否是手机号 - * - * @param mobile 手机号 - * @return 结果 - */ - public static boolean isMobile(String mobile) { - if (Strings.isNullOrEmpty(mobile)) { - return false; - } - if (mobile.length() != MOBILE_LENGTH) { - return false; - } - return Pattern.matches(MOBILE_REGEX, mobile); - } - - /** - * 判断身份证是否有效 - * - * @param idCard 身份证号码 - * @return 结果,true有效,false无效 - */ - public static boolean validateIdCard(String idCard) { - return IdcardUtil.isValidCard(idCard); - } - - /** - * 根据身份证获取生日 - * - * @param idCard 身份证 - * @return 结果 - */ - public static String getBirthByIdCard(String idCard) { - Date date = IdcardUtil.getBirthDate(idCard); - return DateUtil.format(date, Constant.DATE_PATTERN); - } - - /** - * check sensitive words - * 判断给定的字符串是否包含敏感词 - * - * @param word word - * @return return - */ - public static boolean containsSensitiveWords(String word) { - return SENSITIVE_WORD_LIST.contains(word); - } - - /** - * 根据城市名称查询天气 - * - * @param cityName 城市名称 - * @return 结果 - */ - public static WeatherModel getWeather(String cityName) { - Map params = Map.of("city", cityName); - ResponseEntity responseEntity = RestTemplatePlus.exchange(GET_WEATHER_BY_CITY_NAME_URL, HttpMethod.GET, null, params, null, WeatherModel.class); - return responseEntity.getBody(); - } - -} diff --git a/src/main/java/com/starfish/core/util/CommonUtil.java b/src/main/java/com/starfish/core/util/CommonUtil.java index db8e45b8..137005bd 100644 --- a/src/main/java/com/starfish/core/util/CommonUtil.java +++ b/src/main/java/com/starfish/core/util/CommonUtil.java @@ -4,17 +4,10 @@ import com.google.common.base.Strings; import com.starfish.core.enumeration.ResultEnum; import com.starfish.core.exception.CustomException; -import lombok.Data; import lombok.extern.slf4j.Slf4j; -import org.springframework.http.HttpMethod; -import org.springframework.http.ResponseEntity; import org.springframework.util.CollectionUtils; import java.io.*; -import java.net.Inet4Address; -import java.net.InetAddress; -import java.net.NetworkInterface; -import java.net.SocketException; import java.text.SimpleDateFormat; import java.util.*; import java.util.concurrent.ThreadLocalRandom; @@ -271,93 +264,4 @@ public static String contact(Map params) { return Joiner.on("&").useForNull("").withKeyValueSeparator("=").join(params); } - /** - * 获取本机局域网IP地址 - * - * @return 结果 - * @throws NoSuchElementException 异常 - * @throws SocketException 异常 - */ - public static String getLocalIp() throws NoSuchElementException, SocketException { - String result = ""; - Enumeration allNetInterfaces = NetworkInterface.getNetworkInterfaces(); - while (allNetInterfaces.hasMoreElements()) { - NetworkInterface netInterface = allNetInterfaces.nextElement(); - Enumeration addresses = netInterface.getInetAddresses(); - while (addresses.hasMoreElements()) { - InetAddress tmp = addresses.nextElement(); - // Inet4Address.isSiteLocalAddress()验证条件去掉 - // 方法验证是否以一下前缀开头,部分情况下不好用,在我的mac下局域网地址是20.18.138.3 - // 10/8 prefix - // 172.16/12 prefix - // 192.168/16 prefix - if (tmp instanceof Inet4Address && !tmp.isLoopbackAddress() && !tmp.getHostAddress().contains(":")) { - result = tmp.getHostAddress(); - break; - } - } - } - - return result; - } - -// /** -// * 获取本机公网IP地址,此接口也能获取地址 -// * -// * @return 结果 -// */ -// public static String getPublicInternetProtocolAddress() { -// String url = "https://ip.cn/api/index?ip=&type=0"; -// HttpMethod method = HttpMethod.GET; -// Map headers = new HashMap<>(20); -// headers.put("accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"); -// headers.put("user-agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36"); -// headers.put("cookie", "UM_distinctid=17b80664e762cd-0806aa579995fa-35667c03-13c680-17b80664e777ed; CNZZDATA1278852728=1391488375-1629944092-https%253A%252F%252Fwww.baidu.com%252F%7C1629944092; __51cke__=; __51uvsct__1vGn5KEyNxI88WjH=1; __51vcke__1vGn5KEyNxI88WjH=311712a8-8217-5248-93ec-70cc18e109ba; __51vuft__1vGn5KEyNxI88WjH=1629946793633; INIT_IP_INFO=%E4%B8%AD%E5%9B%BD++%E5%8C%97%E4%BA%AC+%E5%8C%97%E4%BA%AC%E5%B8%82+%E7%94%B5%E4%BF%A1; __tins__20765349=%7B%22sid%22%3A%201629946793615%2C%20%22vd%22%3A%202%2C%20%22expires%22%3A%201629948607357%7D; __51laig__=2; __vtins__1vGn5KEyNxI88WjH=%7B%22sid%22%3A%20%22216c9f22-0d2a-5843-ae6d-37a6f08167c2%22%2C%20%22vd%22%3A%202%2C%20%22stt%22%3A%2013744%2C%20%22dr%22%3A%2013744%2C%20%22expires%22%3A%201629948607372%2C%20%22ct%22%3A%201629946807372%7D"); -// Map params = null; -// String body = null; -// Class responseType = String.class; -// ResponseEntity response = RestTemplatePlus.exchangeSkipSsl(url, method, headers, params, null, responseType); -// String result = response.getBody(); -//// -// // 解析返回数据 -// // <200,{"rs":1,"code":0,"address":"中国 北京 北京市 电信","ip":"106.120.64.78","isDomain":0},[Date:"Thu, 26 Aug 2021 03:13:53 GMT", Content-Type:"application/json", Transfer-Encoding:"chunked", Connection:"keep-alive", CF-Cache-Status:"DYNAMIC", Expect-CT:"max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"", Report-To:"{"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=xxR%2FMmp%2FEx8T6u9lgnFthzXhVATlx2oxK%2FBYEXm6QzOsoWagGQIyiDKYYb0MOKflPKrWg8HFCMEOYvxR1IdIIdlAgOo2%2FDw7pGX1%2F6yzb2jAuozjbuTFcA%3D%3D"}],"group":"cf-nel","max_age":604800}", NEL:"{"success_fraction":0,"report_to":"cf-nel","max_age":604800}", Server:"cloudflare", CF-RAY:"6849e3069e0bc3c4-LAX", alt-svc:"h3-27=":443"; ma=86400, h3-28=":443"; ma=86400, h3-29=":443"; ma=86400, h3=":443"; ma=86400"]> -// String json = result.substring(result.indexOf("{"), result.indexOf("}") + 1); -// -// // 格式如下{"rs":1,"code":0,"address":"中国 北京 北京市 电信","ip":"106.120.64.78","isDomain":0} -// GetPublicAddressResult getPublicAddressResult = JsonUtil.toObject(json, GetPublicAddressResult.class); -// -// return getPublicAddressResult.getIp(); -// } - - /** - * 获取本机公网IP地址,接口地址 - * - * @return 结果 - */ - public static String getPublicInternetProtocolAddress() { - String url = "https://ipv4.icanhazip.com"; - HttpMethod method = HttpMethod.GET; - Map headers = new HashMap<>(8); - Map params = new HashMap<>(8); - String body = null; - Class responseType = String.class; - ResponseEntity response = RestTemplatePlus.exchange(url, method, headers, params, null, responseType); - return response.getBody(); - } - - @Data - static class GetPublicAddressResult implements Serializable { - - private Integer rs; - - private Integer code; - - private String address; - - private String ip; - - private Integer isDomain; - - } - } \ No newline at end of file diff --git a/src/main/java/com/starfish/core/util/DateTimeUtil.java b/src/main/java/com/starfish/core/util/DateTimeUtil.java index f59dbb49..a145c5c7 100644 --- a/src/main/java/com/starfish/core/util/DateTimeUtil.java +++ b/src/main/java/com/starfish/core/util/DateTimeUtil.java @@ -1,6 +1,6 @@ package com.starfish.core.util; -import com.starfish.core.model.TimeRange; +import com.starfish.core.model.DateTimeRange; import lombok.extern.slf4j.Slf4j; import cn.hutool.core.date.DateUtil; @@ -138,7 +138,7 @@ public static List dateBetween(Date start, Date end) { return result; } - public static List between(Date start, Date end, int seconds) { + public static List between(Date start, Date end, int seconds) { List list = new ArrayList<>(); Date tmpDate = start; while (tmpDate.before(end)) { @@ -150,9 +150,9 @@ public static List between(Date start, Date end, int seconds) { } list.add(end); - List result = new ArrayList<>(); + List result = new ArrayList<>(); for (int i = 0; i < list.size()-1; i++) { - result.add(new TimeRange(list.get(i), list.get(i + 1))); + result.add(new DateTimeRange(list.get(i), list.get(i + 1))); } return result; } diff --git a/src/main/java/com/starfish/core/util/IdCardUtil.java b/src/main/java/com/starfish/core/util/IdCardUtil.java new file mode 100644 index 00000000..e6288495 --- /dev/null +++ b/src/main/java/com/starfish/core/util/IdCardUtil.java @@ -0,0 +1,45 @@ +package com.starfish.core.util; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdcardUtil; +import com.starfish.core.constant.Constant; +import lombok.extern.slf4j.Slf4j; + +import java.util.Date; + +/** + * IdCardUtil + * + * @author sunkolin + * @version 1.0.0 + * @since 2021-07-08 + */ +@Slf4j +public class IdCardUtil { + + private IdCardUtil() { + + } + + /** + * 判断身份证是否有效 + * + * @param idCard 身份证号码 + * @return 结果,true有效,false无效 + */ + public static boolean validateIdCard(String idCard) { + return IdcardUtil.isValidCard(idCard); + } + + /** + * 根据身份证获取生日 + * + * @param idCard 身份证 + * @return 结果 + */ + public static String getBirthByIdCard(String idCard) { + Date date = IdcardUtil.getBirthDate(idCard); + return DateUtil.format(date, Constant.DATE_PATTERN); + } + +} diff --git a/src/main/java/com/starfish/core/util/IpUtil.java b/src/main/java/com/starfish/core/util/IpUtil.java new file mode 100644 index 00000000..288a9ec7 --- /dev/null +++ b/src/main/java/com/starfish/core/util/IpUtil.java @@ -0,0 +1,164 @@ +package com.starfish.core.util; + +import com.fasterxml.jackson.annotation.JsonProperty; +import jakarta.servlet.http.HttpServletRequest; +import lombok.Data; +import org.springframework.http.HttpMethod; +import org.springframework.http.ResponseEntity; + +import java.io.Serializable; +import java.net.Inet4Address; +import java.net.InetAddress; +import java.net.NetworkInterface; +import java.net.SocketException; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.Map; +import java.util.NoSuchElementException; + +/** + * IpUtil + * + * @author sunkolin + * @version 1.0.0 + * @since 2015-01-11 + */ +public class IpUtil { + + /** + * 淘宝查询IP地址接口 + */ + private static final String TAO_BAO_INTERFACE_URL = "https://ip.taobao.com/outGetIpInfo?accessKey=alibaba-inc"; + + /** + * 获取本机局域网IP地址 + * + * @return 结果 + * @throws NoSuchElementException 异常 + * @throws SocketException 异常 + */ + public static String getLocalAreaNetworkIp() throws NoSuchElementException, SocketException { + String result = ""; + Enumeration allNetInterfaces = NetworkInterface.getNetworkInterfaces(); + while (allNetInterfaces.hasMoreElements()) { + NetworkInterface netInterface = allNetInterfaces.nextElement(); + Enumeration addresses = netInterface.getInetAddresses(); + while (addresses.hasMoreElements()) { + InetAddress tmp = addresses.nextElement(); + // Inet4Address.isSiteLocalAddress()验证条件去掉 + // 方法验证是否以一下前缀开头,部分情况下不好用,在我的mac下局域网地址是20.18.138.3 + // 10/8 prefix + // 172.16/12 prefix + // 192.168/16 prefix + if (tmp instanceof Inet4Address && !tmp.isLoopbackAddress() && !tmp.getHostAddress().contains(":")) { + result = tmp.getHostAddress(); + break; + } + } + } + + return result; + } + + /** + * 获取本机公网IP地址,接口地址 + * + * @return 结果 + */ + public static String getPublicNetworkIp() { + String url = "https://ipv4.icanhazip.com"; + HttpMethod method = HttpMethod.GET; + Map headers = new HashMap<>(8); + Map params = new HashMap<>(8); + Class responseType = String.class; + ResponseEntity response = RestTemplates.exchange(url, method, headers, params, null, responseType); + return response.getBody(); + } + + /** + * 根据ip获取实际地址 + * get the location,use tao bao interface default + * + * @param ip ip + * @return the location + */ + public static String getAddress(String ip) { + String result; + try { + //call remote interface + Map params = Map.of("ip", ip); + ResponseEntity responseEntity = RestTemplates.exchange(TAO_BAO_INTERFACE_URL, HttpMethod.GET, null, params, null, String.class); + String json = responseEntity.getBody(); + GetIpAddressResult getIpAddressResult = JsonUtil.toObject(json, GetIpAddressResult.class); + GetIpAddressData data = getIpAddressResult.getData(); + + //return + return data.getCountry() + " " + data.getRegion() + " " + data.getCity(); + } catch (Exception e) { + result = "未知"; + return result; + } + } + + /** + * 根据请求获取实际地址 + * get address by ip + * + * @param request request + * @return the location + */ + public static String getAddress(HttpServletRequest request) { + return getAddress(WebUtil.getRequestIp(request)); + } + + @Data + static class GetIpAddressResult implements Serializable { + + private Integer code; + + private String msg; + + private GetIpAddressData data; + + } + + @Data + static class GetIpAddressData implements Serializable { + + private String area; + + private String country; + + @JsonProperty("isp_id") + private String ispId; + + private String queryIp; + + private String city; + + private String ip; + + private String isp; + + private String county; + + @JsonProperty("region_id") + private String regionId; + + @JsonProperty("area_id") + private String areaId; + + @JsonProperty("county_id") + private String countyId; + + private String region; + + @JsonProperty("country_id") + private String countryId; + + @JsonProperty("city_id") + private String cityId; + + } + +} diff --git a/src/main/java/com/starfish/core/util/JsonUtil.java b/src/main/java/com/starfish/core/util/JsonUtil.java index c58aa279..45b22eb6 100644 --- a/src/main/java/com/starfish/core/util/JsonUtil.java +++ b/src/main/java/com/starfish/core/util/JsonUtil.java @@ -3,6 +3,7 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; +import com.starfish.core.enumeration.ResultEnum; import com.starfish.core.exception.CustomException; /** @@ -26,7 +27,7 @@ public static String toJson(Object object) { try { return mapper.writeValueAsString(object); } catch (JsonProcessingException e) { - throw new CustomException(); + throw new CustomException(e); } } @@ -35,7 +36,7 @@ public static T toObject(String json, Class cls) { try { return objectMapper.readValue(json, cls); } catch (JsonProcessingException e) { - throw new CustomException(); + throw new CustomException(e); } } diff --git a/src/main/java/com/starfish/core/util/MobileUtil.java b/src/main/java/com/starfish/core/util/MobileUtil.java new file mode 100644 index 00000000..12154b07 --- /dev/null +++ b/src/main/java/com/starfish/core/util/MobileUtil.java @@ -0,0 +1,45 @@ +package com.starfish.core.util; + +import com.google.common.base.Strings; +import lombok.extern.slf4j.Slf4j; + +import java.util.regex.Pattern; + +/** + * MobileUtil + * + * @author sunkolin + * @version 1.0.0 + * @since 2021-07-08 + */ +@Slf4j +public class MobileUtil { + + /** + * 参考文档 + */ + private static final String MOBILE_REGEX = "(?:0|86|\\+86)?1[3-9]\\d{9}"; + + private static final int MOBILE_LENGTH = 11; + + private MobileUtil() { + + } + + /** + * 判断一个字符串是否是手机号 + * + * @param mobile 手机号 + * @return 结果 + */ + public static boolean isMobile(String mobile) { + if (Strings.isNullOrEmpty(mobile)) { + return false; + } + if (mobile.length() != MOBILE_LENGTH) { + return false; + } + return Pattern.matches(MOBILE_REGEX, mobile); + } + +} diff --git a/src/main/java/com/starfish/core/util/RestTemplatePlus.java b/src/main/java/com/starfish/core/util/RestTemplates.java similarity index 81% rename from src/main/java/com/starfish/core/util/RestTemplatePlus.java rename to src/main/java/com/starfish/core/util/RestTemplates.java index 2a58e623..046e624c 100644 --- a/src/main/java/com/starfish/core/util/RestTemplatePlus.java +++ b/src/main/java/com/starfish/core/util/RestTemplates.java @@ -5,7 +5,7 @@ import org.springframework.http.client.SimpleClientHttpRequestFactory; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.StringHttpMessageConverter; -import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.http.converter.json.JacksonJsonHttpMessageConverter; import org.springframework.util.CollectionUtils; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; @@ -28,15 +28,15 @@ /** * SuperRestTemplate * 使用方式有两种 - * 1 RestTemplate restTemplate = RestTemplatePlus.buildRestTemplate(); - * 2 RestTemplatePlus superRestTemplate = RestTemplatePlus.buildRestTemplatePlus(); + * 1 RestTemplate restTemplate = RestTemplates.buildRestTemplate(); + * 2 RestTemplate superRestTemplate = RestTemplates.buildRestTemplatePlus(); * * @author sunkolin * @version 1.0.0 * @since 2020-10-16 */ @SuppressWarnings("unused") -public final class RestTemplatePlus { +public final class RestTemplates { /** * RestTemplate @@ -63,7 +63,7 @@ public final class RestTemplatePlus { init(SSL_REST_TEMPLATE); } - private RestTemplatePlus() { + private RestTemplates() { // constructor } @@ -95,40 +95,9 @@ private static void supportUtf8(RestTemplate restTemplate) { */ private static void supportJavascript(RestTemplate restTemplate) { List> messageConverters = restTemplate.getMessageConverters(); - MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter(); - mappingJackson2HttpMessageConverter.setSupportedMediaTypes(Collections.singletonList(new MediaType("application", "x-javascript"))); - messageConverters.add(mappingJackson2HttpMessageConverter); - } - - /** - * 发起http请求 - * - * @param url 请求地址 - * @param method 方法 - * @param params 参数 - * @param headers headers - * @param form 请求体 - * @param responseType 返回类型 - * @param T - * @return 结果 - */ - public static ResponseEntity form(String url, HttpMethod method, Map headers, Map params, Map form, Class responseType) { - url = CommonUtil.contact(url, params); - - HttpHeaders httpHeaders = new HttpHeaders(); - if (!CollectionUtils.isEmpty(headers)) { - httpHeaders.setAll(headers); - } - httpHeaders.setContentType(MediaType.APPLICATION_FORM_URLENCODED); - - MultiValueMap innerForm = new LinkedMultiValueMap<>(); - if (!CollectionUtils.isEmpty(form)) { - for (Map.Entry item : form.entrySet()) { - innerForm.add(item.getKey(), item.getValue()); - } - } - HttpEntity> requestEntity = new HttpEntity<>(innerForm, httpHeaders); - return REST_TEMPLATE.exchange(url, method, requestEntity, responseType); + JacksonJsonHttpMessageConverter jacksonJsonHttpMessageConverter = new JacksonJsonHttpMessageConverter(); + jacksonJsonHttpMessageConverter.setSupportedMediaTypes(Collections.singletonList(new MediaType("application", "x-javascript"))); + messageConverters.add(jacksonJsonHttpMessageConverter); } /** diff --git a/src/main/java/com/starfish/core/util/SensitiveWordsUtil.java b/src/main/java/com/starfish/core/util/SensitiveWordsUtil.java new file mode 100644 index 00000000..42df7a93 --- /dev/null +++ b/src/main/java/com/starfish/core/util/SensitiveWordsUtil.java @@ -0,0 +1,47 @@ +package com.starfish.core.util; + +import com.starfish.core.exception.CustomException; +import lombok.extern.slf4j.Slf4j; + +import java.io.IOException; +import java.util.List; + +/** + * SensitiveWordsUtil + * + * @author sunkolin + * @version 1.0.0 + * @since 2021-07-08 + */ +@Slf4j +public class SensitiveWordsUtil { + + /** + * sensitive words list + */ + private static final List SENSITIVE_WORD_LIST; + + static { + try { + SENSITIVE_WORD_LIST = FileUtil.readLines("classpath:words.txt"); + } catch (IOException e) { + throw new CustomException(e); + } + } + + private SensitiveWordsUtil() { + + } + + /** + * check sensitive words + * 判断给定的字符串是否包含敏感词 + * + * @param word word + * @return return + */ + public static boolean containsSensitiveWords(String word) { + return SENSITIVE_WORD_LIST.contains(word); + } + +} diff --git a/src/main/java/com/starfish/core/util/StringUtil.java b/src/main/java/com/starfish/core/util/StringUtil.java index 5c230e54..3e66fb29 100644 --- a/src/main/java/com/starfish/core/util/StringUtil.java +++ b/src/main/java/com/starfish/core/util/StringUtil.java @@ -1,13 +1,18 @@ package com.starfish.core.util; import cn.hutool.core.text.CharSequenceUtil; +import com.google.common.base.Joiner; import com.google.common.base.Splitter; import com.google.common.base.Strings; +import com.google.common.collect.Lists; +import com.google.common.primitives.Ints; +import com.google.common.primitives.Longs; import org.springframework.util.StringUtils; import java.security.SecureRandom; import java.util.List; import java.util.Locale; +import java.util.Map; import java.util.stream.Collectors; /** @@ -349,7 +354,7 @@ public static String reserve(String string, String chars) { * @param value 指定字符串 * @return 结果 */ - public static String trimString(String string, String value) { + public static String trim(String string, String value) { String result = string; if (string.startsWith(value)) { result = string.substring(1); @@ -454,4 +459,30 @@ public static List splitToLong(String string, String separator) { return stringList.stream().map(Long::valueOf).collect(Collectors.toList()); } + public static String toString(Map params) { + return Joiner.on("&").useForNull("").withKeyValueSeparator("=").join(params); + } + + public static String toString(List list) { + return Joiner.on(",").useForNull("null").join(list); + } + + public static String toString(int[] array) { + List list = Ints.asList(array); + return Joiner.on(",").useForNull("null").join(list); + } + + public static String toString(long[] array) { + List list = Longs.asList(array); + return Joiner.on(",").useForNull("null").join(list); + } + + public static String toString(String[] array) { + return Joiner.on(",").useForNull("null").join(array); + } + + public static String toString(Object[] array) { + return Joiner.on(",").useForNull("null").join(array); + } + } diff --git a/src/main/java/com/starfish/core/util/WebUtil.java b/src/main/java/com/starfish/core/util/WebUtil.java index 3283ff08..69d6b857 100644 --- a/src/main/java/com/starfish/core/util/WebUtil.java +++ b/src/main/java/com/starfish/core/util/WebUtil.java @@ -13,7 +13,7 @@ import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; -import org.springframework.lang.Nullable; +import org.jspecify.annotations.Nullable; import org.springframework.util.StreamUtils; import org.springframework.web.client.RestTemplate; import org.springframework.web.util.HtmlUtils; @@ -43,16 +43,6 @@ @Slf4j public class WebUtil extends HtmlUtils { - /** - * 淘宝查询IP地址接口 - */ - private static final String TAOBAO_INTERFACE_URL = "https://ip.taobao.com/outGetIpInfo?accessKey=alibaba-inc"; - - /** - * 新浪查询IP地址接口 - */ - private static final String SINA_INTERFACE_URL = "https://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json"; - public static final String HTTP_URL_PREFIX = "http"; public static final String HTTPS_URL_PREFIX = "https"; @@ -330,7 +320,7 @@ public static void write(HttpServletResponse response, Integer code, String mess * @param request request * @return the ip */ - public static String getInternetProtocolAddress(HttpServletRequest request) { + public static String getRequestIp(HttpServletRequest request) { String ip = ""; String[] names = new String[]{"X-Real-IP", "X-Forwarded-For", "Proxy-Client-IP", "WL-Proxy-Client-IP", "HTTP_CLIENT_IP", "HTTP_X_FORWARDED_FOR"}; for (String string : names) { @@ -363,90 +353,6 @@ private static boolean isEmptyOrUnknown(String ip) { return ip == null || ip.isEmpty() || "unknown".equalsIgnoreCase(ip); } - /** - * get the location,use tao bao interface default - * - * @param ip ip - * @return the location - */ - public static String getAddress(String ip) { - String result; - try { - //call remote interface - Map params = Map.of("ip", ip); - ResponseEntity responseEntity = RestTemplatePlus.form(TAOBAO_INTERFACE_URL, HttpMethod.GET, null, params, null, String.class); - String json = responseEntity.getBody(); - GetIpAddressResult getIpAddressResult = JsonUtil.toObject(json, GetIpAddressResult.class); - GetIpAddressData data = getIpAddressResult.getData(); - - //return - return data.getCountry() + " " + data.getRegion() + " " + data.getCity(); - } catch (Exception e) { - result = "未知"; - return result; - } - } - - @Data - static class GetIpAddressResult implements Serializable { - - private Integer code; - - private String msg; - - private GetIpAddressData data; - - } - - @Data - static class GetIpAddressData implements Serializable { - - private String area; - - private String country; - - @JsonProperty("isp_id") - private String ispId; - - private String queryIp; - - private String city; - - private String ip; - - private String isp; - - private String county; - - @JsonProperty("region_id") - private String regionId; - - @JsonProperty("area_id") - private String areaId; - - @JsonProperty("county_id") - private String countyId; - - private String region; - - @JsonProperty("country_id") - private String countryId; - - @JsonProperty("city_id") - private String cityId; - - } - - /** - * get the location - * - * @param request request - * @return the location - */ - public static String getAddress(HttpServletRequest request) { - return getAddress(WebUtil.getInternetProtocolAddress(request)); - } - /** * 支持跨域 * @@ -520,10 +426,10 @@ public static String getBody(HttpServletRequest request) { * 下载远程文件 * * @param url 请求的url - * @param dest 目标文件或目录,当为目录时,取URL中的文件名,取不到使用编码后的URL做为文件名 + * @param target 目标文件或目录,当为目录时,取URL中的文件名,取不到使用编码后的URL做为文件名 */ - public static void downloadFile(String url, String dest) { - HttpUtil.downloadFile(url, cn.hutool.core.io.FileUtil.file(dest)); + public static void downloadFile(String url, String target) { + HttpUtil.downloadFile(url, cn.hutool.core.io.FileUtil.file(target)); } } diff --git a/src/main/java/com/starfish/core/web/AliveAutoConfiguration.java b/src/main/java/com/starfish/core/web/AliveAutoConfiguration.java index a015518f..1678f3d5 100644 --- a/src/main/java/com/starfish/core/web/AliveAutoConfiguration.java +++ b/src/main/java/com/starfish/core/web/AliveAutoConfiguration.java @@ -2,6 +2,7 @@ import com.starfish.core.controller.AliveController; import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Bean; /** @@ -12,6 +13,7 @@ * @since 2022-07-03 */ @AutoConfiguration +@ConditionalOnProperty(prefix = "starfish.alive", name = "enabled", havingValue = "true", matchIfMissing = true) public class AliveAutoConfiguration { @Bean diff --git a/src/main/java/com/starfish/core/web/ElapsedTimeAutoConfiguration.java b/src/main/java/com/starfish/core/web/ElapsedTimeAutoConfiguration.java index e3d490c6..af7901ca 100644 --- a/src/main/java/com/starfish/core/web/ElapsedTimeAutoConfiguration.java +++ b/src/main/java/com/starfish/core/web/ElapsedTimeAutoConfiguration.java @@ -13,7 +13,7 @@ * @since 2022-07-04 */ @AutoConfiguration -@ConditionalOnProperty(value = {"application.elapsed-time.enabled"}, matchIfMissing = true) +@ConditionalOnProperty(value = {"starfish.elapsed-time.enabled"}, havingValue = "true", matchIfMissing = false) @EnableConfigurationProperties({ElapsedTimeProperties.class}) public class ElapsedTimeAutoConfiguration { diff --git a/src/main/java/com/starfish/core/web/ElapsedTimeInterceptor.java b/src/main/java/com/starfish/core/web/ElapsedTimeInterceptor.java index efd09025..27cad18e 100644 --- a/src/main/java/com/starfish/core/web/ElapsedTimeInterceptor.java +++ b/src/main/java/com/starfish/core/web/ElapsedTimeInterceptor.java @@ -23,21 +23,23 @@ public class ElapsedTimeInterceptor implements HandlerInterceptor, Ordered { /** * spend time header name */ - public static final String SPEND_TIME_HEADER_NAME = "spend_time"; + public static final String SPEND_TIME_HEADER_NAME = "starfish_spend_time"; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception { long startTime = System.currentTimeMillis(); - request.setAttribute(Constant.REQUEST_START_TIME, startTime); +// request.setAttribute(Constant.REQUEST_START_TIME, startTime); + response.setHeader(Constant.REQUEST_START_TIME, String.valueOf(startTime)); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object o, ModelAndView modelAndView) throws Exception { long endTime = System.currentTimeMillis(); - long spendTime = endTime - ((Long) request.getAttribute(Constant.REQUEST_START_TIME)); - log.info("request url is {},spend time is {}", request.getRequestURL(), spendTime); + long spendTime = endTime - Long.parseLong(request.getHeader(Constant.REQUEST_START_TIME)); + response.setHeader(Constant.REQUEST_END_TIME, String.valueOf(endTime)); response.setHeader(SPEND_TIME_HEADER_NAME, String.valueOf(spendTime)); + log.info("request url is {},spend time is {}", request.getRequestURL(), spendTime); } @Override diff --git a/src/main/java/com/starfish/core/web/ElapsedTimeProperties.java b/src/main/java/com/starfish/core/web/ElapsedTimeProperties.java index 9065dcab..f5a2a29d 100644 --- a/src/main/java/com/starfish/core/web/ElapsedTimeProperties.java +++ b/src/main/java/com/starfish/core/web/ElapsedTimeProperties.java @@ -11,7 +11,7 @@ * @since 2022-07-04 */ @Data -@ConfigurationProperties(prefix = "application.elapsed-time") +@ConfigurationProperties(prefix = "starfish.elapsed-time") public class ElapsedTimeProperties { /** diff --git a/src/main/java/com/starfish/core/web/RequestLogAutoConfiguration.java b/src/main/java/com/starfish/core/web/RequestLogAutoConfiguration.java index d5894cee..609bfc7f 100644 --- a/src/main/java/com/starfish/core/web/RequestLogAutoConfiguration.java +++ b/src/main/java/com/starfish/core/web/RequestLogAutoConfiguration.java @@ -14,7 +14,7 @@ * @since 2022-07-04 */ @AutoConfiguration -@ConditionalOnProperty(value = {"application.request-log.enabled"}, matchIfMissing = true) +@ConditionalOnProperty(value = {"starfish.request-log.enabled"}, havingValue = "true", matchIfMissing = false) @EnableConfigurationProperties({RequestLogProperties.class}) public class RequestLogAutoConfiguration { diff --git a/src/main/java/com/starfish/core/web/RequestLogProperties.java b/src/main/java/com/starfish/core/web/RequestLogProperties.java index aecff8c5..474f725d 100644 --- a/src/main/java/com/starfish/core/web/RequestLogProperties.java +++ b/src/main/java/com/starfish/core/web/RequestLogProperties.java @@ -11,7 +11,7 @@ * @since 2024-08-23 */ @Data -@ConfigurationProperties(prefix = "application.request-log") +@ConfigurationProperties(prefix = "starfish.request-log") public class RequestLogProperties { /** diff --git a/src/main/java/com/starfish/core/web/ResponseWrapperAutoConfiguration.java b/src/main/java/com/starfish/core/web/ResponseWrapperAutoConfiguration.java index fcca0bfb..15fe0a40 100644 --- a/src/main/java/com/starfish/core/web/ResponseWrapperAutoConfiguration.java +++ b/src/main/java/com/starfish/core/web/ResponseWrapperAutoConfiguration.java @@ -15,7 +15,7 @@ */ @AutoConfiguration @EnableConfigurationProperties(ResponseWrapperProperties.class) -@ConditionalOnProperty(prefix = "application.web.response-wrapper", name = "enabled", havingValue = "true") +@ConditionalOnProperty(value = {"starfish.response-wrapper.enabled"}, havingValue = "true", matchIfMissing = false) public class ResponseWrapperAutoConfiguration { /** diff --git a/src/main/java/com/starfish/core/web/ResponseWrapperProperties.java b/src/main/java/com/starfish/core/web/ResponseWrapperProperties.java index 41178b9a..89ae1681 100644 --- a/src/main/java/com/starfish/core/web/ResponseWrapperProperties.java +++ b/src/main/java/com/starfish/core/web/ResponseWrapperProperties.java @@ -11,7 +11,7 @@ * @since 2021-06-08 */ @Data -@ConfigurationProperties(prefix = "application.web.response-wrapper") +@ConfigurationProperties(prefix = "starfish.response-wrapper") public class ResponseWrapperProperties { /** diff --git a/src/main/java/com/starfish/example/ApplicationListenerExample.java b/src/main/java/com/starfish/experiment/ApplicationListenerExample.java similarity index 99% rename from src/main/java/com/starfish/example/ApplicationListenerExample.java rename to src/main/java/com/starfish/experiment/ApplicationListenerExample.java index efe03ce1..fe45fde5 100644 --- a/src/main/java/com/starfish/example/ApplicationListenerExample.java +++ b/src/main/java/com/starfish/experiment/ApplicationListenerExample.java @@ -1,4 +1,4 @@ -package com.starfish.example; +package com.starfish.experiment; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeansException; diff --git a/src/main/java/com/starfish/example/ApplicationRunnerExample.java b/src/main/java/com/starfish/experiment/ApplicationRunnerExample.java similarity index 94% rename from src/main/java/com/starfish/example/ApplicationRunnerExample.java rename to src/main/java/com/starfish/experiment/ApplicationRunnerExample.java index 65dfa4d2..cc7cf7e0 100644 --- a/src/main/java/com/starfish/example/ApplicationRunnerExample.java +++ b/src/main/java/com/starfish/experiment/ApplicationRunnerExample.java @@ -1,4 +1,4 @@ -package com.starfish.example; +package com.starfish.experiment; import lombok.extern.slf4j.Slf4j; import org.springframework.boot.ApplicationArguments; diff --git a/src/main/java/com/starfish/example/LogbackIpClassicConverter.java b/src/main/java/com/starfish/experiment/LogbackIpClassicConverter.java similarity index 95% rename from src/main/java/com/starfish/example/LogbackIpClassicConverter.java rename to src/main/java/com/starfish/experiment/LogbackIpClassicConverter.java index 7fc36651..7ed15f36 100644 --- a/src/main/java/com/starfish/example/LogbackIpClassicConverter.java +++ b/src/main/java/com/starfish/experiment/LogbackIpClassicConverter.java @@ -1,4 +1,4 @@ -package com.starfish.example; +package com.starfish.experiment; import ch.qos.logback.classic.pattern.ClassicConverter; import ch.qos.logback.classic.spi.ILoggingEvent; diff --git a/src/main/java/com/starfish/incubator/PropertiesSort.java b/src/main/java/com/starfish/experiment/PropertiesSort.java similarity index 91% rename from src/main/java/com/starfish/incubator/PropertiesSort.java rename to src/main/java/com/starfish/experiment/PropertiesSort.java index 63965107..87e91abb 100644 --- a/src/main/java/com/starfish/incubator/PropertiesSort.java +++ b/src/main/java/com/starfish/experiment/PropertiesSort.java @@ -1,4 +1,4 @@ -package com.starfish.incubator; +package com.starfish.experiment; import com.starfish.core.util.FileUtil; import lombok.extern.slf4j.Slf4j; @@ -30,7 +30,7 @@ public static void sort(String filePath) throws IOException { List lines = FileUtil.readLines(filePath); // 删除空行和注释 - lines.removeIf(line -> line.isEmpty() || line.isBlank() || line.startsWith("#")); + lines.removeIf(line -> line.isBlank() || line.startsWith("#")); // 排序 Collections.sort(lines); diff --git a/src/main/java/com/starfish/experiment/PropertiesSorter.java b/src/main/java/com/starfish/experiment/PropertiesSorter.java new file mode 100644 index 00000000..368e311e --- /dev/null +++ b/src/main/java/com/starfish/experiment/PropertiesSorter.java @@ -0,0 +1,197 @@ +package com.starfish.experiment; + +import lombok.extern.slf4j.Slf4j; + +import java.io.*; +import java.nio.charset.StandardCharsets; +import java.util.*; + +/** + * Properties文件排序工具:处理空行、重复key、注释关联,按key字母序重写 + * + * @author sunkolin + * @version 1.0.0 + * @since 2025-12-17 + */ +@Slf4j +public class PropertiesSorter { + + // 存储单个键值对及关联的注释 + static class PropertyEntry { + // 关联的注释行(按原顺序) + List comments = new ArrayList<>(); + // 键值对的值 + String value; + } + + /** + * 核心方法:执行Properties文件排序 + * + * @param inputPath 输入文件路径 + * @param outputPath 输出文件路径 + * @throws IOException 文件操作异常 + */ + public static void sortProperties(String inputPath, String outputPath) throws IOException { + File inputFile = new File(inputPath); + if (!inputFile.exists()) { + throw new FileNotFoundException("输入文件不存在:" + inputPath); + } + + // 读取并解析文件 + Map entryMap = readProperties(inputFile); + + // 写入排序后的文件 + File outputFile = new File(outputPath); + if (!outputFile.getParentFile().exists()) { + outputFile.getParentFile().mkdirs(); + } + writeSortedProperties(outputFile, entryMap); + + log.info("排序完成!输出文件:" + outputFile.getAbsolutePath()); + } + + /** + * 读取Properties文件,解析注释、键值对,处理空行 + * + * @param inputFile 输入文件路径 + * @return 键 -> 注释+值的映射 + * @throws IOException 读取文件异常 + */ + private static Map readProperties(File inputFile) throws IOException { + Map entryMap = new HashMap<>(); + // 暂存当前未关联的注释行 + List pendingComments = new ArrayList<>(); + + try (BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(inputFile), StandardCharsets.UTF_8))) { + String line; + while ((line = reader.readLine()) != null) { + String trimmedLine = line.trim(); + + // 处理空行:trim后为空则跳过 + if (trimmedLine.isEmpty()) { + continue; + } + + // 处理注释行(#开头,兼容行首有空格的情况) + if (trimmedLine.startsWith("#") || trimmedLine.startsWith("!")) { + pendingComments.add(line); + continue; + } + + // 处理键值行:解析key和value + int separatorIndex = findSeparatorIndex(line); + if (separatorIndex == -1) { + // 无分隔符的行(纯key,无值),按key=空处理 + String key = line.trim(); + PropertyEntry entry = new PropertyEntry(); + entry.comments = new ArrayList<>(pendingComments); + entry.value = ""; + entryMap.put(key, entry); + } else { + // 分割key和value(保留value中的分隔符) + String key = line.substring(0, separatorIndex).trim(); + String value = line.substring(separatorIndex + 1).trim(); + // 处理value中的转义(简单处理,如需完整可参考Properties源码) + value = unescapeValue(value); + + PropertyEntry entry = new PropertyEntry(); + entry.comments = new ArrayList<>(pendingComments); + entry.value = value; + // 重复key覆盖 + entryMap.put(key, entry); + } + + // 关联注释后清空暂存 + pendingComments.clear(); + } + } + + return entryMap; + } + + /** + * 查找键值行的分隔符位置(=、:、空格/制表符) + * 参考Properties源码的分隔符解析逻辑 + * + * @param line 键值行 + * @return 分隔符索引,无则返回-1 + */ + private static int findSeparatorIndex(String line) { + int len = line.length(); + int index = 0; + + // 跳过键前面的空白字符 + while (index < len && Character.isWhitespace(line.charAt(index))) { + index++; + } + + // 遍历找分隔符(=、:、空格/制表符) + while (index < len) { + char c = line.charAt(index); + if (c == '=' || c == ':') { + return index; + } else if (Character.isWhitespace(c)) { + return index; + } + index++; + } + + // 无分隔符(纯key) + return -1; + } + + /** + * 简单处理value的转义字符(如需完整可扩展) + * + * @param value 原始value + * @return 处理后的value + */ + private static String unescapeValue(String value) { + if (value == null || value.isEmpty()) { + return value; + } + // 处理常见转义:\=、\:、\n等(简化版) + return value.replace("\\=", "=").replace("\\:", ":").replace("\\n", "\n").replace("\\r", "\r").replace("\\t", "\t"); + } + + /** + * 将排序后的键值对写入目标文件 + * + * @param outputFile 输出文件路径 + * @param entryMap 键->注释+值的映射 + * @throws IOException 写入文件异常 + */ + private static void writeSortedProperties(File outputFile, Map entryMap) throws IOException { + // 按字母顺序排序key + List sortedKeys = new ArrayList<>(entryMap.keySet()); + Collections.sort(sortedKeys); + + try (BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outputFile), StandardCharsets.UTF_8))) { + for (String key : sortedKeys) { + PropertyEntry entry = entryMap.get(key); + + // 先写关联的注释行 + for (String comment : entry.comments) { + writer.write(comment); + writer.newLine(); + } + + // 写键值对(格式:key=value) + writer.write(key + "=" + entry.value); + writer.newLine(); + } + } + } + + public static void main(String[] args) { + // 示例:替换为实际的输入/输出文件路径 + String inputPath = "/Users/sunlin/workspace/starfish/config.properties"; + String outputPath = "/Users/sunlin/workspace/starfish/config_sorted.properties"; + + try { + sortProperties(inputPath, outputPath); + } catch (IOException e) { + log.error("处理失败:" + e.getMessage(), e); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/starfish/example/RankList.java b/src/main/java/com/starfish/experiment/RankList.java similarity index 95% rename from src/main/java/com/starfish/example/RankList.java rename to src/main/java/com/starfish/experiment/RankList.java index 2603573a..41bf4a16 100644 --- a/src/main/java/com/starfish/example/RankList.java +++ b/src/main/java/com/starfish/experiment/RankList.java @@ -1,4 +1,4 @@ -package com.starfish.example; +package com.starfish.experiment; import java.util.Comparator; import java.util.List; diff --git a/src/main/java/com/starfish/example/StackTraceInterceptor.java b/src/main/java/com/starfish/experiment/StackTraceInterceptor.java similarity index 97% rename from src/main/java/com/starfish/example/StackTraceInterceptor.java rename to src/main/java/com/starfish/experiment/StackTraceInterceptor.java index 511436fe..d490053f 100644 --- a/src/main/java/com/starfish/example/StackTraceInterceptor.java +++ b/src/main/java/com/starfish/experiment/StackTraceInterceptor.java @@ -1,4 +1,4 @@ -package com.starfish.example; +package com.starfish.experiment; import com.google.common.base.Joiner; import lombok.extern.slf4j.Slf4j; diff --git a/src/main/java/com/starfish/example/StopWatchExample.java b/src/main/java/com/starfish/experiment/StopWatchExample.java similarity index 86% rename from src/main/java/com/starfish/example/StopWatchExample.java rename to src/main/java/com/starfish/experiment/StopWatchExample.java index 24c77402..08a01d64 100644 --- a/src/main/java/com/starfish/example/StopWatchExample.java +++ b/src/main/java/com/starfish/experiment/StopWatchExample.java @@ -1,4 +1,4 @@ -package com.starfish.example; +package com.starfish.experiment; /** * StopWatchExample diff --git a/src/main/java/com/starfish/incubator/datasource/DataSourceAutoConfigurationImportFilter.java b/src/main/java/com/starfish/experiment/datasource/DataSourceAutoConfigurationImportFilter.java similarity index 85% rename from src/main/java/com/starfish/incubator/datasource/DataSourceAutoConfigurationImportFilter.java rename to src/main/java/com/starfish/experiment/datasource/DataSourceAutoConfigurationImportFilter.java index b55e668f..16741ff2 100644 --- a/src/main/java/com/starfish/incubator/datasource/DataSourceAutoConfigurationImportFilter.java +++ b/src/main/java/com/starfish/experiment/datasource/DataSourceAutoConfigurationImportFilter.java @@ -1,4 +1,4 @@ -package com.starfish.incubator.datasource; +package com.starfish.experiment.datasource; import com.google.common.collect.Sets; import com.starfish.core.context.PropertiesContext; @@ -35,9 +35,9 @@ public boolean[] match(String[] classNames, AutoConfigurationMetadata autoConfig for (int i = 0; i < classNames.length; i++) { String className = classNames[i]; // 默认移除数据源相关的类 - String dataSourceAutoConfigurationProperty = PropertiesContext.get("DataSourceAutoConfiguration"); - // 未配置EnableDataSource注解或value设置未true都通过 - if (dataSourceAutoConfigurationProperty == null || "true".equalsIgnoreCase(dataSourceAutoConfigurationProperty)) { + String dataSourceEnabled = PropertiesContext.get("starfish.dataSource.enabled"); + // 未配置 EnableDataSource 注解或value设置为true都通过 + if (dataSourceEnabled == null || "true".equalsIgnoreCase(dataSourceEnabled)) { matches[i] = true; } else { matches[i] = !EXCLUDE_CLASSES.contains(className); diff --git a/src/main/java/com/starfish/incubator/datasource/DataSourceImportSelector.java b/src/main/java/com/starfish/experiment/datasource/DataSourceImportSelector.java similarity index 86% rename from src/main/java/com/starfish/incubator/datasource/DataSourceImportSelector.java rename to src/main/java/com/starfish/experiment/datasource/DataSourceImportSelector.java index 0c1c0766..a68a883a 100644 --- a/src/main/java/com/starfish/incubator/datasource/DataSourceImportSelector.java +++ b/src/main/java/com/starfish/experiment/datasource/DataSourceImportSelector.java @@ -1,4 +1,4 @@ -package com.starfish.incubator.datasource; +package com.starfish.experiment.datasource; import com.starfish.core.annotation.EnableDataSource; import com.starfish.core.context.PropertiesContext; @@ -21,13 +21,13 @@ public String[] selectImports(AnnotationMetadata importingClassMetadata) { Map attributes = importingClassMetadata.getAnnotationAttributes(EnableDataSource.class.getName()); Boolean enableDataSource = (Boolean) (attributes != null ? attributes.get("value") : null); if (enableDataSource == null || enableDataSource) { - PropertiesContext.set("DataSourceAutoConfiguration", "true"); + PropertiesContext.set("starfish.dataSource.enabled", "true"); return new String[]{ "org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration", "org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration" }; } else { - PropertiesContext.set("DataSourceAutoConfiguration", "false"); + PropertiesContext.set("starfish.dataSource.enabled", "false"); return new String[]{}; } } diff --git a/src/main/java/com/starfish/incubator/jwt/HeaderModel.java b/src/main/java/com/starfish/experiment/jwt/HeaderModel.java similarity index 89% rename from src/main/java/com/starfish/incubator/jwt/HeaderModel.java rename to src/main/java/com/starfish/experiment/jwt/HeaderModel.java index 9de259c7..0579e4aa 100644 --- a/src/main/java/com/starfish/incubator/jwt/HeaderModel.java +++ b/src/main/java/com/starfish/experiment/jwt/HeaderModel.java @@ -1,4 +1,4 @@ -package com.starfish.incubator.jwt; +package com.starfish.experiment.jwt; import lombok.Data; diff --git a/src/main/java/com/starfish/incubator/jwt/JsonWebTokenPlus.java b/src/main/java/com/starfish/experiment/jwt/JsonWebTokens.java similarity index 96% rename from src/main/java/com/starfish/incubator/jwt/JsonWebTokenPlus.java rename to src/main/java/com/starfish/experiment/jwt/JsonWebTokens.java index 76bda104..b46079f7 100644 --- a/src/main/java/com/starfish/incubator/jwt/JsonWebTokenPlus.java +++ b/src/main/java/com/starfish/experiment/jwt/JsonWebTokens.java @@ -1,4 +1,4 @@ -package com.starfish.incubator.jwt; +package com.starfish.experiment.jwt; import cn.hutool.core.bean.BeanUtil; import cn.hutool.json.JSONObject; @@ -8,7 +8,7 @@ import java.util.Map; /** - * JsonWebTokenPlus + * JsonWebToken * JWT是由三段信息构成的,将这三段信息文本用.链接一起就构成了Jwt字符串。 * 就像这样:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOjk5fQ.7DwG61h2GjZWA-sSUQA2jFVIenyOhz310rCUbCi09hY * 第一部分我们称它为头部(header),第二部分我们称其为载荷(payload, 类似于飞机上承载的物品),第三部分是签证(signature). @@ -17,14 +17,14 @@ * @version 1.0.0 * @since 2022-07-26 */ -public class JsonWebTokenPlus { +public class JsonWebTokens { private static final String KEY = "Ks#ZKmIUTEj3@dU2"; /** * constructor */ - private JsonWebTokenPlus() { + private JsonWebTokens() { } /** diff --git a/src/main/java/com/starfish/incubator/jwt/PayloadModel.java b/src/main/java/com/starfish/experiment/jwt/PayloadModel.java similarity index 95% rename from src/main/java/com/starfish/incubator/jwt/PayloadModel.java rename to src/main/java/com/starfish/experiment/jwt/PayloadModel.java index 2b81f8c4..a39397dd 100644 --- a/src/main/java/com/starfish/incubator/jwt/PayloadModel.java +++ b/src/main/java/com/starfish/experiment/jwt/PayloadModel.java @@ -1,4 +1,4 @@ -package com.starfish.incubator.jwt; +package com.starfish.experiment.jwt; import lombok.Data; diff --git a/src/main/java/com/starfish/incubator/jwt/SignatureModel.java b/src/main/java/com/starfish/experiment/jwt/SignatureModel.java similarity index 87% rename from src/main/java/com/starfish/incubator/jwt/SignatureModel.java rename to src/main/java/com/starfish/experiment/jwt/SignatureModel.java index 9aaf4b26..057cb56f 100644 --- a/src/main/java/com/starfish/incubator/jwt/SignatureModel.java +++ b/src/main/java/com/starfish/experiment/jwt/SignatureModel.java @@ -1,4 +1,4 @@ -package com.starfish.incubator.jwt; +package com.starfish.experiment.jwt; import lombok.Data; diff --git a/src/main/java/com/starfish/incubator/jwt/Token.java b/src/main/java/com/starfish/experiment/jwt/Token.java similarity index 94% rename from src/main/java/com/starfish/incubator/jwt/Token.java rename to src/main/java/com/starfish/experiment/jwt/Token.java index 1a7b1a6a..1d8b64a5 100644 --- a/src/main/java/com/starfish/incubator/jwt/Token.java +++ b/src/main/java/com/starfish/experiment/jwt/Token.java @@ -1,4 +1,4 @@ -package com.starfish.incubator.jwt; +package com.starfish.experiment.jwt; import lombok.Data; diff --git a/src/main/java/com/starfish/example/leetcode/Main.java b/src/main/java/com/starfish/experiment/leetcode/Main.java similarity index 91% rename from src/main/java/com/starfish/example/leetcode/Main.java rename to src/main/java/com/starfish/experiment/leetcode/Main.java index 6c94a9f8..932d8414 100644 --- a/src/main/java/com/starfish/example/leetcode/Main.java +++ b/src/main/java/com/starfish/experiment/leetcode/Main.java @@ -1,4 +1,4 @@ -package com.starfish.example.leetcode; +package com.starfish.experiment.leetcode; import lombok.extern.slf4j.Slf4j; diff --git a/src/main/java/com/starfish/incubator/limiter/ClusterRateLimiter.java b/src/main/java/com/starfish/experiment/limiter/ClusterRateLimiter.java similarity index 91% rename from src/main/java/com/starfish/incubator/limiter/ClusterRateLimiter.java rename to src/main/java/com/starfish/experiment/limiter/ClusterRateLimiter.java index eb307a91..9515d64d 100644 --- a/src/main/java/com/starfish/incubator/limiter/ClusterRateLimiter.java +++ b/src/main/java/com/starfish/experiment/limiter/ClusterRateLimiter.java @@ -1,4 +1,4 @@ -package com.starfish.incubator.limiter; +package com.starfish.experiment.limiter; /** * 集群限流器 diff --git a/src/main/java/com/starfish/incubator/limiter/CounterRateLimiter.java b/src/main/java/com/starfish/experiment/limiter/CounterRateLimiter.java similarity index 97% rename from src/main/java/com/starfish/incubator/limiter/CounterRateLimiter.java rename to src/main/java/com/starfish/experiment/limiter/CounterRateLimiter.java index 4a253873..3aaa14aa 100644 --- a/src/main/java/com/starfish/incubator/limiter/CounterRateLimiter.java +++ b/src/main/java/com/starfish/experiment/limiter/CounterRateLimiter.java @@ -1,4 +1,4 @@ -package com.starfish.incubator.limiter; +package com.starfish.experiment.limiter; import cn.hutool.core.date.DateUtil; diff --git a/src/main/java/com/starfish/incubator/limiter/RateLimiter.java b/src/main/java/com/starfish/experiment/limiter/RateLimiter.java similarity index 89% rename from src/main/java/com/starfish/incubator/limiter/RateLimiter.java rename to src/main/java/com/starfish/experiment/limiter/RateLimiter.java index 718da406..b3b70478 100644 --- a/src/main/java/com/starfish/incubator/limiter/RateLimiter.java +++ b/src/main/java/com/starfish/experiment/limiter/RateLimiter.java @@ -1,4 +1,4 @@ -package com.starfish.incubator.limiter; +package com.starfish.experiment.limiter; /** * RateLimiter diff --git a/src/main/java/com/starfish/incubator/limiter/RollingWindowRateLimiter.java b/src/main/java/com/starfish/experiment/limiter/RollingWindowRateLimiter.java similarity index 93% rename from src/main/java/com/starfish/incubator/limiter/RollingWindowRateLimiter.java rename to src/main/java/com/starfish/experiment/limiter/RollingWindowRateLimiter.java index ee4e1d3e..d76c3b8d 100644 --- a/src/main/java/com/starfish/incubator/limiter/RollingWindowRateLimiter.java +++ b/src/main/java/com/starfish/experiment/limiter/RollingWindowRateLimiter.java @@ -1,6 +1,6 @@ -package com.starfish.incubator.limiter; +package com.starfish.experiment.limiter; -import com.starfish.core.SpringPlus; +import com.starfish.core.Springs; import lombok.extern.slf4j.Slf4j; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.core.ZSetOperations; @@ -34,7 +34,7 @@ public class RollingWindowRateLimiter implements RateLimiter { private final StringRedisTemplate stringRedisTemplate; public RollingWindowRateLimiter(String name, long permits) { - stringRedisTemplate = SpringPlus.getBean(StringRedisTemplate.class); + stringRedisTemplate = Springs.getBean(StringRedisTemplate.class); this.redisKey = "starfish:RateLimiter:" + name; this.permits = permits; } diff --git a/src/main/java/com/starfish/incubator/limiter/StandaloneRateLimiter.java b/src/main/java/com/starfish/experiment/limiter/StandaloneRateLimiter.java similarity index 94% rename from src/main/java/com/starfish/incubator/limiter/StandaloneRateLimiter.java rename to src/main/java/com/starfish/experiment/limiter/StandaloneRateLimiter.java index f5b2a456..f633b807 100644 --- a/src/main/java/com/starfish/incubator/limiter/StandaloneRateLimiter.java +++ b/src/main/java/com/starfish/experiment/limiter/StandaloneRateLimiter.java @@ -1,4 +1,4 @@ -package com.starfish.incubator.limiter; +package com.starfish.experiment.limiter; /** * 单机限流器 diff --git a/src/main/java/com/starfish/incubator/lock/Lock.java b/src/main/java/com/starfish/experiment/lock/Lock.java similarity index 79% rename from src/main/java/com/starfish/incubator/lock/Lock.java rename to src/main/java/com/starfish/experiment/lock/Lock.java index 44ba4e96..4e99a566 100644 --- a/src/main/java/com/starfish/incubator/lock/Lock.java +++ b/src/main/java/com/starfish/experiment/lock/Lock.java @@ -1,4 +1,4 @@ -package com.starfish.incubator.lock; +package com.starfish.experiment.lock; /** * Lock diff --git a/src/main/java/com/starfish/incubator/lock/RedisLock.java b/src/main/java/com/starfish/experiment/lock/RedisLock.java similarity index 93% rename from src/main/java/com/starfish/incubator/lock/RedisLock.java rename to src/main/java/com/starfish/experiment/lock/RedisLock.java index c655add8..43371e6a 100644 --- a/src/main/java/com/starfish/incubator/lock/RedisLock.java +++ b/src/main/java/com/starfish/experiment/lock/RedisLock.java @@ -1,6 +1,6 @@ -package com.starfish.incubator.lock; +package com.starfish.experiment.lock; -import com.starfish.core.SpringPlus; +import com.starfish.core.Springs; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.core.ValueOperations; import org.springframework.data.redis.core.script.RedisScript; @@ -47,7 +47,7 @@ public class RedisLock implements Lock, Closeable { private int expire; public RedisLock(String name, int expire) { - stringRedisTemplate = SpringPlus.getBean(StringRedisTemplate.class); + stringRedisTemplate = Springs.getBean(StringRedisTemplate.class); this.name = name; this.redisKey = "starfish:redisLock:" + name; this.expire = expire; diff --git a/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/src/main/resources/META-INF/additional-spring-configuration-metadata.json new file mode 100644 index 00000000..87aae8ce --- /dev/null +++ b/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -0,0 +1,79 @@ +{ + "properties": [ + { + "name": "starfish.datasource.enabed", + "type": "java.lang.String", + "description": "开启连接数据源." + }, + { + "name": "starfish.exception.enabled", + "type": "java.lang.Boolean", + "description": "开启统一异常处理.", + "defaultValue": "true", + "sourceType": "com.starfish.core.exception.ExceptionProperties" + }, + { + "name": "starfish.response-wrapper.enabled", + "type": "java.lang.Boolean", + "description": "开启结果封装.", + "defaultValue": "false", + "sourceType": "com.starfish.core.web.ResponseWrapperProperties" + }, + { + "name": "starfish.elapsed-time.enabled", + "type": "java.lang.Boolean", + "description": "开启请求耗时记录.", + "defaultValue": "true", + "sourceType": "com.starfish.core.web.ElapsedTimeProperties" + }, + { + "name": "starfish.trace.enabled", + "type": "java.lang.Boolean", + "description": "开启生成traceId.", + "defaultValue": "true", + "sourceType": "com.starfish.common.trace.TraceProperties" + }, + { + "name": "starfish.cache.enabled", + "type": "java.lang.Boolean", + "description": "开启缓存.", + "defaultValue": "true", + "sourceType": "com.starfish.common.cache.CacheProperties" + }, + { + "name": "starfish.cache.expire", + "type": "java.lang.Long", + "description": "缓存时间.", + "defaultValue": "true", + "sourceType": "com.starfish.common.cache.CacheProperties" + }, + { + "name": "starfish.cache.weakKeys", + "type": "java.lang.Boolean", + "description": ".", + "defaultValue": "false", + "sourceType": "com.starfish.common.cache.CacheProperties" + }, + { + "name": "starfish.cache.weakValues", + "type": "java.lang.Boolean", + "description": ".", + "defaultValue": "false", + "sourceType": "com.starfish.common.cache.CacheProperties" + }, + { + "name": "starfish.cache.softValues", + "type": "java.lang.Boolean", + "description": ".", + "defaultValue": "false", + "sourceType": "com.starfish.common.cache.CacheProperties" + }, + { + "name": "starfish.xxl.job.enabled", + "type": "java.lang.Boolean", + "description": "开启任务调度.", + "defaultValue": "false", + "sourceType": "com.starfish.common.cache.CacheProperties" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/META-INF/spring-configuration-metadata.json b/src/main/resources/META-INF/spring-configuration-metadata.json index d4f0fa5e..20a12847 100644 --- a/src/main/resources/META-INF/spring-configuration-metadata.json +++ b/src/main/resources/META-INF/spring-configuration-metadata.json @@ -4,70 +4,70 @@ "hints": [], "properties": [ { - "name": "application.exception.enabled", + "name": "starfish.exception.enabled", "type": "java.lang.Boolean", "description": "开启统一异常处理", "defaultValue": "true", "sourceType": "com.starfish.core.exception.ExceptionProperties" }, { - "name": "application.web.response-wrapper.enabled", + "name": "starfish.response-wrapper.enabled", "type": "java.lang.Boolean", "description": "开启结果封装", "defaultValue": "false", "sourceType": "com.starfish.core.web.ResponseWrapperProperties" }, { - "name": "application.elapsed-time.enabled", + "name": "starfish.elapsed-time.enabled", "type": "java.lang.Boolean", "description": "开启请求耗时记录", "defaultValue": "true", "sourceType": "com.starfish.core.web.ElapsedTimeProperties" }, { - "name": "application.trace.enabled", + "name": "starfish.trace.enabled", "type": "java.lang.Boolean", "description": "开启生成traceId", "defaultValue": "true", "sourceType": "com.starfish.common.trace.TraceProperties" }, { - "name": "application.cache.enabled", + "name": "starfish.cache.enabled", "type": "java.lang.Boolean", "description": "开启缓存", "defaultValue": "true", "sourceType": "com.starfish.common.cache.CacheProperties" }, { - "name": "application.cache.expire", + "name": "starfish.cache.expire", "type": "java.lang.Long", "description": "缓存时间", "defaultValue": "true", "sourceType": "com.starfish.common.cache.CacheProperties" }, { - "name": "application.cache.weakKeys", + "name": "starfish.cache.weakKeys", "type": "java.lang.Boolean", "description": "", "defaultValue": "false", "sourceType": "com.starfish.common.cache.CacheProperties" }, { - "name": "application.cache.weakValues", + "name": "starfish.cache.weakValues", "type": "java.lang.Boolean", "description": "", "defaultValue": "false", "sourceType": "com.starfish.common.cache.CacheProperties" }, { - "name": "application.cache.softValues", + "name": "starfish.cache.softValues", "type": "java.lang.Boolean", "description": "", "defaultValue": "false", "sourceType": "com.starfish.common.cache.CacheProperties" }, { - "name": "xxl.job.enabled", + "name": "starfish.xxl.job.enabled", "type": "java.lang.Boolean", "description": "开启任务调度", "defaultValue": "false", diff --git a/src/main/resources/META-INF/spring.factories b/src/main/resources/META-INF/spring.factories index 54b4f679..2915df29 100644 --- a/src/main/resources/META-INF/spring.factories +++ b/src/main/resources/META-INF/spring.factories @@ -1,12 +1,2 @@ -#org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ -# com.starfish.core.SpringPlus,\ -# com.starfish.core.controller.AliveController,\ -# com.starfish.core.web.WebAutoConfiguration,\ -# com.starfish.core.web.ResponseWrapperAutoConfiguration,\ -# com.starfish.core.exception.ExceptionAutoConfiguration,\ -# com.starfish.common.trace.TraceInterceptor -# com.starfish.common.cache.CaffeineCacheAutoConfiguration,\ -# com.starfish.common.task.XxlJobAutoConfiguration,\ -# com.starfish.common.swagger.SwaggerAutoConfiguration org.springframework.boot.env.EnvironmentPostProcessor=com.starfish.core.CustomEnvironmentPostProcessor -org.springframework.boot.autoconfigure.AutoConfigurationImportFilter=com.starfish.incubator.datasource.DataSourceAutoConfigurationImportFilter \ No newline at end of file +#org.springframework.boot.autoconfigure.AutoConfigurationImportFilter=com.starfish.experiment.datasource.DataSourceAutoConfigurationImportFilter \ No newline at end of file diff --git a/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.exclude b/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.exclude new file mode 100644 index 00000000..c8086ef4 --- /dev/null +++ b/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.exclude @@ -0,0 +1,3 @@ +org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration +org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration +org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration \ No newline at end of file diff --git a/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index c02233c8..2a5fd9ff 100644 --- a/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -1,12 +1,14 @@ -com.starfish.core.SpringPlus -com.starfish.core.CustomEnvironmentPostProcessor -com.starfish.core.exception.ExceptionAutoConfiguration +com.starfish.core.SpringsAutoConfiguration + com.starfish.core.web.AliveAutoConfiguration -com.starfish.core.web.WebAutoConfiguration -com.starfish.core.web.ResponseWrapperAutoConfiguration -com.starfish.core.web.ElapsedTimeAutoConfiguration com.starfish.common.trace.TraceAutoConfiguration -com.starfish.common.swagger.SpringDocAutoConfiguration +com.starfish.core.exception.ExceptionAutoConfiguration + +com.starfish.core.datasource.StarfishDataSourceAutoConfiguration com.starfish.common.cache.CacheAutoConfiguration -com.starfish.common.task.TaskAutoConfiguration -com.starfish.common.task.RequestLogAutoConfiguration \ No newline at end of file +com.starfish.common.task.XxlJobAutoConfiguration +com.starfish.common.swagger.Swagger3AutoConfiguration + +com.starfish.core.web.RequestLogAutoConfiguration +com.starfish.core.web.ResponseWrapperAutoConfiguration +com.starfish.core.web.ElapsedTimeAutoConfiguration \ No newline at end of file diff --git a/src/main/resources/application-starfish.properties b/src/main/resources/application-starfish.properties index 62132c6f..e540db7a 100644 --- a/src/main/resources/application-starfish.properties +++ b/src/main/resources/application-starfish.properties @@ -1,49 +1,41 @@ -spring.application.name=starfish -server.port=8080 - -# mysql +# datasource +starfish.datasource.enabed=true +#spring.autoconfigure.exclude=org.springframework.boot.jdbc.autoconfigure.DataSourceAutoConfiguration # cache -application.cache.enabled=true -application.cache.expire=3600 - +starfish.cache.enabled=true +starfish.cache.expire=3600 +# application config +starfish.exception.enabled=true +starfish.elapsed-time.enabled=false +# executor +starfish.executor.corePoolSize=10 +starfish.executor.enabled=false +starfish.executor.keepAliveSeconds=60 +starfish.executor.maxPoolSize=10 +starfish.executor.queueCapacity=2147483647 +starfish.executor.rejectedExecutionHandler=java.util.concurrent.ThreadPoolExecutor$AbortPolicy +starfish.response-wrapper.enabled=false +server.port=8080 +spring.application.name=starfish +# pool +spring.task.execution.pool.allow-core-thread-timeout=true +spring.task.execution.pool.core-size=8 +spring.task.execution.pool.keep-alive=60s +spring.task.execution.pool.max-size=8 +spring.task.execution.pool.queue-capacity=2147483647 +spring.task.execution.shutdown.await-termination=true +spring.task.execution.shutdown.await-termination-period= +spring.task.execution.thread-name-prefix=task- # redis - # swagger springdoc.api-docs.enabled=true springdoc.api-docs.path=/v3/api-docs -springdoc.packages-to-scan=com.starfish.core.controller springdoc.group-configs[0].group=public -springdoc.group-configs[0].paths-to-match[0]=/api/** springdoc.group-configs[0].paths-to-exclude[0]=/api/admin/** +springdoc.group-configs[0].paths-to-match[0]=/api/** springdoc.group-configs[1].group=admin springdoc.group-configs[1].paths-to-match[0]=/api/admin/** +springdoc.packages-to-scan=com.starfish.core.controller springdoc.swagger-ui.enabled=true -springdoc.swagger-ui.path=/swagger-ui.html - -# pool -spring.task.execution.thread-name-prefix=task- -spring.task.execution.pool.allow-core-thread-timeout=true -spring.task.execution.pool.core-size=8 -spring.task.execution.pool.max-size=8 -spring.task.execution.pool.queue-capacity=2147483647 -spring.task.execution.pool.keep-alive=60s -spring.task.execution.shutdown.await-termination=true -spring.task.execution.shutdown.await-termination-period= - -# application config -application.exception.enabled=true -application.elapsed-time.enabled=false -application.web.response-wrapper.enabled=false - -# executor,deprecated -application.executor.enabled=false -application.executor.corePoolSize=10 -application.executor.maxPoolSize=10 -application.executor.queueCapacity=2147483647 -application.executor.keepAliveSeconds=60 -application.executor.rejectedExecutionHandler=java.util.concurrent.ThreadPoolExecutor$AbortPolicy - - - - +springdoc.swagger-ui.path=/swagger-ui.html \ No newline at end of file diff --git a/src/test/java/com/starfish/common/permission/AbstractPermissionInterceptorTest.java b/src/test/java/com/starfish/common/permission/AbstractPermissionInterceptorTest.java index 7f0ed9a0..d20d3263 100644 --- a/src/test/java/com/starfish/common/permission/AbstractPermissionInterceptorTest.java +++ b/src/test/java/com/starfish/common/permission/AbstractPermissionInterceptorTest.java @@ -1,5 +1,6 @@ package com.starfish.common.permission; +import com.starfish.core.interceptor.permission.AbstractPermissionInterceptor; import lombok.extern.slf4j.Slf4j; import jakarta.servlet.http.HttpServletRequest; diff --git a/src/test/java/com/starfish/core/client/WeatherClientTest.java b/src/test/java/com/starfish/core/client/WeatherClientTest.java new file mode 100644 index 00000000..6d2c8163 --- /dev/null +++ b/src/test/java/com/starfish/core/client/WeatherClientTest.java @@ -0,0 +1,30 @@ +package com.starfish.core.client; + +import com.starfish.core.client.impl.WeatherClientImpl; +import com.starfish.core.client.result.WeatherModel; +import com.starfish.core.util.JsonUtil; +import lombok.extern.slf4j.Slf4j; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; + +/** + * WeatherClientTest + * + * @author sunkolin + * @version 1.0.0 + * @since 2021-10-13 + */ +@Slf4j +class WeatherClientTest { + + @Disabled("Network does not work") + @Test + void getWeatherTest() { + String cityName = "北京市"; + WeatherModel result = new WeatherClientImpl().getWeather(cityName); + log.info(JsonUtil.toJson(result)); + Assertions.assertNotNull(result); + } + +} diff --git a/src/test/java/com/starfish/core/util/BusinessUtilTest.java b/src/test/java/com/starfish/core/util/BusinessUtilTest.java deleted file mode 100644 index 4a7af6a6..00000000 --- a/src/test/java/com/starfish/core/util/BusinessUtilTest.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.starfish.core.util; - -import com.starfish.core.model.weather.WeatherModel; -import lombok.extern.slf4j.Slf4j; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; - -/** - * BusinessUtilTest - * - * @author sunkolin - * @version 1.0.0 - * @since 2021-10-13 - */ -@Slf4j -class BusinessUtilTest { - - @Test - void isMobileTest() { - boolean result1 = BusinessUtil.isMobile("110"); - Assertions.assertFalse(result1); - - boolean result2 = BusinessUtil.isMobile("18610815188"); - Assertions.assertTrue(result2); - - Assertions.assertTrue(BusinessUtil.isMobile("18610815188")); - Assertions.assertTrue(BusinessUtil.isMobile("13496215263")); - Assertions.assertTrue(BusinessUtil.isMobile("13912345678")); - } - - @Test - void getBirthdayTest() { - String result = BusinessUtil.getBirthByIdCard("513436200010136655"); - Assertions.assertEquals("2000-10-13", result); - } - - @Test - void validateIdCardTest() { - boolean result = BusinessUtil.validateIdCard("513436200010136655"); - Assertions.assertTrue(result); - } - - @Test - void containsSensitiveWordsTest() { - String word = "考前答案"; - boolean result = BusinessUtil.containsSensitiveWords(word); - Assertions.assertTrue(result); - - String word2 = "没有"; - boolean result2 = BusinessUtil.containsSensitiveWords(word2); - Assertions.assertFalse(result2); - } - - @Disabled("Network does not work") - @Test - void getWeatherTest() { - String cityName = "北京市"; - WeatherModel result = BusinessUtil.getWeather(cityName); - log.info(JsonUtil.toJson(result)); - Assertions.assertNotNull(result); - } - -} diff --git a/src/test/java/com/starfish/core/util/IdCardUtilTest.java b/src/test/java/com/starfish/core/util/IdCardUtilTest.java new file mode 100644 index 00000000..8ae9a1f9 --- /dev/null +++ b/src/test/java/com/starfish/core/util/IdCardUtilTest.java @@ -0,0 +1,29 @@ +package com.starfish.core.util; + +import lombok.extern.slf4j.Slf4j; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +/** + * IdCardUtilTest + * + * @author sunkolin + * @version 1.0.0 + * @since 2021-10-13 + */ +@Slf4j +class IdCardUtilTest { + + @Test + void getBirthdayTest() { + String result = IdCardUtil.getBirthByIdCard("513436200010136655"); + Assertions.assertEquals("2000-10-13", result); + } + + @Test + void validateIdCardTest() { + boolean result = IdCardUtil.validateIdCard("513436200010136655"); + Assertions.assertTrue(result); + } + +} diff --git a/src/test/java/com/starfish/core/util/CommonUtilTest.java b/src/test/java/com/starfish/core/util/IpUtilTest.java similarity index 62% rename from src/test/java/com/starfish/core/util/CommonUtilTest.java rename to src/test/java/com/starfish/core/util/IpUtilTest.java index 18d8b5dc..b936573d 100644 --- a/src/test/java/com/starfish/core/util/CommonUtilTest.java +++ b/src/test/java/com/starfish/core/util/IpUtilTest.java @@ -6,21 +6,27 @@ import org.junit.jupiter.api.Test; /** - * CommonUtilTest + * IpUtilTest * * @author sunkolin * @version 1.0.0 * @since 2015-01-21 */ @Slf4j -class CommonUtilTest { +class IpUtilTest { @Disabled("Network does not work") @Test void getPublicAddressTest() { - String result = CommonUtil.getPublicInternetProtocolAddress(); + String result = IpUtil.getPublicNetworkIp(); log.info(result); Assertions.assertNotNull(result); } + @Test + void getAddress() { + String result = IpUtil.getAddress("203.119.241.126"); + Assertions.assertEquals("中国 广东 深圳", result); + } + } diff --git a/src/test/java/com/starfish/core/util/MobileUtilTest.java b/src/test/java/com/starfish/core/util/MobileUtilTest.java new file mode 100644 index 00000000..6f8e3fee --- /dev/null +++ b/src/test/java/com/starfish/core/util/MobileUtilTest.java @@ -0,0 +1,30 @@ +package com.starfish.core.util; + +import lombok.extern.slf4j.Slf4j; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +/** + * BusinessUtilTest + * + * @author sunkolin + * @version 1.0.0 + * @since 2021-10-13 + */ +@Slf4j +class MobileUtilTest { + + @Test + void isMobileTest() { + boolean result1 = MobileUtil.isMobile("110"); + Assertions.assertFalse(result1); + + boolean result2 = MobileUtil.isMobile("18610815188"); + Assertions.assertTrue(result2); + + Assertions.assertTrue(MobileUtil.isMobile("18610815188")); + Assertions.assertTrue(MobileUtil.isMobile("13496215263")); + Assertions.assertTrue(MobileUtil.isMobile("13912345678")); + } + +} diff --git a/src/test/java/com/starfish/core/util/PinyinUtilTest.java b/src/test/java/com/starfish/core/util/PinyinUtilTest.java index 297be501..4b5c32a1 100644 --- a/src/test/java/com/starfish/core/util/PinyinUtilTest.java +++ b/src/test/java/com/starfish/core/util/PinyinUtilTest.java @@ -9,7 +9,7 @@ import java.util.List; /** - * PinyinPlusTest + * PinyinTest * * @author sunkolin * @version 1.0.0 diff --git a/src/test/java/com/starfish/core/util/RestTemplatePlusTest.java b/src/test/java/com/starfish/core/util/RestTemplatesTest.java similarity index 66% rename from src/test/java/com/starfish/core/util/RestTemplatePlusTest.java rename to src/test/java/com/starfish/core/util/RestTemplatesTest.java index fa3d44ab..5a183e08 100644 --- a/src/test/java/com/starfish/core/util/RestTemplatePlusTest.java +++ b/src/test/java/com/starfish/core/util/RestTemplatesTest.java @@ -9,18 +9,18 @@ import org.springframework.http.ResponseEntity; @Slf4j -class RestTemplatePlusTest { +class RestTemplatesTest { @Disabled("Network does not work") @Test void exchangeSkipSsl() { - ResponseEntity entity = RestTemplatePlus.exchangeSkipSsl("https://www.baidu.com/sugrec", HttpMethod.GET, null, null, null, String.class); + ResponseEntity entity = RestTemplates.exchangeSkipSsl("https://www.baidu.com/sugrec", HttpMethod.GET, null, null, null, String.class); Assertions.assertEquals(HttpStatus.OK,entity.getStatusCode()); } @Test void head() { - ResponseEntity entity = RestTemplatePlus.exchange("https://www.baidu.com/sugrec", HttpMethod.HEAD, null, null, null, Void.class); + ResponseEntity entity = RestTemplates.exchange("https://www.baidu.com/sugrec", HttpMethod.HEAD, null, null, null, Void.class); log.info("headers={}",entity.getHeaders()); Assertions.assertEquals(HttpStatus.OK,entity.getStatusCode()); } diff --git a/src/test/java/com/starfish/core/util/SensitiveWordsUtilTest.java b/src/test/java/com/starfish/core/util/SensitiveWordsUtilTest.java new file mode 100644 index 00000000..ec93d687 --- /dev/null +++ b/src/test/java/com/starfish/core/util/SensitiveWordsUtilTest.java @@ -0,0 +1,28 @@ +package com.starfish.core.util; + +import lombok.extern.slf4j.Slf4j; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +/** + * BusinessUtilTest + * + * @author sunkolin + * @version 1.0.0 + * @since 2021-10-13 + */ +@Slf4j +class SensitiveWordsUtilTest { + + @Test + void containsSensitiveWordsTest() { + String word = "考前答案"; + boolean result = SensitiveWordsUtil.containsSensitiveWords(word); + Assertions.assertTrue(result); + + String word2 = "没有"; + boolean result2 = SensitiveWordsUtil.containsSensitiveWords(word2); + Assertions.assertFalse(result2); + } + +} diff --git a/src/test/java/com/starfish/core/util/WebUtilTest.java b/src/test/java/com/starfish/core/util/WebUtilTest.java index 68987b24..1c1346a8 100644 --- a/src/test/java/com/starfish/core/util/WebUtilTest.java +++ b/src/test/java/com/starfish/core/util/WebUtilTest.java @@ -31,12 +31,6 @@ void downloadTest() { Assertions.assertTrue(new File(filePath).exists()); } - @Test - void getAddress() { - String result = WebUtil.getAddress("203.119.241.126"); - Assertions.assertEquals("中国 广东 深圳", result); - } - @Test void existMedia() { String url = "https://vd3.bdstatic.com/mda-mj84pad7qad8hhur/sc/cae_h264_clips/1633750377008601665/mda-mj84pad7qad8hhur.mp4"; @@ -44,7 +38,7 @@ void existMedia() { } @Test - void weatherPlusTest() { + void webTest() { log.info(WebUtil.getBaseUrl("http://new.dongying.gov.cn/art/2018/8/31/art_43576_3069835.html")); log.info(WebUtil.getBaseUrl("https://10.10.20.30:8080/art/2018/8/31/art_43576_3069835.html")); diff --git a/src/test/java/com/starfish/example/RankListTest.java b/src/test/java/com/starfish/example/RankListTest.java index a06c1f95..f6494980 100644 --- a/src/test/java/com/starfish/example/RankListTest.java +++ b/src/test/java/com/starfish/example/RankListTest.java @@ -1,6 +1,7 @@ package com.starfish.example; import com.starfish.core.util.JsonUtil; +import com.starfish.experiment.RankList; import lombok.AllArgsConstructor; import lombok.Data; import lombok.extern.slf4j.Slf4j; diff --git a/src/test/java/com/starfish/incubator/jwt/JsonWebTokenPlusTest.java b/src/test/java/com/starfish/experiment/jwt/JsonWebTokensTest.java similarity index 67% rename from src/test/java/com/starfish/incubator/jwt/JsonWebTokenPlusTest.java rename to src/test/java/com/starfish/experiment/jwt/JsonWebTokensTest.java index 61a006e2..020860b1 100644 --- a/src/test/java/com/starfish/incubator/jwt/JsonWebTokenPlusTest.java +++ b/src/test/java/com/starfish/experiment/jwt/JsonWebTokensTest.java @@ -1,4 +1,4 @@ -package com.starfish.incubator.jwt; +package com.starfish.experiment.jwt; import com.starfish.core.context.User; import com.starfish.core.util.JsonUtil; @@ -7,27 +7,27 @@ import org.junit.jupiter.api.Test; /** - * JsonWebTokenPlusTest + * JsonWebTokenTest * * @author sunkolin * @version 1.0.0 * @since 2022-07-26 */ @Slf4j -class JsonWebTokenPlusTest { +class JsonWebTokensTest { @Test void test() { User user = new User(); user.setUserId(100L); - String token = JsonWebTokenPlus.create(user); + String token = JsonWebTokens.create(user); log.info(token); - boolean verify = JsonWebTokenPlus.verify(token); + boolean verify = JsonWebTokens.verify(token); log.info("{}",verify); - User user1 = JsonWebTokenPlus.verify(token, User.class); + User user1 = JsonWebTokens.verify(token, User.class); log.info(JsonUtil.toJson(user1)); long expectedValue = 100L; @@ -41,13 +41,13 @@ void test2() { Long userId = 100L; user.setUserId(userId); - String token = JsonWebTokenPlus.create(userId, user); + String token = JsonWebTokens.create(userId, user); log.info(token); - boolean verify = JsonWebTokenPlus.verify(userId, token); + boolean verify = JsonWebTokens.verify(userId, token); log.info("{}",verify); - User user1 = JsonWebTokenPlus.verify(userId, token, User.class); + User user1 = JsonWebTokens.verify(userId, token, User.class); log.info(JsonUtil.toJson(user1)); long expectedValue = 100L;