从零开始搭建企业管理系统(二):搭建SpringBoot工程并集成Druid

前言

在前一节我们介绍到,本项目采用前后端分离的架构,后端主要采用 Spring Boot 框架,今天我们就先将后端工程搭建起来。

环境准备

  • jdk17:java version “17.0.9”;Spring Boot 3.x 需要 jdk17 及以上;
  • maven3.x:Apache Maven 3.6.1;maven 3.3以上版本;
  • IntelliJ IDEA:IntelliJ IDEA 2022.2.3;
  • mysql:Mysql-8.0.35;
  • Lombok插件;

tips:以上只是我的版本,不是一定要和我的版本一致的。

创建工程

本项目中,我们使用的 IDE 工具是 IDEA 2022.2.3版本,可能和大家的版本不太一样,但是创建的步骤都是一样哒。

Spring Initializr 方式创建工程

点击 File -> New -> Project…,然后选择 Spring Initializr
在这里插入图片描述
如上图,需要选择 jdk 的版本,Spring Boot 3.x 只支持 jdk 17 及以上版本,所以各位如果没有 jdk 17 或者之上的版本,就要先去下载一个了。

tips:使用IDEA Spring Initializr创建项目其实就是集成了springboot官网提供的 Spring Initializr 模板来创建项目,是需要连接网络的,如果没有网络,建议使用maven方式创建项目。

选择工程依赖

我们在这里先选择如下依赖,其他依赖,等到需要用到的时候再添加,更能清楚没个依赖都是用来做什么的。
在这里插入图片描述
如上图所示, spring boot 版本为 3.2.0 (话说,springboot 的版本也更新的太快了吧。。。),还有一点需要注意的是,我们导入了 Lombok 的依赖,所以我们需要在 IDEA 中下载 Lombok 的插件,否则 Lombok 不会生效。

项目目录结构

项目结构如下图,我一般是先删除 Maven WrapperHELP.md 文件,然后将启动类改为 Application.class(多模块工程就别这样改了,要不然分不清,我只是强迫症),然后再将 application.properties 改为 application.yml 文件。
在这里插入图片描述
我个人整理之后的目录结构,强迫症来着,你们可以选择不用改
在这里插入图片描述

tips:可以使用 mvnw 脚本执行 Spring Boot Maven 插件,从而运行 Spring Boot 程序

项目 POM 文件

<?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>3.2.0</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.xm</groupId>
    <artifactId>xm-admin</artifactId>
    <version>1.0</version>
    <name>xm-admin</name>
    <description>xm-admin 后台管理系统</description>
    <properties>
        <java.version>17</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>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <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>
    </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>
        </plugins>
    </build>

</project>

运行工程

直接运行 Application.class 中的 main 方法即可运行 Spring Boot 程序,Spring Boot 就是这么便捷。
在这里插入图片描述

tips:如果对 yaml 文件还不熟悉的话,可以去康我的另一个博客,写的很详细哦(传送门)。

配置工程相关信息

将 application.yml 复制修改一份为 application-dev.yml,application.yml 配置文件存放公共的配置,application-{profile}.yml 配置文件则存放不同环境的配置。

编写 application.yml 文件,修改一些公共的参数,如项目路径,项目名称,Tomcat 等配置

server:
  # 运行端口
  port: 9527
  # 项目路径
  servlet:
    context-path: /xm
  # 都是给的默认值,可以不配,只是告诉大家 spring boot starter 大都都是修改参数就行
  tomcat:
    # uri 解析编码
    uri-encoding: UTF-8
    # 最大连接数
    max-connections: 8192
    threads:
      # 最大工作线程
      max: 200
      # 最小工作线程
      min-spare: 10

spring:
  # 程序名称
  application:
    name: xm-admin
  # 运行环境(dev、test、prod)
  profiles:
    active: dev

配置 Druid 数据库连接池

在项目中我们一般不会直接使用原生 JDBC 连接数据库,而是配置数据库连接池,在 Spring Boot 2.x 版本中,默认的数据库连接池从之前的 tomcat-pool 换成 HikariCP,因为HikariCP连接池性能格外优异,不过我还是喜欢用 druid 连接池,虽然在性能上不如 HikariCP,但是druid能够提供强大的监控和扩展功能,而且 druid 的性能也是很优秀的,只是比 HikariCP 慢上一些,使用本项目我们使用 druid 连接池。

