springboot-数据库的操作-Druid

Druid官方使用手册,或者中文手册。外网github,可能打不开。

基本介绍

1.HiKariCP:目前市面上非常优秀的数据源,是springboot2默认数据源

2.Druid:性能优秀,Druid提供性能卓越的连接池功能外,还集成了SQL监控,黑名单拦截等功能,强大的监控特性,通过Drud提供的监控功能,可以清楚知道连接池和SQL的工作情况,所以根据项目需要,我们也要掌握Druid和SpringBoot整合

3.整合Druid到Spring-Boot方式

  • 自定义方式

  • 引入starter方式


Druid的配置

  1. pom.xml引入Druid

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.17</version>
        </dependency>
  1. 创建Druid的配置类

@ConfigurationProperties("spring.datasource")是为了获取application.yml中的配置信息

配置DruidDataSource以后,就自动不使用HikariDataSource。

是靠@ConditionalOnMissingBean判断没有DataSource就使用默认来取舍数据源的。

@Configuration
public class DruidDataSourceConfig {
    @Bean
    @ConfigurationProperties("spring.datasource")
    public DataSource dataSource() throws SQLException {
        DruidDataSource druidDataSource = new DruidDataSource();
        druidDataSource.setFilters("stat,wall");//配置一个StatFilter过滤器和wall防火墙。
        return druidDataSource;
    }
}

Druid监控功能-SQL监控

需求:配置Druid的监控功能,包括SQL监控、SQL防火墙、Web应用,Session监控等

配置监控页面访问密码

增加监控功能

需要配置Servlet的 loginUsernameloginPassword这两个初始参数。

具体可以参考: 为Druid监控配置访问权限(配置访问监控信息的用户与密码)

示例如下:

<!-- 配置 Druid 监控信息显示页面 -->  
<servlet>  
    <servlet-name>DruidStatView</servlet-name>  
    <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>  
    <init-param>  
	<!-- 允许清空统计数据 -->  
	<param-name>resetEnable</param-name>  
	<param-value>true</param-value>  
    </init-param>  
    <init-param>  
	<!-- 用户名 -->  
	<param-name>loginUsername</param-name>  
	<param-value>druid</param-value>  
    </init-param>  
    <init-param>  
	<!-- 密码 -->  
	<param-name>loginPassword</param-name>  
	<param-value>druid</param-value>  
    </init-param>  
</servlet>  
<servlet-mapping>  
    <servlet-name>DruidStatView</servlet-name>  
    <url-pattern>/druid/*</url-pattern>  
</servlet-mapping>  

因为没有web.xml文件,我们使用的是在注册类中配置

    @Bean
    public ServletRegistrationBean statViewServlet(){
        StatViewServlet statViewServlet = new StatViewServlet();
        ServletRegistrationBean<StatViewServlet> statViewBean = new ServletRegistrationBean<>(statViewServlet,"/druid/*");
        statViewBean.addInitParameter("loginUsername","stein");
        statViewBean.addInitParameter("loginPassword","666666");
        return statViewBean;
    }

配置一个StatFilter,用于统计监控信息。

别名配置

StatFilter的别名是stat,这个别名映射配置信息保存在druid-xxx.jar!/META-INF/druid-filter.properties。

在spring中使用别名配置方式如下:

  <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
  	... ...
  	<property name="filters" value="stat" />
  </bean>

采用注册类配置。只需在上面注册@Bean的方法中添加

druidDataSource.setFilters("stat");//配置一个StatFilter,用于统计监控信息。

然后使用一个controller收发数据,让StatFilter监控到

@Controller
public class DruidSqlController {
    @Resource
    private JdbcTemplate jdbcTemplate;

    @ResponseBody
    @GetMapping("/sql")
    public List<Furn> crudDB(){
        String sql="SELECT * FROM `furn`";
        BeanPropertyRowMapper<Furn> rowMapper = new BeanPropertyRowMapper<>(Furn.class);
        List<Furn> furns = jdbcTemplate.query(sql, rowMapper);
        for (Furn furn : furns) {
            System.out.println(furn);
        }
        return furns;
    }
}

Druid监控功能-Web关联监控

作用:WebStatFilter用于采集web-jdbc关联监控的数据。可以查看是否遭到攻击。

Web.xml方式配置

  <filter>
      <filter-name>DruidWebStatFilter</filter-name>
      <filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>
      <init-param>
          <param-name>exclusions</param-name>
          <param-value>*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*</param-value>
      </init-param>
  </filter>
  <filter-mapping>
      <filter-name>DruidWebStatFilter</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>

使用配置类方式配置

    @Bean
    public FilterRegistrationBean webStatFilter(){
        WebStatFilter webStatFilter = new WebStatFilter();
        FilterRegistrationBean<WebStatFilter> filterRegistrationBean
                = new FilterRegistrationBean<>(webStatFilter);
        filterRegistrationBean.setUrlPatterns(Arrays.asList("/*"));
        filterRegistrationBean.addInitParameter("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
        return filterRegistrationBean;
    }

Druid监控功能-SQL防火墙

怎么配置防御SQL注入攻击

Druid提供了WallFilter,它是基于SQL语义分析来实现防御SQL注入攻击的。具体配置看这里: https://github.com/alibaba/druid/wiki/配置-wallfilter

Web.xml方式配置

  <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
      ...
      <property name="filters" value="wall"/>
  </bean>

使用配置类方式配置

依然在DruidDataSource里面配置

druidDataSource.setFilters("wall");//可以联合添加

Druid监控功能-Session监控

监控的是用户的session,而不是登录druid的session。


Druid监控功能-使用Druid-Spring-Boot-Starter配置

文档:Druid Spring Boot Starter

https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter

基本介绍:

1.前面我们使用的是自己引入druid+配置类方式整合Druid和监控

2.Druid-Spring-Boot-Starter可以让程序员在Spring Boot项目中更加轻松集成Druid和监控

操作步骤:

  1. 恢复成默认状态

  1. 修改pom.xml 注销druid的依赖

  1. 注销整个DruidDataSourceConfig配置类

  1. 运行测试是否已经恢复到原有Tomcat+HikariDataSource的配置

  1. application.xml配置

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/furn_ssm?useSSL=true&useUnicode=true&charactorEncoding=UTF-8
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver
    druid:
      stat-view-servlet:
        enabled: true
        login-username: jackie
        login-password: 888
        reset-enable: false
      web-stat-filter:
        enabled: true
        url-pattern: "/*"
        exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
      filter:
        stat:
          enabled: true
          log-slow-sql: true
          slow-sql-millis: 1000
        wall:
          enabled: true
          config:
            drop-table-allow: false
            //select-all-column-allow: false
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值