From de28414b0a2b43c423da5a9509b1cee225ba17bd Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 28 Feb 2026 07:07:42 +0000 Subject: [PATCH 1/2] Initial plan From e6b7d2690e221b0c0f04ca3e7b016528727f4174 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 28 Feb 2026 07:22:23 +0000 Subject: [PATCH 2/2] fix: resolve Druid monitoring page 404 by manually registering StatViewServlet and WebStatFilter Move auto-configuration exclusions from conditional GenAutoConfig to @SpringBootApplication to ensure they are always applied reliably. Add DruidMonitorConfig to manually register the Jakarta-based StatViewServlet and WebStatFilter when gen.isdb=true, bypassing the excluded DruidDataSourceAutoConfigure. Fix RemoveDruidAdConfig by removing @AutoConfigureAfter and @ConditionalOnBean which don't work for non-auto-configuration classes. Co-authored-by: unknowIfGuestInDream <57802425+unknowIfGuestInDream@users.noreply.github.com> --- .../java/com/tlcsdm/gen/GenApplication.java | 4 +- .../tlcsdm/gen/config/DruidMonitorConfig.java | 65 +++++++++++++++++++ .../com/tlcsdm/gen/config/GenAutoConfig.java | 21 ------ .../gen/config/RemoveDruidAdConfig.java | 10 +-- 4 files changed, 71 insertions(+), 29 deletions(-) create mode 100644 src/main/java/com/tlcsdm/gen/config/DruidMonitorConfig.java delete mode 100644 src/main/java/com/tlcsdm/gen/config/GenAutoConfig.java diff --git a/src/main/java/com/tlcsdm/gen/GenApplication.java b/src/main/java/com/tlcsdm/gen/GenApplication.java index 41c92edc..5a1ebd6c 100644 --- a/src/main/java/com/tlcsdm/gen/GenApplication.java +++ b/src/main/java/com/tlcsdm/gen/GenApplication.java @@ -1,10 +1,12 @@ package com.tlcsdm.gen; +import com.alibaba.druid.spring.boot3.autoconfigure.DruidDataSourceAutoConfigure; import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; -@SpringBootApplication +@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class, DruidDataSourceAutoConfigure.class }) @Slf4j public class GenApplication { diff --git a/src/main/java/com/tlcsdm/gen/config/DruidMonitorConfig.java b/src/main/java/com/tlcsdm/gen/config/DruidMonitorConfig.java new file mode 100644 index 00000000..05f9b8ed --- /dev/null +++ b/src/main/java/com/tlcsdm/gen/config/DruidMonitorConfig.java @@ -0,0 +1,65 @@ +package com.tlcsdm.gen.config; + +import com.alibaba.druid.spring.boot3.autoconfigure.properties.DruidStatProperties; +import com.alibaba.druid.support.jakarta.StatViewServlet; +import com.alibaba.druid.support.jakarta.WebStatFilter; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.boot.web.servlet.ServletRegistrationBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * druid监控配置 + * + * @author: TangLiang + * @date: 2021/6/18 23:18 + * @since: 1.0 + */ +@Configuration +@ConditionalOnWebApplication +@ConditionalOnProperty(name = { "spring.datasource.druid.stat-view-servlet.enabled", "gen.isdb" }, havingValue = "true") +@EnableConfigurationProperties(DruidStatProperties.class) +public class DruidMonitorConfig { + + @Bean + public ServletRegistrationBean statViewServletRegistrationBean(DruidStatProperties properties) { + DruidStatProperties.StatViewServlet config = properties.getStatViewServlet(); + ServletRegistrationBean bean = new ServletRegistrationBean<>(); + bean.setServlet(new StatViewServlet()); + String urlPattern = config.getUrlPattern() != null ? config.getUrlPattern() : "/druid/*"; + bean.addUrlMappings(urlPattern); + if (config.getAllow() != null) { + bean.addInitParameter("allow", config.getAllow()); + } + if (config.getDeny() != null) { + bean.addInitParameter("deny", config.getDeny()); + } + if (config.getLoginUsername() != null) { + bean.addInitParameter("loginUsername", config.getLoginUsername()); + } + if (config.getLoginPassword() != null) { + bean.addInitParameter("loginPassword", config.getLoginPassword()); + } + if (config.getResetEnable() != null) { + bean.addInitParameter("resetEnable", config.getResetEnable()); + } + return bean; + } + + @Bean + public FilterRegistrationBean webStatFilterRegistrationBean(DruidStatProperties properties) { + DruidStatProperties.WebStatFilter config = properties.getWebStatFilter(); + FilterRegistrationBean bean = new FilterRegistrationBean<>(); + bean.setFilter(new WebStatFilter()); + String urlPattern = config.getUrlPattern() != null ? config.getUrlPattern() : "/*"; + bean.addUrlPatterns(urlPattern); + if (config.getExclusions() != null) { + bean.addInitParameter("exclusions", config.getExclusions()); + } + return bean; + } + +} diff --git a/src/main/java/com/tlcsdm/gen/config/GenAutoConfig.java b/src/main/java/com/tlcsdm/gen/config/GenAutoConfig.java deleted file mode 100644 index c4336b1a..00000000 --- a/src/main/java/com/tlcsdm/gen/config/GenAutoConfig.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.tlcsdm.gen.config; - -import com.alibaba.druid.spring.boot3.autoconfigure.DruidDataSourceAutoConfigure; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; -import org.springframework.context.annotation.Configuration; - -/** - * 当gen.isdb=false时,取消druid初始化 - * - * @author: TangLiang - * @date: 2021/12/7 11:47 - * @since: 1.0 - */ -@Configuration -@EnableAutoConfiguration(exclude = { DataSourceAutoConfiguration.class, DruidDataSourceAutoConfigure.class }) -@ConditionalOnProperty(name = "gen.isdb", havingValue = "false") -public class GenAutoConfig { - -} diff --git a/src/main/java/com/tlcsdm/gen/config/RemoveDruidAdConfig.java b/src/main/java/com/tlcsdm/gen/config/RemoveDruidAdConfig.java index 9b0d97ad..d8909db7 100644 --- a/src/main/java/com/tlcsdm/gen/config/RemoveDruidAdConfig.java +++ b/src/main/java/com/tlcsdm/gen/config/RemoveDruidAdConfig.java @@ -1,12 +1,10 @@ package com.tlcsdm.gen.config; -import com.alibaba.druid.spring.boot3.autoconfigure.DruidDataSourceAutoConfigure; import com.alibaba.druid.spring.boot3.autoconfigure.properties.DruidStatProperties; import com.alibaba.druid.util.Utils; -import org.springframework.boot.autoconfigure.AutoConfigureAfter; -import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; +import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -23,16 +21,14 @@ */ @Configuration @ConditionalOnWebApplication -@AutoConfigureAfter(DruidDataSourceAutoConfigure.class) -@ConditionalOnProperty(name = { "spring.datasource.druid.stat-view-servlet.enabled", "gen.isdb" }, havingValue = "true", - matchIfMissing = true) +@ConditionalOnProperty(name = { "spring.datasource.druid.stat-view-servlet.enabled", "gen.isdb" }, havingValue = "true") +@EnableConfigurationProperties(DruidStatProperties.class) public class RemoveDruidAdConfig { /** * 方法名: removeDruidAdFilterRegistrationBean 方法描述: 除去页面底部的广告 * @return org.springframework.boot.web.servlet.FilterRegistrationBean */ - @ConditionalOnBean(DruidStatProperties.class) @Bean public FilterRegistrationBean removeDruidAdFilterRegistrationBean(DruidStatProperties properties) { // 获取web监控页面的参数