美文网首页
Spring Boot + Druid web 监控

Spring Boot + Druid web 监控

作者: 吃竹子的程序熊 | 来源:发表于2020-03-16 20:29 被阅读0次

Spring Boot + Druid web 监控

引入Jar包

        <!-- 使用阿里 Druid 数据库连接池-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.12</version>
        </dependency>
        <!-- 引入MySql驱动,版本和MySql数据库对应 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql-connector-java.version}</version>
        </dependency>

通过原生Servlet和Filter来实现Web监控

Druid提供了一个StatViewServlet类和一个WebStatFilter类来提供简单实现监控的方式。

可以通过继承的方式,并使用原生注解来实现。

通过Spring Boot Configuration来定制化配置监控


import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;

import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

/**
 * 配置druid数据源的监控
 * <p>
 * 默认不会引入该配置,如果需要使用该配置,需要手动引入该配置类。
 *
 * @author Hanqi <jpanda@aliyun.com>
 * @since 2018/12/5 15:07
 */
@Slf4j
public class DruidWebViewConfiguration {
    /**
     * druid登录用户名
     */
    @Value("${jpanda.druid.loginUserName:admin}")
    private String druidLoginUserName;

    /**
     * druid登录密码
     */
    @Value("${jpanda.druid.loginPassword:admin}")
    private String druidLoginPassword;
    /**
     * 使用随机数作为druid监控页面的访问地址
     * 最终生成的druid访问地址是 protocol://ip:port/druid/{druidPath}/login.html
     */
    @Value("${random.value}")
    private String druidPath;

    @Value("${server.port:8080}")
    private String port;

    @Bean
    @ConditionalOnMissingBean
    public ServletRegistrationBean druidServlet() {
        ServletRegistrationBean<StatViewServlet> servletRegistrationBean = new ServletRegistrationBean<>(new StatViewServlet(), "/druid/" + druidPath + "/*");
        // 获取本机IP地址,并添加到访问白名单
        String address = "localhost";
        try {
            address = InetAddress.getLocalHost().getHostAddress();
        } catch (UnknownHostException ignored) {
        }
        if (log.isWarnEnabled()) {
            log.warn("已随机生成Druid访问路径,请妥善保存:[{}://{}:{}/druid/{}/login.html]", "http", address, port, druidPath);
        }

        // 配置IP 白名单
        servletRegistrationBean.addInitParameter("allow", "192.168.16.110,127.0.0.1," + address);
        // 配置IP黑名单
        servletRegistrationBean.addInitParameter("deny", "192.168.16.111");
        // 登录用户名
        servletRegistrationBean.addInitParameter("loginUsername", druidLoginUserName);
        // 登录密码
        servletRegistrationBean.addInitParameter("loginPassword", druidLoginPassword);
        // 是否允许页面上的重置功能
        servletRegistrationBean.addInitParameter("resetEnable", "false");

        return servletRegistrationBean;
    }

    @Bean
    @ConditionalOnMissingBean
    public FilterRegistrationBean druidFilter(ServletRegistrationBean<StatViewServlet> StatViewServlet) {
        FilterRegistrationBean<WebStatFilter> druidFilterRegistrationBean = new FilterRegistrationBean<>(new WebStatFilter(), StatViewServlet);
        druidFilterRegistrationBean.setUrlPatterns(Collections.singletonList("/*"));

        Map<String, String> filterInitParameters = new HashMap<>(1);
        filterInitParameters.put("exclusions", "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico," + "/druid/" + druidPath + "/*");

        druidFilterRegistrationBean.setInitParameters(filterInitParameters);
        return druidFilterRegistrationBean;
    }
}

相关文章

网友评论

      本文标题:Spring Boot + Druid web 监控

      本文链接:https://www.haomeiwen.com/subject/icvoehtx.html