update springboot 3.4.7 => 3.5.4

update springcloud 2024.0.0 => 2025.0.0
update springboot-admin 3.4.7 => 3.5.1
update springdoc 2.8.8 => 2.8.9
update lombok 1.18.36 => 1.18.38
This commit is contained in:
疯狂的狮子Li
2025-07-30 16:16:10 +08:00
parent c73d3cdf89
commit 4557bc30b6
10 changed files with 102 additions and 150 deletions

24
pom.xml
View File

@@ -17,16 +17,16 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>17</java.version> <java.version>17</java.version>
<spring-boot.version>3.4.7</spring-boot.version> <spring-boot.version>3.5.4</spring-boot.version>
<spring-cloud.version>2024.0.0</spring-cloud.version> <spring-cloud.version>2025.0.0</spring-cloud.version>
<spring-boot-admin.version>3.4.7</spring-boot-admin.version> <spring-boot-admin.version>3.5.1</spring-boot-admin.version>
<mybatis.version>3.5.16</mybatis.version> <mybatis.version>3.5.16</mybatis.version>
<mybatis-plus.version>3.5.12</mybatis-plus.version> <mybatis-plus.version>3.5.12</mybatis-plus.version>
<p6spy.version>3.9.1</p6spy.version> <p6spy.version>3.9.1</p6spy.version>
<dynamic-ds.version>4.3.1</dynamic-ds.version> <dynamic-ds.version>4.3.1</dynamic-ds.version>
<velocity.version>2.3</velocity.version> <velocity.version>2.3</velocity.version>
<swagger.core.version>2.2.30</swagger.core.version> <swagger.core.version>2.2.30</swagger.core.version>
<springdoc.version>2.8.8</springdoc.version> <springdoc.version>2.8.9</springdoc.version>
<therapi-javadoc.version>0.15.0</therapi-javadoc.version> <therapi-javadoc.version>0.15.0</therapi-javadoc.version>
<fastexcel.version>1.2.0</fastexcel.version> <fastexcel.version>1.2.0</fastexcel.version>
<hutool.version>5.8.38</hutool.version> <hutool.version>5.8.38</hutool.version>
@@ -34,7 +34,7 @@
<lock4j.version>2.2.7</lock4j.version> <lock4j.version>2.2.7</lock4j.version>
<snailjob.version>1.6.0</snailjob.version> <snailjob.version>1.6.0</snailjob.version>
<satoken.version>1.44.0</satoken.version> <satoken.version>1.44.0</satoken.version>
<lombok.version>1.18.36</lombok.version> <lombok.version>1.18.38</lombok.version>
<logstash.version>7.4</logstash.version> <logstash.version>7.4</logstash.version>
<easy-es.version>3.0.0</easy-es.version> <easy-es.version>3.0.0</easy-es.version>
<skywalking-toolkit.version>9.3.0</skywalking-toolkit.version> <skywalking-toolkit.version>9.3.0</skywalking-toolkit.version>
@@ -137,13 +137,6 @@
<scope>import</scope> <scope>import</scope>
</dependency> </dependency>
<!-- JustAuth 的依赖配置-->
<dependency>
<groupId>me.zhyd.oauth</groupId>
<artifactId>JustAuth</artifactId>
<version>${justauth.version}</version>
</dependency>
<!-- common 的依赖配置--> <!-- common 的依赖配置-->
<dependency> <dependency>
<groupId>org.dromara</groupId> <groupId>org.dromara</groupId>
@@ -324,6 +317,13 @@
<version>${sms4j.version}</version> <version>${sms4j.version}</version>
</dependency> </dependency>
<!-- JustAuth 的依赖配置-->
<dependency>
<groupId>me.zhyd.oauth</groupId>
<artifactId>JustAuth</artifactId>
<version>${justauth.version}</version>
</dependency>
<!-- 离线IP地址定位库 ip2region --> <!-- 离线IP地址定位库 ip2region -->
<dependency> <dependency>
<groupId>org.lionsoul</groupId> <groupId>org.lionsoul</groupId>

View File

@@ -1,52 +0,0 @@
package org.dromara.common.core.config;
import cn.hutool.core.util.ArrayUtil;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.SpringUtils;
import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.core.task.VirtualThreadTaskExecutor;
import org.springframework.scheduling.annotation.AsyncConfigurer;
import java.util.Arrays;
import java.util.concurrent.Executor;
/**
* 异步配置
* <p>
* 如果未使用虚拟线程则生效
*
* @author Lion Li
*/
@AutoConfiguration
public class AsyncConfig implements AsyncConfigurer {
/**
* 自定义 @Async 注解使用系统线程池
*/
@Override
public Executor getAsyncExecutor() {
if(SpringUtils.isVirtual()) {
return new VirtualThreadTaskExecutor("async-");
}
return SpringUtils.getBean("scheduledExecutorService");
}
/**
* 异步执行异常处理
*/
@Override
public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
return (throwable, method, objects) -> {
throwable.printStackTrace();
StringBuilder sb = new StringBuilder();
sb.append("Exception message - ").append(throwable.getMessage())
.append(", Method name - ").append(method.getName());
if (ArrayUtil.isNotEmpty(objects)) {
sb.append(", Parameter value - ").append(Arrays.toString(objects));
}
throw new ServiceException(sb.toString());
};
}
}

