avatar

十六小站

欢迎来到我的个人主页! 期待与您分享我的经验与故事,一起探索技术的无穷可能!

  • 首页
  • NAS专题
  • 关于
Home SpringBoot3.X-1(MP+Druid)
文章

SpringBoot3.X-1(MP+Druid)

Posted 8 days ago Updated 7 days ago
By 十六 已删除用户
19~25 min read

本次基于springboot-3.5.5,先附上文档地址:https://docs.spring.io/spring-boot/reference/data/sql.html

初始化springboot项目

项目创建步骤不做记录

集成mybaits-plus

先附上官网地址,具体参数可以

https://baomidou.com/

1. 引入pom依赖

Spring Boot3.5.5

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
    <version>3.5.13</version>
</dependency>

<!-- 自动3.5.9版本后分页组件要单独引入 -->
<dependency>
   <groupId>com.baomidou</groupId>
   <artifactId>mybatis-plus-jsqlparser</artifactId>
   <version>3.5.13</version>
</dependency>

 <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
 </dependency>

2. 添加yml配置

mybatis-plus:
  configuration:
    # MyBatis 配置
    map-underscore-to-camel-case: true
  global-config:
    # 全局配置
    db-config:
      # 数据库配置
      id-type: auto

3. 添加分页插件

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MybatisPlusConfig {

    /**
     * 添加分页插件
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        // 如果配置多个插件, 切记分页最后添加
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.POSTGRE_SQL));
        // 如果有多数据源可以不配具体类型, 否则都建议配上具体的 DbType
        return interceptor;
    }
}

4. 添加主键ID

对于第二步中的mybatis-plus.global-config.db-config.id-type 官方提供了多种内置的生成器

    /**
     * 数据库ID自增
     * <p>该类型请确保数据库设置了 ID自增 否则无效</p>
     */
    AUTO(0),
    /**
     * 该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT)
     */
    NONE(1),
    /**
     * 用户输入ID
     * <p>该类型可以通过自己注册自动填充插件进行填充</p>
     */
    INPUT(2),

    /* 以下2种类型、只有当插入对象ID 为空,才自动填充。 */
    /**
     * 分配ID (主键类型为number或string),
     * 默认实现类 {@link com.baomidou.mybatisplus.core.incrementer.DefaultIdentifierGenerator}(雪花算法)
     *
     * @since 3.3.0
     */
    ASSIGN_ID(3),
    /**
     * 分配UUID (主键类型为 string)
     * 默认实现类 {@link com.baomidou.mybatisplus.core.incrementer.DefaultIdentifierGenerator}(UUID.replace("-",""))
     */
    ASSIGN_UUID(4);

内置雪花算法默认会取网络地址加入到运算中 ,一般不会涉及到重复 ,如果特殊情况 ,需要使用redis、zk、数据库或者其他的手段来分发word-id保证每个不重复。

分布式/集群式场景下

mybaits-plus支持雪花算法的配置 。在分布式/集群场景下可以可以优先选择以下配置保证前缀的唯一。

工作节点ID:workerId

在 Snowflake 算法中,每个节点(或服务实例)都需要一个唯一的 workerId,用来生成全局唯一 ID 的一部分。它通常是 0~31(如果 workerId 占 5 位)的整数

数据中心ID:datacenterId

用于区分不同的数据中心或机房。Snowflake 算法中,datacenterId 和 workerId 组合起来确保在不同节点生成的 ID 不会冲突

首选网络地址:preferredNetworks

用于自动选择本机的 IP 或网卡。通常填写本机内网地址或者匹配的正则表达式,框架会优先选择这些网络地址来生成 workerId,方便在多网卡环境下区分节点

忽略的网卡:ignoredInterfaces

指定不需要考虑的网卡名称(支持正则),框架在自动选取 IP 时会排除这些网卡,例如 lo(本地环回)或 docker0

添加druid管理数据源

1. 添加配置

<!-- https://mvnrepository.com/artifact/com.alibaba/druid-spring-boot-starter -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-3-starter</artifactId>
    <version>1.2.27</version>
</dependency>

2. 添加数据源

spring:
  datasource:
  url: jdbc:postgresql://192.168.3.76:5432/longj
  username: postgres
  password: 123456
  type: com.alibaba.druid.pool.DruidDataSource #设置数据源的类型
  druid:
    db-type: postgresql
    asyncInit: true  # 异步初始化避免阻塞
    # 初始连接数
    initialSize: 5
    # 最小连接池数量
    minIdle: 10
    # 最大连接池数量
    maxActive: 20
    # 配置获取连接等待超时的时间
    maxWait: 60000
    # 配置连接超时时间
    connectTimeout: 30000
    # 配置网络超时时间
    socketTimeout: 60000
    # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
    timeBetweenEvictionRunsMillis: 60000
    # 配置一个连接在池中最小生存的时间,单位是毫秒
    minEvictableIdleTimeMillis: 300000
    # 配置一个连接在池中最大生存的时间,单位是毫秒
    maxEvictableIdleTimeMillis: 900000
    # 配置检测连接是否有效
    validationQuery: SELECT 1
    testWhileIdle: true
    testOnBorrow: false
    testOnReturn: false

3. 配置监控页面(可选)

3.1 添加yml配置

spring:
  datasource:
    druid:
      statViewServlet: # Druid监控页面配置
        allow: 192.168.3.0/16 # 允许访问的IP段
        deny: ''             # 拒绝访问的IP
        reset-enable: false  # 禁用重置按钮
        enabled: true # 启用Druid监控页面
        login-username: admin # 监控页面登录用户名
        login-password: admin # 监控页面登录密码
        url-pattern: /druid/* # 监控页面的访问URL路径
      web-stat-filter: # Druid Web统计过滤器配置
        enabled: true # 启用Web统计过滤器
        session-stat-enable: true # 启用会话统计功能
        session-stat-max-count: 1000 # 最大会话统计数量
        url-pattern: /*
        exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*'
      filter: # Druid过滤器配置
        stat: # SQL统计过滤器配置
          enabled: true # 启用SQL统计过滤器
          log-slow-sql: true # 启用慢SQL日志记录
          slow-sql-millis: 10 # 慢SQL的执行时间阈值(单位:毫秒)
        wall:
          enabled: true

3.2 查看监控

到这里就完成注册 ,可以打开页面访问:http://192.168.3.103:8080/druid查看,可以看到监控面板。、

发送请求后再次查看面板

到这里大功告成。

4. 注意

  1. springboot3以后需要使用的是druid-spring-boot-3-starter 的依赖。

  2. spring.datasource.druid.filter可以根据自己的日志框架进行配置。具体详见配置https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE-wallfilter

高手之路
Java
License:  CC BY 4.0
Share

Further Reading

Sep 6, 2025

记一次前端优化(vue2)

由于博主所在公司的前端缺乏高端人员,导致前端代码臃肿,前端页面加载耗时基本上在min级别,于是博主决定进行一次优化 。首先贴上优化前的加载截图 ,明显可以看出 ,资源加载竟然加载了45.2MB,耗时在2.1min。 1. 引入Bundle Size检查打包体积 (1)下载依赖

Sep 6, 2025

SpringBoot3.X-2(缓存Redis/memory)

本文主要是实现缓存的集成,由于是单体项目 ,目前整合了内存缓存和Redis缓存两种,可以通过配置来切换。 引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-sta

Sep 5, 2025

SpringBoot3.X-1(MP+Druid)

本次基于springboot-3.5.5,先附上文档地址:https://docs.spring.io/spring-boot/reference/data/sql.html 初始化springboot项目 项目创建步骤不做记录 集成mybaits-plus</

OLDER

Onlyoffice编译

NEWER

SpringBoot3.X-2(缓存Redis/memory)

Recently Updated

  • 记一次前端优化(vue2)
  • SpringBoot3.X-2(缓存Redis/memory)
  • SpringBoot3.X-1(MP+Druid)
  • Onlyoffice编译
  • K6+Playwright实现并发测试

Trending Tags

Java Docker 前端 中间件 数据库 群晖 unraid

Contents

©2025 十六小站. Some rights reserved.

Using the Halo theme Chirpy