问题描述
最近在练习整合 Springboot + Druid,却发现当我在 yml 中配置好 Druid 后,系统总是出现 404 错误。
解决方法
搜集了网上的很多资料之后,我得到了两种总结的方法。
1. yml 配置
对于 Druid 依赖,有两种:druid 和 druid-spring-boot-starter。当我使用前者进行 yml 配置后,无法正确进入控制页面,使用后者即可。
补充一句,在我查到的很多博客中,有人将 1.1.20 版本降级后,出现了正确的页面,我自己测试 1.1.10 和 1.1.24 都可以正常显示。
yml 的配置如下:
spring:
datasource:
# =====================MySQL相关配置=====================
name: mysql
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/tableName?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&useSSL=false
#数据库连接账号
username: username
#数据库连接密码
password: password
#使用druid数据源
type: com.alibaba.druid.pool.DruidDataSource
#==================druid相关配置=========================================
druid:
# 此处省略其他配置
# 配置StatFilter
web-stat-filter:
#默认为false,设置为true启动
enabled: true
url-pattern: "/*"
exclusions: "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*"
#配置StatViewServlet
stat-view-servlet:
url-pattern: "/druid/*"
#允许那些ip
login-username: admin
login-password: admin
#是否可以重置
reset-enable: false
#启用
enabled: true
依赖配置如下:
正确的依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.24</version>
</dependency>
错误的依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.24</version>
</dependency>
2. 使用 servlet
使用上述的 druid 依赖,也可以通过 servlet 得到正常显示的页面。具体来说就是写一个 servlet 类,然后在启动类中标注 @ServletComponentScan 即可。
@WebServlet(urlPatterns="/druid/*",
initParams={
@WebInitParam(name="allow",value=""),// IP白名单(没有配置或者为空,则允许所有访问)
/* @WebInitParam(name="deny",value="192.168.188.130"),*/// IP黑名单 (存在共同时,deny优先于allow)
@WebInitParam(name="loginUsername",value="admin"),// 用户名
@WebInitParam(name="loginPassword",value="123456"),// 密码
@WebInitParam(name="resetEnable",value="false")// 禁用HTML页面上的“Reset All”功能
})
public class DruidStatViewServlet extends StatViewServlet {
private static final long serialVersionUID = -2688872071445249539L;
}
@ServletComponentScan
@SpringBootApplication
@MapperScan(value="com.xxx.xx.dao")
public class BackgroundApplication {
public static void main(String[] args) {
SpringApplication.run(BackgroundApplication.class, args);
}
}