View File

@@ -2,4 +2,3 @@ org.dromara.common.core.utils.SpringUtils
org.dromara.common.core.config.ApplicationConfig org.dromara.common.core.config.ApplicationConfig
org.dromara.common.core.config.ValidatorConfig org.dromara.common.core.config.ValidatorConfig
org.dromara.common.core.config.ThreadPoolConfig org.dromara.common.core.config.ThreadPoolConfig
org.dromara.common.core.config.AsyncConfig

View File

@@ -6,6 +6,7 @@ import org.dromara.common.encrypt.properties.ApiDecryptProperties;
import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistration;
import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
@@ -20,13 +21,14 @@ import org.springframework.context.annotation.Bean;
public class ApiDecryptAutoConfiguration { public class ApiDecryptAutoConfiguration {
@Bean @Bean
public FilterRegistrationBean<CryptoFilter> cryptoFilterRegistration(ApiDecryptProperties properties) { @FilterRegistration(
FilterRegistrationBean<CryptoFilter> registration = new FilterRegistrationBean<>(); name = "cryptoFilter",
registration.setDispatcherTypes(DispatcherType.REQUEST); urlPatterns = "/*",
registration.setFilter(new CryptoFilter(properties)); order = FilterRegistrationBean.HIGHEST_PRECEDENCE,
registration.addUrlPatterns("/*"); dispatcherTypes = DispatcherType.REQUEST
registration.setName("cryptoFilter"); )
registration.setOrder(FilterRegistrationBean.HIGHEST_PRECEDENCE); public CryptoFilter cryptoFilter(ApiDecryptProperties properties) {
return registration; return new CryptoFilter(properties);
} }
} }

View File

@@ -6,6 +6,7 @@ import org.dromara.common.web.filter.XssFilter;
import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistration;
import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
@@ -20,14 +21,14 @@ public class FilterConfig {
@Bean @Bean
@ConditionalOnProperty(value = "xss.enabled", havingValue = "true") @ConditionalOnProperty(value = "xss.enabled", havingValue = "true")
public FilterRegistrationBean<XssFilter> xssFilterRegistration() { @FilterRegistration(
FilterRegistrationBean<XssFilter> registration = new FilterRegistrationBean<>(); name = "xssFilter",
registration.setDispatcherTypes(DispatcherType.REQUEST); urlPatterns = "/*",
registration.setFilter(new XssFilter()); order = FilterRegistrationBean.HIGHEST_PRECEDENCE + 1,
registration.addUrlPatterns("/*"); dispatcherTypes = DispatcherType.REQUEST
registration.setName("xssFilter"); )
registration.setOrder(FilterRegistrationBean.HIGHEST_PRECEDENCE + 1); public XssFilter xssFilter() {
return registration; return new XssFilter();
} }
} }

View File

@@ -19,7 +19,7 @@
<!-- SpringCloud Gateway --> <!-- SpringCloud Gateway -->
<dependency> <dependency>
<groupId>org.springframework.cloud</groupId> <groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId> <artifactId>spring-cloud-starter-gateway-server-webflux</artifactId>
</dependency> </dependency>
<dependency> <dependency>

View File

@@ -69,12 +69,6 @@
<artifactId>ruoyi-common-security</artifactId> <artifactId>ruoyi-common-security</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.anyline</groupId>
<artifactId>anyline-environment-spring-data-jdbc</artifactId>
<version>${anyline.version}</version>
</dependency>
<dependency> <dependency>
<groupId>org.anyline</groupId> <groupId>org.anyline</groupId>
<artifactId>anyline-data-jdbc-mysql</artifactId> <artifactId>anyline-data-jdbc-mysql</artifactId>

View File

