SpringBoot详解如何进行整合Druid数据源

作者:鸣鼓ming 时间:2022-05-10 10:46:54 

Druid是数据库连接池,它能够提供强大的监控和扩展功能。官方文档

Spring Boot整合第三方技术的两种方式:

  • 自定义

  • 找starter场景

1.自定义方式

使用自定义方式整合Druid

SpringBoot详解如何进行整合Druid数据源

1.添加依赖

在pom.xml添加相关依赖

<!--数据库相关-->
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-data-jdbc</artifactId>
       </dependency>
       <dependency>
           <groupId>mysql</groupId>
           <artifactId>mysql-connector-java</artifactId>
           <version>5.1.6</version>
       </dependency>
       <dependency>
           <groupId>com.alibaba</groupId>
           <artifactId>druid</artifactId>
           <version>1.2.6</version>
       </dependency>
   </dependencies>

2.编写配置

application.properties

server.port=8080
spring.datasource.url=jdbc:mysql://localhost:3306/db_springtest?useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

配置Druid的监控页功能:

Druid内置提供了一个StatViewServlet用于展示Druid的统计信息。官方文档 - 配置StatViewServlet

这个StatViewServlet的用途包括:

  • 提供监控信息展示的html页面

  • 提供监控信息的JSON API

Druid内置提供一个StatFilter,用于统计监控信息。官方文档 - 配置_StatFilter

WebStatFilter用于采集web-jdbc关联监控的数据,如SQL监控、URI监控。官方文档 - 配置WebStatFilter

Druid提供了WallFilter,它是基于SQL语义分析来实现防御SQL注入攻击的。官方文档 - 配置 wallfilter

DataSourceConfig

package com.limi.springboottest2.config;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
import java.sql.SQLException;
import java.util.Arrays;
@Configuration
public class DataSourceConfig {
   @Bean
   @ConfigurationProperties("spring.datasource")//复用配置文件的数据源配置, 这样就不用写代码一个一个set了
   public DataSource dataSource() throws SQLException {
       DruidDataSource druidDataSource = new DruidDataSource();
       //加入监控和防火墙功能功能
       druidDataSource.setFilters("stat,wall");
       return druidDataSource;
   }
   /**
    * 配置 druid的监控页功能
    * @return
    */
   @Bean
   public ServletRegistrationBean statViewServlet(){
       StatViewServlet statViewServlet = new StatViewServlet();
       ServletRegistrationBean<StatViewServlet> registrationBean =
               new ServletRegistrationBean<>(statViewServlet, "/druid/*");
       //监控页账号密码:
       registrationBean.addInitParameter("loginUsername","admin");
       registrationBean.addInitParameter("loginPassword","123456");
       return registrationBean;
   }
   /**
    * WebStatFilter 用于采集web-jdbc关联监控的数据。
    */
   @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;
   }
}

3.测试

HelloController

package com.limi.springboottest2.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class HelloController {
   @Autowired
   private JdbcTemplate jdbcTemplate;
   @ResponseBody
   @GetMapping("/sql")
   public String test1(){
       String sql = "select count(*) from t_user";
       Long i = jdbcTemplate.queryForObject(sql, Long.class);
       return i.toString();
   }
}

多次点击刷新进行访问

SpringBoot详解如何进行整合Druid数据源

登录druid后台查看监控信息

账号admin, 密码123456

SpringBoot详解如何进行整合Druid数据源

SpringBoot详解如何进行整合Druid数据源

SpringBoot详解如何进行整合Druid数据源

2.starter方式(推荐)

使用场景启动器整合druid, 效果和自定义方式一样, 但更加方便

1.添加依赖

在pom.xml添加相关依赖

<!--数据库相关-->
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-data-jdbc</artifactId>
       </dependency>
       <dependency>
           <groupId>mysql</groupId>
           <artifactId>mysql-connector-java</artifactId>
           <version>5.1.6</version>
       </dependency>
       <dependency>
           <groupId>com.alibaba</groupId>
           <artifactId>druid-spring-boot-starter</artifactId>
           <version>1.1.17</version>
       </dependency>

