druid数据源-为监控而生

我用的druid版本0.2.9:

<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>druid</artifactId>
  <version>0.2.9</version>
</dependency>

由于这个版本的ip获取的有问题,所以覆盖了druid的servlet,并重写获取ip的方法:

package com.xxx.web.servlet;

import com.alibaba.druid.support.http.StatViewServlet;
import com.xxx.web.utils.ClientIpUtils;
import org.apache.log4j.Logger;

import javax.servlet.http.HttpServletRequest;

/**
 * Created by caiya on 15/9/18.
 */
public class StatViewServletWrapper extends StatViewServlet {

    private static final Logger logger = Logger.getLogger(StatViewServletWrapper.class);

    @Override
    public boolean isPermittedRequest(HttpServletRequest request) {
        String remoteAddress = ClientIpUtils.getClientIP(request);
        return super.isPermittedRequest(remoteAddress);
    }
}
package com.xxx.web.utils;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.lang3.StringUtils;

public class ClientIpUtils {

   /**
    * 获取调用端的IP地址
    * @param request
    * @return
    */
   public static String getClientIP(HttpServletRequest request) {   
      String ip = __getClientIp(request);
      if(StringUtils.isEmpty(ip))
         return ip;
      return ip.replaceAll("::1", "").replaceAll(",", "").trim();
   } 
   
   private static String __getClientIp(HttpServletRequest request){
      String ip = request.getHeader("x-forwarded-for");   
       if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {   
           ip = request.getHeader("Proxy-Client-IP");   
       }   
       if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {   
           ip = request.getHeader("WL-Proxy-Client-IP");   
     
       }   
       if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {   
           ip = request.getRemoteAddr();   
       }   
       return ip; 
   }
}

数据源配置:

<bean id="stat-filter" class="com.alibaba.druid.filter.stat.StatFilter">
    <property name="slowSqlMillis" value="5000" />
    <property name="logSlowSql" value="true" />
    <property name="mergeSql" value="true" />
</bean>
<bean id="wall-filter" class="com.alibaba.druid.wall.WallFilter">
   <property name="dbType" value="mysql" />
   <property name="logViolation" value="true"/>
   <property name="throwException" value="false"/>
</bean>
<bean id="log4j-filter" class="com.alibaba.druid.filter.logging.Log4jFilter">
</bean>

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
   init-method="init" destroy-method="close">
   <property name="url" value="${jdbc.url}" />
   <property name="username" value="${jdbc.user}" />
   <property name="password" value="${jdbc.password}" />
   <property name="driverClassName" value="com.mysql.jdbc.Driver" />
   <property name="filters" value="log4j" />
   <property name="proxyFilters">
      <list>
         <ref bean="stat-filter" />
      </list>
   </property>
   <property name="maxActive" value="${jdbc.maxActive}" />
   <property name="initialSize" value="${jdbc.initialSize}" />
   <property name="maxWait" value="${jdbc.maxWait}" />
   <property name="minIdle" value="${jdbc.minIdle}" />
   <property name="timeBetweenEvictionRunsMillis" value="${jdbc.timeBetweenEvictionRunsMillis}" />
   <property name="minEvictableIdleTimeMillis" value="${jdbc.minEvictableIdleTimeMillis}" />

   <property name="validationQuery" value="SELECT ‘x‘" />
   <property name="testWhileIdle" value="true" />
   <property name="testOnBorrow" value="false" />
   <property name="testOnReturn" value="false" />

   <property name="poolPreparedStatements" value="false" />
</bean>

web.xml:

<servlet>
   <servlet-name>DruidStatView</servlet-name>
   <servlet-class>com.xxx.web.servlet.StatViewServletWrapper</servlet-class>
   <init-param>
      <param-name>allow</param-name>
      <param-value>127.0.0.1,112.112.112,223.223.223</param-value>
   </init-param>
   <init-param>
      <param-name>deny</param-name>
      <param-value></param-value>
   </init-param>
   <init-param>
      <param-name>resetEnable</param-name>
      <param-value>true</param-value>
   </init-param>
