软件编程
位置:首页>> 软件编程>> java编程>> SpringBoot详解如何进行整合Druid数据源

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

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

标签:SpringBoot,整合,Druid,数据源

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

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com