SpringBoot整合Druid数据源页面访问报该页面无法正常运作

SpringBoot整合Druid数据源页面访问报该页面无法正常运作

异常页面:请求访问页面成功但是该网页无法正常运行SpringBoot整合Druid数据源页面访问报该页面无法正常运作_第1张图片
正常的页面:
SpringBoot整合Druid数据源页面访问报该页面无法正常运作_第2张图片
输入:账号admin 密码:123456 进入
SpringBoot整合Druid数据源页面访问报该页面无法正常运作_第3张图片
我的代码

pom.xml引入第三方Druid依赖


    com.alibaba
    druid
    1.2.8



    log4j
    log4j
    1.2.17

application.yml 文件

spring:
  datasource:
    username: root
    password: 123456
    # 如果时区报错了就添加 serverTimezone=UTC
    url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
    driver-class-name: com.mysql.cj.jdbc.Driver
    # driver-class-name: com.mysql.jdbc.Driver  可以自定义,目前最新版用的是com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource


    # springboot 默认是不注入这些属性值的,需要自己绑定
    #Druid 数据源专有配置
    # 初始化大小,最小,最大
    initialSize: 5
    minIdle: 5
    maxActive: 20
    # 配置获取连接等待超时的时间
    maxWait: 60000
    # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
    timeBetweenEvictionRunsMillis: 60000
    # 配置一个连接在池中最小生存的时间,单位是毫秒
    minEvictableIdleTimeMillis: 300000
    validationQuery: SELECT 1 FROM DUAL
	#validationQuery: select 'x'
    testWhileIdle: true
    testOnBorrow: false
    testOnReturn: false
    # 打开PSCache,并且指定每个连接上PSCache的大小
    poolPreparedStatements: true

    #配置监控统计拦截的 filters ,stat:监控统计,log4j :日志统计,wall:防御 sql 注入
    #如果允许时报错, Java.lang.ClassNotFoundException: org.apache.log4j.Priority
    #则导入log4j依赖即可,maven地址:https://mvnrepository.com/artifact/log4j/log4j

    # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
    filters: stat,wall,slf4j
    maxPoolPreparedStatementPerConnectionSize: 20
    # 合并多个DruidDataSource的监控数据
    useGlobalDataSourceStat: true
    # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
    connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500

配置数据源DruidConfig.java

package com.hh.config;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;
import java.util.HashMap;

@Configuration
public class DruidConfig {
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource")//自动装配
    public DataSource getDataSource(){
        return new DruidDataSource();
    }
    // 后台监控  web.xml,ServletRegistrationBean
    @Bean
    public ServletRegistrationBean  statViewServlet(){
/* ServletRegistrationBean bean = new ServletRegistrationBean<>(new StatViewServlet());*/
       //---------出错的地方
        ServletRegistrationBean bean = new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");
        //后台需要有人登录,账号密码配置
        HashMap initParameters=new HashMap<>();
        // 增加配置   (登录的key 是固定的 loginUsername、loginPassword )
        initParameters.put("loginUsername","admin");
        initParameters.put("loginPassword","123456");
        //允许谁可以访问 (key,value) value="":谁都可以访问;value="localhost":只有本机可以访问。多个ip逗号隔开
        initParameters.put("allow",""); 
          //禁止访  initParameters.put("hh","192.168.11.123");
         //是否能够重置参数  initParameters.put("resetEnable","true");
        //设置初始化参数
        bean.setInitParameters(initParameters);
        return bean;
    }
    @Bean
    public FilterRegistrationBean webStatFilter(){
        FilterRegistrationBean bean = new FilterRegistrationBean();
        bean.setFilter(new WebStatFilter());
        Map initParameters=new HashMap<>();

        //这些东西不进行统计
        initParameters.put("exclusions","*.js,*.css,/druid/*");

        bean.setInitParameters(initParameters);
        return bean;

    }

}

在看问题之前先了解一下Druid,Druid是阿里巴巴开源平台上的一个数据库连接池实现,结合了C3P0、DBCP、PROXOOL 等DB连接池的优点,同时加入了日志监控,druid可以很好的监控DB连接池和SQL的执行情况,天生就是针对监控而生的DB连接池。
我的异常问题是没有配置可行性路径,因为前面我在yml文件开启了filters拦截器,filter拦截掉了本身的东西,所以这里我就需要放行druid路径下的文件

ServletRegistrationBean bean = new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");

解决该问题我是参考了这篇文章
https://blog.csdn.net/qq_39669058/article/details/90440260
博主写得很好,推荐

还有另一写法就是在yml文件开启拦截器时就开启web监控放行/druid/* 路径,附上代码,仅供参考,请多指教
application.yml

spring:
  datasource:
  #类型
  type: com.alibaba.druid.pool.DruidDataSource
  #驱动
  driverClassName: com.mysql.cj.jdbc.Driver
  driver-class-name: com.mysql.cj.jdbc.Driver
  #数据库连接
  url: jdbc:mysql://localhost:3306/mybdtisdemo? useUnicode=true&characterEncoding=UTF8&useSSL=false&serverTimezone=GMT%2b8&allowPublicKeyRetrieval=true
  #数据库用户名密码
  username: root
  password: root
  #连接池配置
  druid:
    #初始化连接池大小
    initialSize: 10
    #最大空闲值.当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一 直减少到maxIdle为止
    minIdle: 1
    #最大活跃数
    maxActive: 50
    #最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制
    maxWait: 60000
    #失效检查线程运行时间间隔,要小于MySQL默认
    timeBetweenEvictionRunsMillis: 60000
    #连接的超时时间,默认为半小时
    minEvictableIdleTimeMillis: 300000
    #检查连接有效性的SQL语句
    validationQuery: SELECT 1 FROM dual
    #检查连接是否有效
    testWhileIdle: true
    testOnBorrow: true
    testOnReturn: false
    #开启池的prepared statement 池功能
    poolPreparedStatements: false
    #statement池能够同时分配的打开的statements的最大数量
    maxOpenPreparedStatements: 50
    #开启StatFilter
    filter:
      stat:
        enabled: true
        log-slow-sql: true
        slow-sql-millis: 1000
        #开启Slf4jFilter,使用logback时注释
        #slf4j: #enabled: true
        #data-source-log-enabled: false
        #connection-log-enabled: false
        #statement-log-enabled: false
        #result-set-log-enabled: false
      #开启WallFilter
      wall:
        enabled: true
        log-violation: true
        throw-exception: false
        config:
          delete-where-none-check: true

    #开启Web监控
    web-stat-filter:
      enabled: true
      exclusions: /druid/*,*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico url-pattern:/*
    #开启监控页面 
    stat-view-servlet: 
      enabled: true 
      login-username: admin 
      login-password: admin

你可能感兴趣的:(java,spring,boot,后端,java)