添加POM依赖

<properties>
    <druid.version>1.2.20</druid.version>
</properties>

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

<!-- druid 数据库连接池 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-3-starter</artifactId>
    <version>${druid.version}</version>
</dependency>

添加配置

添加druid的启动器后,我们还需要自定义druid的相关配置,编写 application-dev.yml 文件

spring:
  # 配置数据源
  datasource:
    # 数据库连接池类型
    type: com.alibaba.druid.pool.DruidDataSource
    # mysql 6.0 以上的新驱动类
    driver-class-name: com.mysql.cj.jdbc.Driver
    # 新驱动类在 URL 中需要加上时区配置 serverTimezone=GMT%2B8(东八区),否则会插入数据可能会有时差
    url: jdbc:mysql://localhost:3306/xm_admin?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=GMT%2B8
    username: xm
    password: xm-admin
    # 配置 Alibaba Druid 连接池
    druid:
      # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
      filters: stat,wall,slf4j
      # 最大连接池数量 maxIdle已经不再使用
      max-active: 20
      # 初始化时建立物理连接的个数
      initial-size: 1
      # 获取连接时最大等待时间,单位毫秒
      max-wait: 60000
      # 最小连接池数量
      min-idle: 1
      # 既作为检测的间隔时间又作为testWhileIdel执行的依据
      time-between-eviction-runs-millis: 60000
      # 销毁线程时检测当前连接的最后活动时间和当前时间差大于该值时,关闭当前连接
      min-evictable-idle-time-millis: 300000
      # 用来检测连接是否有效的sql 必须是一个查询语句 mysql中为 select 'x' oracle中为 select 1 from dual
      validation-query: select 'x'
      # 申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
      test-while-idle: true
      # 申请连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true
      test-on-borrow: false
      # 归还连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true
      test-on-return: false
      # 是否缓存preparedStatement,也就是PSCache 官方建议MySQL下建议关闭 个人建议如果想用SQL防火墙 建议打开
      pool-prepared-statements: false
      max-open-prepared-statements: 20
      #当值大于0时poolPreparedStatements会自动修改为true
      max-pool-prepared-statement-per-connection-size: 20
      # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
      connect-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
      # 合并多个DruidDataSource的监控数据
      use-global-data-source-stat: true
      # 基础监控配置
      web-stat-filter:
        enabled: true
        # 添加过滤规则
        url-pattern: /*
        # 设置忽略哪些URL
        exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
        session-stat-enable: true
        session-stat-max-count: 100
      #设置视图拦截,访问druid监控页的账号和密码,默认没有
      stat-view-servlet:
        enabled: true
        # 访问路径为/druid时,跳转到StatViewServlet
        url-pattern: /druid/*
        reset-enable: true
        # 设置监控页面的登录名和密码
        login-username: admin
        login-password: admin
        # 白名单ip
        allow: 127.0.0.1
        # 黑名单(共同存在时,deny优先于allow)
        #deny: localhost

添加完配置后,就可以直接启动程序了,因为 Spring Boot 会自动将这些配置加载进去。我们来查看一下启动日志
在这里插入图片描述

tips:当然,这里要先安装并且启动mysql,并且创建mysql库,安装mysql可以查看我的另外一篇文章(window 安装 mysql 8.x)。

如上图所示,可以很明确的看到我们的 Druid 连接池已经创建完成,这个时候我们就可以在页面上监控我们的数据源了(如下图),访问我们配置好的路径 /druid/*,即访问 http://localhost:9527/xm/druid/ 就会被跳转到监控页面,由于我们配置了用户名和密码,所以需要进行登录,默认不用登录。
在这里插入图片描述

总结

到这里,我们的后端工程就算是搭建完成了,这节的知识点都是最最最基础的知识点了,如果还有小伙伴不懂的,还是可以问我的,有问必答!或者可以看我的另外两篇关于 Spring Boot 的博客。后面的博客应该就是关于统一结果返回,统一异常处理和统一日志等等功能了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值