您当前的位置: 首页 >  ui

梁云亮

暂无认证

  • 1浏览

    0关注

    1211博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【精品】SpringBoot整合Druid

梁云亮 发布时间:2020-04-09 15:06:32 ,浏览量:1

Druid简介

Druid是Java语言中最好的数据库连接池。Druid能够提供强大的监控和扩展功能。 优点:

  • 可以监控数据库访问性能,Druid内置提供了一个功能强大的StatFilter插件,能够详细统计SQL的执行性能,这对于线上分析数据库访问性能有帮助。
  • 替换DBCP和C3P0。Druid提供了一个高效、功能强大、可扩展性好的数据库连接池。
  • 数据库密码加密。直接把数据库密码写在配置文件中,这是不好的行为,容易导致安全问题。DruidDruiver和DruidDataSource都支持PasswordCallback。
  • SQL执行日志,Druid提供了不同的LogFilter,能够支持Common-Logging、Log4j和JdkLog,开发者可以按需要选择相应的LogFilter,监控你应用的数据库访问情况。
  • 扩展JDBC,如果要对JDBC层有编程的需求,可以通过Druid提供的Filter-Chain机制,很方便编写JDBC层的扩展插件
SpringBoot集成Druid 第一步:创建项目,添加依赖
    
        org.springframework.boot
        spring-boot-starter
    
    
        org.springframework.boot
        spring-boot-starter-web
    
    
        org.springframework.boot
        spring-boot-starter-test
        test
    
   
    
        mysql
        mysql-connector-java
        runtime
    
    
        com.alibaba
        druid-spring-boot-starter
        1.1.22
    
    
       org.springframework.boot
       spring-boot-starter-jdbc
   

注:如果没有引入spring-boot-starter-jdbc,会报错:java.lang.ClassNotFoundException: org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType

第二步:配置文件
server:
  port: 80
  servlet:
    context-path: /imbp

spring:
  #配置数据源
  datasource:
  	type: com.alibaba.druid.pool.DruidDataSource
  	druid:
	    driver-class-name: com.mysql.cj.jdbc.Driver
	    url: jdbc:mysql://localhost:3306/db_test?useSSL=false&serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF8&autoReconnect=true&failOverReadOnly=false
	    username: root
	    password: root
	    # 连接池的配置信息:初始化大小,最小,最大
	    initial-size: 8
	    min-idle: 1
	    max-active: 20
	    # 配置获取连接等待超时的时间
	    max-wait: 60000
	    # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
	    time-between-eviction-runs-millis: 60000
	    # 配置一个连接在池中最小生存的时间,单位是毫秒
	    min-evictable-idle-time-millis: 300000
	    #验证库是否正常sql
	    validation-query: select 'x' from dual
	    #空闲时验证,防止连接断开
	    test-while-idle: true
	    test-on-borrow: false
	    test-on-return: false
	    # 打开PSCache,并且指定每个连接上PSCache的大小
	    pool-prepared-statements: true
	    max-open-prepared-statements: 20
	    max-pool-prepared-statement-per-connection-size: 20
	    # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
	    filters: stat,wall,slf4j
	    # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
	    connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
	    # 合并多个DruidDataSource的监控数据
	    use-global-data-source-stat: true
第三步:编写 druid 监控类
@Configuration
public class DruidConfiguration {

    @ConfigurationProperties(prefix = "spring.datasource.druid")
    @Bean
    public DataSource druid(){
        return new DruidDataSource();
    }

    /**
     * druid 数据源状态监控
     * @return
     */
    @Bean
    public ServletRegistrationBean statViewServlet(){
        //创建servlet注册实体
        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(),"/druid/*");
        //设置ip白名单
        servletRegistrationBean.addInitParameter("allow","127.0.0.1");
        //设置ip黑名单,如果allow与deny共同存在时,deny优先于allow
        servletRegistrationBean.addInitParameter("deny","192.168.0.19");
        //设置控制台管理用户
        servletRegistrationBean.addInitParameter("loginUsername","druid");
        servletRegistrationBean.addInitParameter("loginPassword","1234");
        //是否可以重置数据
        servletRegistrationBean.addInitParameter("resetEnable","false");
        return servletRegistrationBean;
    }

    /**
     * druid 过滤器
     * @return
     */
    @Bean
    public FilterRegistrationBean statFilter(){
        //创建过滤器
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
        //设置过滤器过滤路径
        filterRegistrationBean.addUrlPatterns("/*");
        //忽略过滤的形式
        filterRegistrationBean.addInitParameter("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
        return filterRegistrationBean;
    }
}
测试 验证系统使用的是Druid

按如下所示供测试代码,将断点设置到编号①所在的行,然后Debug高度可以看到dataSource接口的实现类就是durid的实现类,可以继续找到配置文件中的一些初始化参数

@RunWith(SpringRunner.class)
@SpringBootTest
class IntegratemyMyBatisPlusApplicationTests {

    @Autowired
    DataSource dataSource;

    @Test
    public void contextLoads() throws SQLException {
        Connection connection = dataSource.getConnection();
        PreparedStatement prepareStatement = connection.prepareStatement("select * from tb_emp where deptno='20'"); //----- ①
        ResultSet resultSet = prepareStatement.executeQuery();
        while (resultSet.next()) {
            String cityName = resultSet.getString("ename");
            System.out.println(cityName);
        }
    }
}

结果: 在这里插入图片描述

查看Druid监控

网址:http://localhost:80/imbp/druid/index.html ,其中:

  • localhost:指项目IP地址
  • 80:指项目端口号
  • imbp:指项目部署时的名称

结果: 在这里插入图片描述

监控中心说明如下: 名称作用数据源可以看到项目中管理的所有数据源配置的详细情况,除了密码没有显示外其他都在SQL监控可以查看所有的执行sql语句SQL防火墙druid提供了黑白名单的访问,可以清楚的看到sql防护情况Web应用可以看到目前运行的web程序的详细信息URI监控可以监控到所有的请求路径的请求次数、请求时间等其他参数Session监控可以看到当前的session状况,创建时间、最后活跃时间、请求次数、请求时间等详细参数JSONAPI通过api的形式访问Druid的监控接口,api接口返回Json形式数据
关注
打赏
1665409997
查看更多评论
立即登录/注册

微信扫码登录

0.0460s