Skip to content

Commit 1d441dd

Browse files
fix: resolve Druid monitoring page 404 after Spring Boot 3 upgrade (#239)
* Initial plan * 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> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: unknowIfGuestInDream <57802425+unknowIfGuestInDream@users.noreply.github.com>
1 parent 617334e commit 1d441dd

4 files changed

Lines changed: 71 additions & 29 deletions

File tree

src/main/java/com/tlcsdm/gen/GenApplication.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
package com.tlcsdm.gen;
22

3+
import com.alibaba.druid.spring.boot3.autoconfigure.DruidDataSourceAutoConfigure;
34
import lombok.extern.slf4j.Slf4j;
45
import org.springframework.boot.SpringApplication;
56
import org.springframework.boot.autoconfigure.SpringBootApplication;
7+
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
68

7-
@SpringBootApplication
9+
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class, DruidDataSourceAutoConfigure.class })
810
@Slf4j
911
public class GenApplication {
1012

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package com.tlcsdm.gen.config;
2+
3+
import com.alibaba.druid.spring.boot3.autoconfigure.properties.DruidStatProperties;
4+
import com.alibaba.druid.support.jakarta.StatViewServlet;
5+
import com.alibaba.druid.support.jakarta.WebStatFilter;
6+
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
7+
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
8+
import org.springframework.boot.context.properties.EnableConfigurationProperties;
9+
import org.springframework.boot.web.servlet.FilterRegistrationBean;
10+
import org.springframework.boot.web.servlet.ServletRegistrationBean;
11+
import org.springframework.context.annotation.Bean;
12+
import org.springframework.context.annotation.Configuration;
13+
14+
/**
15+
* druid监控配置
16+
*
17+
* @author: TangLiang
18+
* @date: 2021/6/18 23:18
19+
* @since: 1.0
20+
*/
21+
@Configuration
22+
@ConditionalOnWebApplication
23+
@ConditionalOnProperty(name = { "spring.datasource.druid.stat-view-servlet.enabled", "gen.isdb" }, havingValue = "true")
24+
@EnableConfigurationProperties(DruidStatProperties.class)
25+
public class DruidMonitorConfig {
26+
27+
@Bean
28+
public ServletRegistrationBean<StatViewServlet> statViewServletRegistrationBean(DruidStatProperties properties) {
29+
DruidStatProperties.StatViewServlet config = properties.getStatViewServlet();
30+
ServletRegistrationBean<StatViewServlet> bean = new ServletRegistrationBean<>();
31+
bean.setServlet(new StatViewServlet());
32+
String urlPattern = config.getUrlPattern() != null ? config.getUrlPattern() : "/druid/*";
33+
bean.addUrlMappings(urlPattern);
34+
if (config.getAllow() != null) {
35+
bean.addInitParameter("allow", config.getAllow());
36+
}
37+
if (config.getDeny() != null) {
38+
bean.addInitParameter("deny", config.getDeny());
39+
}
40+
if (config.getLoginUsername() != null) {
41+
bean.addInitParameter("loginUsername", config.getLoginUsername());
42+
}
43+
if (config.getLoginPassword() != null) {
44+
bean.addInitParameter("loginPassword", config.getLoginPassword());
45+
}
46+
if (config.getResetEnable() != null) {
47+
bean.addInitParameter("resetEnable", config.getResetEnable());
48+
}
49+
return bean;
50+
}
51+
52+
@Bean
53+
public FilterRegistrationBean<WebStatFilter> webStatFilterRegistrationBean(DruidStatProperties properties) {
54+
DruidStatProperties.WebStatFilter config = properties.getWebStatFilter();
55+
FilterRegistrationBean<WebStatFilter> bean = new FilterRegistrationBean<>();
56+
bean.setFilter(new WebStatFilter());
57+
String urlPattern = config.getUrlPattern() != null ? config.getUrlPattern() : "/*";
58+
bean.addUrlPatterns(urlPattern);
59+
if (config.getExclusions() != null) {
60+
bean.addInitParameter("exclusions", config.getExclusions());
61+
}
62+
return bean;
63+
}
64+
65+
}

src/main/java/com/tlcsdm/gen/config/GenAutoConfig.java

Lines changed: 0 additions & 21 deletions
This file was deleted.

src/main/java/com/tlcsdm/gen/config/RemoveDruidAdConfig.java

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
package com.tlcsdm.gen.config;
22

3-
import com.alibaba.druid.spring.boot3.autoconfigure.DruidDataSourceAutoConfigure;
43
import com.alibaba.druid.spring.boot3.autoconfigure.properties.DruidStatProperties;
54
import com.alibaba.druid.util.Utils;
6-
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
7-
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
85
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
96
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
7+
import org.springframework.boot.context.properties.EnableConfigurationProperties;
108
import org.springframework.boot.web.servlet.FilterRegistrationBean;
119
import org.springframework.context.annotation.Bean;
1210
import org.springframework.context.annotation.Configuration;
@@ -23,16 +21,14 @@
2321
*/
2422
@Configuration
2523
@ConditionalOnWebApplication
26-
@AutoConfigureAfter(DruidDataSourceAutoConfigure.class)
27-
@ConditionalOnProperty(name = { "spring.datasource.druid.stat-view-servlet.enabled", "gen.isdb" }, havingValue = "true",
28-
matchIfMissing = true)
24+
@ConditionalOnProperty(name = { "spring.datasource.druid.stat-view-servlet.enabled", "gen.isdb" }, havingValue = "true")
25+
@EnableConfigurationProperties(DruidStatProperties.class)
2926
public class RemoveDruidAdConfig {
3027

3128
/**
3229
* 方法名: removeDruidAdFilterRegistrationBean 方法描述: 除去页面底部的广告
3330
* @return org.springframework.boot.web.servlet.FilterRegistrationBean
3431
*/
35-
@ConditionalOnBean(DruidStatProperties.class)
3632
@Bean
3733
public FilterRegistrationBean removeDruidAdFilterRegistrationBean(DruidStatProperties properties) {
3834
// 获取web监控页面的参数

0 commit comments

Comments
 (0)