@@ -12,6 +12,7 @@ import org.springframework.security.config.annotation.web.configurers.HeadersCon
import org.springframework.security.web.SecurityFilterChain; import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler; import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler;
import org.springframework.security.web.servlet.util.matcher.MvcRequestMatcher; import org.springframework.security.web.servlet.util.matcher.MvcRequestMatcher;
import org.springframework.security.web.servlet.util.matcher.PathPatternRequestMatcher;
import org.springframework.web.servlet.handler.HandlerMappingIntrospector; import org.springframework.web.servlet.handler.HandlerMappingIntrospector;
/** /**
@@ -30,7 +31,7 @@ public class WebSecurityConfigurer {
} }
@Bean @Bean
public SecurityFilterChain filterChain(HttpSecurity httpSecurity, MvcRequestMatcher.Builder mvc) throws Exception { public SecurityFilterChain filterChain(HttpSecurity httpSecurity, PathPatternRequestMatcher.Builder mvc) throws Exception {
SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler(); SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler();
successHandler.setTargetUrlParameter("redirectTo"); successHandler.setTargetUrlParameter("redirectTo");
successHandler.setDefaultTargetUrl(adminContextPath + "/"); successHandler.setDefaultTargetUrl(adminContextPath + "/");
@@ -40,8 +41,8 @@ public class WebSecurityConfigurer {
header.frameOptions(HeadersConfigurer.FrameOptionsConfig::disable)) header.frameOptions(HeadersConfigurer.FrameOptionsConfig::disable))
.authorizeHttpRequests((authorize) -> .authorizeHttpRequests((authorize) ->
authorize.requestMatchers( authorize.requestMatchers(
mvc.pattern(adminContextPath + "/assets/**"), mvc.matcher(adminContextPath + "/assets/**"),
mvc.pattern(adminContextPath + "/login") mvc.matcher(adminContextPath + "/login")
).permitAll() ).permitAll()
.anyRequest().authenticated()) .anyRequest().authenticated())
.formLogin((formLogin) -> .formLogin((formLogin) ->

View File

@@ -44,6 +44,11 @@ spring:
# 开启虚拟线程 仅jdk21可用 # 开启虚拟线程 仅jdk21可用
virtual: virtual:
enabled: false enabled: false
task:
execution:
# 从 springboot 3.5 开始 spring自带线程池
# 不再需要 AsyncConfig与ThreadPoolConfig 可直接注入线程池使用
thread-name-prefix: async-
# 资源信息 # 资源信息
messages: messages:
# 国际化资源文件路径 # 国际化资源文件路径

View File

@@ -22,62 +22,64 @@ spring:
gateway: gateway:
# 打印请求日志(自定义) # 打印请求日志(自定义)
requestLog: true requestLog: true
discovery: server:
locator: webflux:
lowerCaseServiceId: true discovery:
enabled: true locator:
routes: lowerCaseServiceId: true
# 认证中心 enabled: true
- id: ruoyi-auth routes:
uri: lb://ruoyi-auth # 认证中心
predicates: - id: ruoyi-auth
- Path=/auth/** uri: lb://ruoyi-auth
filters: predicates:
- StripPrefix=1 - Path=/auth/**
# 代码生成 filters:
- id: ruoyi-gen - StripPrefix=1
uri: lb://ruoyi-gen # 代码生成
predicates: - id: ruoyi-gen
- Path=/tool/** uri: lb://ruoyi-gen
filters: predicates:
- StripPrefix=1 - Path=/tool/**
# 系统模块 filters:
- id: ruoyi-system - StripPrefix=1
uri: lb://ruoyi-system # 系统模块
predicates: - id: ruoyi-system
- Path=/system/**,/monitor/** uri: lb://ruoyi-system
filters: predicates:
- StripPrefix=1 - Path=/system/**,/monitor/**
# 资源服务 filters:
- id: ruoyi-resource - StripPrefix=1
uri: lb://ruoyi-resource # 资源服务
predicates: - id: ruoyi-resource
- Path=/resource/** uri: lb://ruoyi-resource
filters: predicates:
- StripPrefix=1 - Path=/resource/**
# workflow服务 filters:
- id: ruoyi-workflow - StripPrefix=1
uri: lb://ruoyi-workflow # workflow服务
predicates: - id: ruoyi-workflow
- Path=/workflow/** uri: lb://ruoyi-workflow
filters: predicates:
- StripPrefix=1 - Path=/workflow/**
# warm-flow服务 filters:
- id: warm-flow - StripPrefix=1
uri: lb://ruoyi-workflow # warm-flow服务
predicates: - id: warm-flow
- Path=/warm-flow-ui/**,/warm-flow/** uri: lb://ruoyi-workflow
# 演示服务 predicates:
- id: ruoyi-demo - Path=/warm-flow-ui/**,/warm-flow/**
uri: lb://ruoyi-demo # 演示服务
predicates: - id: ruoyi-demo
- Path=/demo/** uri: lb://ruoyi-demo
filters: predicates:
- StripPrefix=1 - Path=/demo/**
# MQ演示服务 filters:
- id: ruoyi-test-mq - StripPrefix=1
uri: lb://ruoyi-test-mq # MQ演示服务
predicates: - id: ruoyi-test-mq
- Path=/test-mq/** uri: lb://ruoyi-test-mq
filters: predicates:
- StripPrefix=1 - Path=/test-mq/**
filters:
- StripPrefix=1