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;
}
}
网友评论