pom.xml完整内容如下

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <parent>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-parent</artifactId>
       <version>2.7.0</version>
       <relativePath/> <!-- lookup parent from repository -->
   </parent>
   <groupId>com.limi</groupId>
   <artifactId>springboot-test2</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <name>springboot-test2</name>
   <description>Demo project for Spring Boot</description>
   <properties>
       <java.version>1.8</java.version>
   </properties>
   <dependencies>
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-web</artifactId>
       </dependency>
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-devtools</artifactId>
           <scope>runtime</scope>
           <optional>true</optional>
       </dependency>
       <dependency>
           <groupId>org.projectlombok</groupId>
           <artifactId>lombok</artifactId>
           <optional>true</optional>
       </dependency>
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-test</artifactId>
           <scope>test</scope>
       </dependency>
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-configuration-processor</artifactId>
           <optional>true</optional>
       </dependency>
       <!--数据库相关-->
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-data-jdbc</artifactId>
       </dependency>
       <dependency>
           <groupId>mysql</groupId>
           <artifactId>mysql-connector-java</artifactId>
           <version>5.1.6</version>
       </dependency>
       <dependency>
           <groupId>com.alibaba</groupId>
           <artifactId>druid-spring-boot-starter</artifactId>
           <version>1.1.17</version>
       </dependency>
   </dependencies>
   <build>
       <plugins>
           <plugin>
               <groupId>org.springframework.boot</groupId>
               <artifactId>spring-boot-maven-plugin</artifactId>
               <configuration>
                   <excludes>
                       <exclude>
                           <groupId>org.projectlombok</groupId>
                           <artifactId>lombok</artifactId>
                       </exclude>
                   </excludes>
               </configuration>
           </plugin>
           <!-- 下面插件作用是工程打包时,不将spring-boot-configuration-processor打进包内,让其只在编码的时候有用 -->
           <plugin>
               <groupId>org.springframework.boot</groupId>
               <artifactId>spring-boot-maven-plugin</artifactId>
               <configuration>
                   <excludes>
                       <exclude>
                           <groupId>org.springframework.boot</groupId>
                           <artifactId>spring-boot-configuration-processor</artifactId>
                       </exclude>
                   </excludes>
               </configuration>
           </plugin>
       </plugins>
   </build>
</project>

2.编写配置

application.properties

server.port=8080
spring.datasource.url=jdbc:mysql://localhost:3306/db_springtest?useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

#监控SpringBean
spring.datasource.druid.aop-patterns=com.limi.springboottest2.*  
# 底层开启功能,stat(sql监控),wall(防火墙)
spring.datasource.druid.filters=stat,wall

# 配置监控页功能
spring.datasource.druid.stat-view-servlet.enabled=true
spring.datasource.druid.stat-view-servlet.login-username=admin
spring.datasource.druid.stat-view-servlet.login-password=123456
spring.datasource.druid.stat-view-servlet.reset-enable=false

# 监控web
spring.datasource.druid.web-stat-filter.enabled=true
spring.datasource.druid.web-stat-filter.url-pattern=/*
spring.datasource.druid.web-stat-filter.exclusions='*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*'

# 对上面filters里面的stat的详细配置
spring.datasource.druid.filter.stat.slow-sql-millis=1000
spring.datasource.druid.filter.stat.log-slow-sql=true
spring.datasource.druid.filter.stat.enabled=true
spring.datasource.druid.filter.wall.enabled=true
spring.datasource.druid.filter.wall.config.drop-table-allow=false

3.测试

HelloController

package com.limi.springboottest2.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class HelloController {
   @Autowired
   private JdbcTemplate jdbcTemplate;
   @ResponseBody
   @GetMapping("/sql")
   public String test1(){
       String sql = "select count(*) from t_user";
       Long i = jdbcTemplate.queryForObject(sql, Long.class);
       return i.toString();
   }
}

多次点击刷新进行访问

SpringBoot详解如何进行整合Druid数据源

登录druid后台查看监控信息

账号admin, 密码123456

SpringBoot详解如何进行整合Druid数据源

SpringBoot详解如何进行整合Druid数据源

SpringBoot详解如何进行整合Druid数据源

来源:https://blog.csdn.net/qq_41865229/article/details/125412761

标签:SpringBoot,整合,Druid,数据源
0
投稿

猜你喜欢

  • JavaFx 实现按钮防抖功能

    2023-03-20 07:34:48
  • SpringBoot2 整合Ehcache组件,轻量级缓存管理的原理解析

    2022-02-07 22:04:34
  • 详解IntelliJ IDEA 自带的 HTTP Client 接口调用插件吊打 Postman

    2023-08-06 07:56:08
  • C#使用protobuf-net进行序列化的详细操作

    2021-11-17 02:32:41
  • springboot手写一个自己的starter源码

    2021-07-31 10:18:14
  • TKmybatis的框架介绍和原理解析

    2022-08-28 21:35:42
  • mybatis-plus分页查询的实现示例

    2023-11-25 04:57:57
  • Android编程之消息机制实例分析

    2023-07-28 07:24:38
  • Java并发编程之volatile与JMM多线程内存模型

    2023-10-19 12:13:48
  • Java操作hdfs文件系统过程

    2023-12-13 23:42:32
  • Java超详细教你写一个银行存款系统案例

    2022-01-04 22:33:59
  • java 按行读取文件并输出到控制台的方法

    2022-10-28 22:48:20
  • Java及nginx实现文件权限控制代码实例

    2022-05-01 02:48:18
  • C# 获取客户端IPv4地址的示例代码

    2022-09-12 12:39:34
  • Java使用递归法解决汉诺塔问题的代码示例

    2023-09-05 20:31:28
  • c++与c#的时间转换示例分享

    2022-08-22 07:21:40
  • springmvc+mybatis 做分页sql 语句实例代码

    2021-09-11 19:29:06
  • Spring boot工具类静态属性注入及多环境配置详解

    2022-10-02 16:12:37
  • 详解Spring Boot Profiles 配置和使用

    2021-10-05 22:54:57
  • Java 获取两个List的交集和差集,以及应用场景操作

    2021-11-21 17:49:43
  • asp之家 软件编程 m.aspxhome.com