</servlet>
<servlet-mapping>
   <servlet-name>DruidStatView</servlet-name>
   <url-pattern>/druid/*</url-pattern>
</servlet-mapping>

前端访问路径:http://ip:port/druid/index.html(注意nginx的静态资源配置)

时间: 2024-11-06 15:02:46

druid数据源-为监控而生的相关文章

springboot集成druid数据源并且监控

Druid是Java语言中最好的数据库连接池,并且能够提供强大的监控和扩展功能. 业界把 Druid 和 HikariCP 做对比后,虽说 HikariCP 的性能比 Druid 高,但是因为 Druid 包括很多维度的统计和分析功能,所以这也是大家都选择使用它的原因. 首先配置 druid maven 依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactI

(转)阿里巴巴Druid数据源及使用

原文链接:https://blog.csdn.net/yanguo110/article/details/68944659 第一部分:数据源的集中比较. 目前常用的数据源主要有c3p0.dbcp.proxool.druid,先来说说他们Spring 推荐使用dbcp:Hibernate 推荐使用c3p0和proxool1. DBCP:apacheDBCP(DataBase connection pool)数据库连接池.是apache上的一个 java连接池项目,也是 tomcat使用的连接池组件

SpringBoot整合Druid数据源详细文档

1.数据库结构 2.项目结构 3.pom.xml文件 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>mysql</groupI

DRUID连接池的使用——为监控而生的DB池[转]

DRUID介绍 DRUID是阿里巴巴开源平台上一个数据库连接池实现,它结合了C3P0.DBCP.PROXOOL等DB池的优点,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行情况,可以说是针对监控而生的DB连接池(据说是目前最好的连接池,不知道速度有没有BoneCP快). 配置参数 和其它连接池一样DRUID的DataSource类为:com.alibaba.druid.pool.DruidDataSource,基本配置参数如下: 配置 缺省值 说明 name 配置这个属性的意义在于,

spring boot基于DRUID数据源密码加密及数据源监控实现

前言 随着需求和技术的日益革新,spring boot框架是越来越流行,她也越来越多地出现在我们的项目中,当然最主要的原因还是因为spring boot构建项目实在是太爽了,构建方便,开发简单,而且效率高.今天我们并不是来专门学习spring boot项目的,我们要讲的是数据源的加密和监控,监控到好说,就是不监控也没什么问题,但是数据源加密却涉及到我们的系统安全.对于平时的学习测试,我们在项目中配置数据库明文密码是没什么问题的,因为我们的数据不重要,也就无所谓,但是在现实环境下的生产平台,配置明

Druid数据源SQL数据库与Spring监控

Druid监控概要说明 为什么要监控? Druid是什么?德鲁伊 URL监控配置说明 配置步骤 步骤 配置 第一步 web.xml 配置 WebStatFilter 第二步 WebStatFilter 配置拦截参数,Cookie或Session中的用户名 第三步 访问Servlet /druid 查看监控结果 配置web.xml WebStatFilter https://github.com/alibaba/druid/wiki/配置 URL监控效果 Session监控效果 SQL监控配置说明

SpringBoot配置Druid数据源

在我刚开始接触JDBC的时候,用的是DriveManager驱动来连接数据库的.而现在大多是用DataSource. 这里先简单说一下区别: 1.datasource是与连接池获取连接,而DriverManager是获取与数据库的连接!DriverManager类的主要作用是管理注册到DriverManager中的JDBC驱动程序,并根据需要使用JDBC驱动程序建立与数据服务器的网络连接.但是建立与数据库的连接是一项较耗资源的工作,频繁的进行数据库连接建立操作会产生较大的系统开销,为了解决上述问

druid数据源

Druid是一个JDBC组件,它包括三部分:  DruidDriver 代理Driver,能够提供基于Filter-Chain模式的插件体系. DruidDataSource 高效可管理的数据库连接池. SQLParser Druid可以做什么?  1) 可以监控数据库访问性能,Druid内置提供了一个功能强大的StatFilter插件,能够详细统计SQL的执行性能,这对于线上分析数据库访问性能有帮助. 2) 替换DBCP和C3P0.Druid提供了一个高效.功能强大.可扩展性好的数据库连接池.

012 druid数据源

一 . 概述 我们首先在springboot之中配置一个数据源. 二 . 数据源的配置 在springboot之中,配置一个数据源变得十分的简单了.我们只需要使用application.properties文件就可以了. spring.datasource.password=trek spring.datasource.username=root spring.datasource.url=jdbc:mysql://localhost:3306/springboot spring.datasou