Skip to content

注册中心

  1. 项目使用 Nacos 作为注册中心和配置中心,能够实现服务的动态注册、发现以及配置的集中管理。Nacos 是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台,支持多种服务注册与配置管理方式。
  2. 项目已实现工程化 Nacos 注册配置中心,本地无需单独下载、安装、部署 Nacos 注册中心服务,只需启动项目本身的工程化 Nacos 注册配置中心即可启动 Nacos 治理服务。

引言

首先,我需要明确整个过程的步骤。大致步骤应该是:

1. 环境准备:确保已经安装了 JDK17、IntelliJ IDEA 和 Maven。
2. 打开项目:使用 IntelliJ IDEA 搭建一个现有的项目。
3. 配置项目:编写必要的代码和配置。
4. 打包项目:使用 Maven 将项目打包成 JAR 文件。
5. 部署项目:将打包好的 JAR 文件上传到服务器,并配置运行环境。
6. 运行项目:在服务器上启动 JAR 文件,并验证项目是否正常运行。

接下来,我需要详细思考每一步的具体操作,确保教程中的每一步都清晰明了,适合不同水平的读者。

环境准备

IntelliJ IDEA 是一款由 JetBrains 开发的 Java 集成开发环境(IDE),支持多种编程语言和框架。详细的安装步骤请查阅 《基础环境搭建>>安装-IDEA》 章节。

Nacos:
    作为服务注册中心,管理所有微服务的注册与发现。
    作为配置中心,集中管理微服务的配置。
Seata:
    集成到微服务中,解决分布式事务问题。
    配置 Seata Server 并与 Nacos 集成,实现全局事务管理。
OAuth2:
    使用 Spring Security OAuth2 实现认证与授权。
    配置授权服务器(Authorization Server)和资源服务器(Resource Server),保护微服务接口。

打开项目

IntelliJ IDEA 是一款强大的 IDE,非常适合开发 Spring Boot 项目。以下是详细步骤:

  1. 准备工作
安装 IntelliJ IDEA:确保已安装 IntelliJ IDEA(Community 或 Ultimate 版)。
安装 JDK:Spring Boot 需要 JDK 17 或更高版本(推荐JDK17)。
安装 Maven/Gradle:Spring Boot 项目通常使用 Maven 或 Gradle 构建工具。

TIP

特别备注:目前官方全系列项目全部采用 Maven 做版本依赖管理,因此推荐使用 Maven。

  1. 打开项目

启动 IntelliJ IDEA

启动IDEA

打开项目:

打开项目

选择项目:

打开项目

选中指定项目后,点击 OK

TIP

信任项目:首次打开时,IDE 会询问是否信任项目,点击 Trust Project

打开项目后如下图:

打开项目

  1. 依赖下载

等待依赖下载:IDEA 会自动下载依赖并构建项目。

TIP

IntelliJ IDEA 中配置 Maven 是开发 Java 项目的关键步骤。打开项目网络正常的情况会自动下载 Maven 依赖包。当然我们也可以自行指定 Maven 依赖版本。

以下是详细的配置教程:

  • 检查 Maven

打开终端或命令提示符,检查 Maven 是否安装,运行以下命令:

E:\apache-maven-3.8.4\bin>mvn -v
Apache Maven 3.8.4 (9b656c72d54e5bacbed989b64718c159fe39b537)
Maven home: E:\apache-maven-3.8.4
Java version: 1.8.0_321, vendor: Oracle Corporation, runtime: C:\Program Files\Java\jdk1.8.0_321\jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 11", version: "10.0", arch: "amd64", family: "windows"

如果显示 Maven 版本信息,说明已安装。

  • 安装 Maven

如果未安装,可以从 Maven 官网 下载并安装。

Maven下载

TIP

根据实际需要下载需要的版本,此处不作强行要求,也可以使用官方使用的 apache-maven-3.8.4 版本。

  • 配置 Maven

打开设置:进入 File > Settings(Windows/Linux)IntelliJ IDEA > Preferences(macOS)

找到 Maven 配置:在左侧导航栏中,选择 Build, Execution, Deployment > Build Tools > Maven

Maven下载

> 配置 Maven 主目录:
在 `Maven home path` 中,选择已安装的 `Maven` 路径(例如:`E:\apache-maven-3.8.4`)。

> 配置用户设置文件:
在 User settings file 中,指定 settings.xml 文件的路径(通常位于 ~/.m2/settings.xml)。

> 配置本地仓库:
在 Local repository 中,指定 Maven 本地仓库路径(通常位于 ~/.m2/repository)。

应用更改:

点击 ApplyOK 保存配置。

安装依赖

项目设置 Maven 依赖后,先点击 clean 清理工程,然后点击 install 安装项目所需的依赖。

导入注册中心Nacos脚本

项目集成 NacosSeataOAuth2 是一种常见的微服务架构方案,能够实现服务注册与发现、分布式事务管理和安全认证授权。

1. Nacos
    功能:作为注册中心和配置中心,实现服务的动态注册、发现以及配置的集中管理。
    作用:
        服务注册与发现:微服务启动时自动注册到 Nacos,其他服务可通过服务名调用。
        配置管理:支持动态配置更新,无需重启服务。
2. Seata
    功能:分布式事务解决方案,提供 AT、TCC、Saga 等事务模式,确保跨服务的数据一致性。
    作用:
        在微服务架构中,解决跨服务调用的分布式事务问题。
        通过全局事务 ID 和分支事务协调器(TC)管理事务。
3. OAuth2
    功能:基于 OAuth 2.0 协议的认证与授权框架,保护微服务接口的安全。
    作用:
        实现统一的身份认证和权限管理。
        支持单点登录(SSO)和令牌(Token)机制,保护服务资源。

整个项目的数据脚本包括:

1. Nacos注册中心脚本:`xiaomayi.nacos.sql`。
2. 项目业务库表脚本:`xiaomayi.nacos.elevue.sql`。
3. OAuth2认证中心脚本:`xiaomayi.oauth2.sql`。
4. Seata分布式事务脚本: `xiaomayi.seata.sql`。

温馨提示

此处需要特别说明是 xiaomayi.oauth2.sqlxiaomayi.seata.sql 两个脚本因业务场景需要已集成至业务库表表 xiaomayi.nacos.elevue.sql 脚本中。

使用 Navicat 创建数据库并导入脚本的步骤如下:

  1. 打开 Navicat

MySQL

启动 Navicat,连接到你的本地数据库服务器(如 MySQL 等)。

MySQL

MySQL

MySQL

  1. 创建新数据库

右键点击连接名称,选择 新建数据库

MySQL

输入数据库名称,选择字符集和排序规则(如 utf8mb4utf8mb4_general_ci),点击 确定

  1. 打开数据库

在左侧连接树中,双击新建的数据库以打开它。

MySQL

  1. 导入脚本

右键点击数据库名称,选择 运行 SQL 文件...

在弹出的窗口中,点击“文件”旁的“...”按钮,选择要导入的 SQL 脚本文件。

MySQL

MySQL

确认文件路径后,点击 开始 执行导入。

MySQL

  1. 检查导入结果

导入完成后,查看是否有错误提示。若无错误,数据库和表结构应已创建成功。可通过查询表数据或查看表结构来验证导入结果。

MySQL

按照以上步骤,你可以在 Navicat 中成功创建 xiaomayi.nacos.sql 数据库并导入 SQL 脚本。

注意事项

  1. 备份数据:导入前建议备份现有数据,以防意外。
  2. 脚本兼容性:确保 SQL 脚本与数据库类型兼容。
  3. 权限:确保有足够的权限创建数据库和导入数据。

导入项目数据库SQL脚本

  1. 创建新数据库

右键点击连接名称,选择 新建数据库

MySQL

输入数据库名称,选择字符集和排序规则(如 utf8mb4utf8mb4_general_ci),点击 确定

  1. 打开数据库

在左侧连接树中,双击新建的数据库以打开它。

MySQL

  1. 导入脚本

右键点击数据库名称,选择 运行 SQL 文件...

在弹出的窗口中,点击“文件”旁的“...”按钮,选择要导入的 SQL 脚本文件。

MySQL

MySQL

确认文件路径后,点击 开始 执行导入。

MySQL

MySQL

MySQL

  1. 检查导入结果

导入完成后,查看是否有错误提示。若无错误,数据库和表结构应已创建成功。可通过查询表数据或查看表结构来验证导入结果。

MySQL

按照以上步骤,你可以在 Navicat 中成功创建 xiaomayi.nacos.elevue.sql 数据库并导入 SQL 脚本。

注意事项

  1. 备份数据:导入前建议备份现有数据,以防意外。
  2. 脚本兼容性:确保 SQL 脚本与数据库类型兼容。
  3. 权限:确保有足够的权限创建数据库和导入数据。

启动Nacos注册中心服务

启动Gateway网关服务

启动OAuth2认证中心服务

启动Seata分布式事务服务

启动System后台系统服务

启动User用户中心服务

启动Order订单中心服务

启动Product产品中心服务

启动CMS新闻资讯服务

启动Job定时任务调度服务

启动Generator代码生成器服务

启动Admin后台管理应用服务

启动Web网站应用服务

启动Uniapp客户终端服务

配置项目

在项目中,通常需要为不同的环境(如本地、开发、测试、UAT、生产)配置不同的配置文件。通过多环境配置,可以灵活地管理不同环境下的参数(如数据库连接、日志级别、第三方服务地址等)。

本项目采用多环境配置文件的命名规则,支持通过 application-{profile}.propertiesapplication-{profile}.yml 文件来定义不同环境的配置。其中 {profile} 是环境名称。

# 本地环境
application-local.yml

# 开发环境
application-dev.yml

# 测试环境
application-test.yml

# UAT 环境
application-uat.yml

# 生产环境
application-prod.yml

TIP

默认情况下,会加载 application.propertiesapplication.yml 作为通用配置,然后根据激活的环境加载对应的配置文件。

本项目的启动模块是 xiaomayi-modules/xiaomayi-admin 模块,在模块的 POM 文件中定义了支持多种环境变量,包括 localdevtestuatprod 等环境参数和变量。

<!-- 全局编译环境变量 -->
<profiles>
    <!-- 本地开发环境 -->
    <profile>
        <id>local</id>
        <properties>
            <package.environment>local</package.environment>
        </properties>
        <activation>
            <!-- 设置默认开启本地环境 -->
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>
    <!-- 开发环境 -->
    <profile>
        <id>dev</id>
        <properties>
            <package.environment>dev</package.environment>
        </properties>
    </profile>
    <!-- 测试环境 -->
    <profile>
        <id>test</id>
        <properties>
            <package.environment>test</package.environment>
        </properties>
    </profile>
    <!-- 预发布环境 -->
    <profile>
        <id>uat</id>
        <properties>
            <package.environment>uat</package.environment>
        </properties>
    </profile>
    <!-- 生产环境 -->
    <profile>
        <id>prod</id>
        <properties>
            <package.environment>prod</package.environment>
        </properties>
    </profile>
</profiles>

通过 @package.environment@ 作为占位,可以在 application.ymlapplication.properties 中动态设置 spring.profiles.active

spring:
  profiles:
    active: @package.environment@

环境变量和参数配置后,在工具 maven 插件中会同步读取并呈现,如下图:

环境变量

本次项目打包我们模拟生产环境发布,选择 prod 环境分支,因此根据配置文件规则,默认读取的是 application.yml 公共配置文件 和 application-prod.yml 分支环境配置文件。

环境变量

  1. 公共环境 application.yml 配置文件
js
# 全局配置
spring:
  application:
    name: xiaomayi-admin
  #  main:
  #    allow-bean-definition-overriding: true
  # 全局配置文件
  config:
    # 导入配置文件
    import:
      # Mybatis配置文件
      - configs/application-mybatis.yml
      # 日志配置文件
      - configs/application-logger.yml
      # 安全认证配置文件
      - configs/application-security.yml
      # 在线文档配置文件
      - configs/application-springdoc.yml
      # knife4j配置文件
      - configs/application-knife4j.yml
      # freemarker模板引擎配置文件
      - configs/application-freemarker.yml
      # thymeleaf模板引擎配置文件
      - configs/application-thymeleaf.yml
      # 多租户配置文件
      - configs/application-tencent.yml
      # actuator监控文件
      - configs/application-actuator.yml
      # 微信支付、支付宝支付配置文件
      - configs/application-pay.yml
  # 运行环境 local|dev|test|uat|prod,根据active动态加载YML配置文件
  profiles:
    active: @package.environment@
  # 国际化资源
  messages:
    # 国际化资源文件路径
    basename: i18n/messages
    encoding: UTF-8
  # 文件上传配置
  servlet:
    # 设置最大文件上传大小为10MB
    multipart:
      # 开启上传文件配置
      enabled: true
      # 文件上传临时保存位置,没有写入最终保存位置时存放的位置;
      location: /data/
      # 上传单个文件最大大小,设置-1表示不限制
      max-file-size: 10MB
      # 上传一组文件最大大小,设置-1表示不限制
      max-request-size: 10MB
      # 是否延迟解析,相当于懒加载
      resolve-lazily: false
      # 文件大小阈值,当大于这个阈值时将写入到磁盘,否则存在内存中,默认为0
      file-size-threshold: 0
  # 时间格式化
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8
  # 开发工具
  devtools:
    restart:
      # 开启热部署(更改文件后,自动重启)
      enabled: true
      # 设置哪些资源变动后不触发热部署,会覆盖默认的exclude内容(资源不会触发重启,但会触发实时重新加载)
      #exclude: WEB-INF/**,static/**
      # 监控额外的路径(优先于exclude)
      #additional-paths: src/main/java

##Actuator配置:暴露敏感路径,默认情况下,敏感路径并不暴露
#management:
#  endpoints:
#    web:
#      exposure:
#        # 暴露xxx端点,如需暴露多个,用,分隔;如需暴露所有端点,用'*'
#        include: "*"
#  endpoint:
#    health:
#      # 是否展示健康检查详情
#      show-details: ALWAYS
#
## info信息会显示到SpringBootAdmin的server端,这里取的是pom文件中的数据
#info:
#  version: @project.version@
#  groupId: @project.groupId@
#  artifactId: @project.artifactId@

TIP

上述配置中 spring.config.import 等导入的配置则为其他独立的配置文件(按需引入)。

独立配置文件导入方式如下:

# 全局配置文件
config:
  # 导入配置文件
  import:
    # Mybatis配置文件
    - configs/application-mybatis.yml
    # 其他配置文件(按需引入)
  1. 环境分支 application-prod.yml 配置文件
js
# 服务配置
server:
  # 端口
  port: 8081
  servlet:
    # 访问上下文前缀
    context-path: /api

spring:
  # 全局配置
  config:
    # 导入配置
    import:
      # redis缓存配置,按需引入
      - configs/prod/application-redis.yml
      # 邮件配置,按需引入
      - configs/prod/application-email.yml
      # 阿里云OSSSMS配置,按需引入
      - configs/prod/application-aliyun.yml
      # Minio文件存储配置,按需引入
      - configs/prod/application-minio.yml
      # Elastic搜索引擎配置,按需引入
      - configs/prod/application-elastic.yml
      # 钉钉消息配置,按需引入
      - configs/prod/application-dingtalk.yml
      # 令牌配置,按需引入
      - configs/prod/application-token.yml
  # 数据源配置
  datasource:
    # 连接池类型
    type: com.alibaba.druid.pool.DruidDataSource
    dynamic:
      # 设置默认的数据源或者数据源组,默认值为master
      primary: master
      # 严格匹配数据源,默认false,true未匹配到指定数据源时抛异常,false使用默认数据源
      strict: false
      # 多数据源支持,切记实际使用时按需使用,不需要的数据源注释掉
      datasource:
        # 主数据库MySQL
        master:
          driverClassName: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://127.0.0.1:3306/xiaomayi.elevue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
          username: root
          password: root
#        # 从数据库MySQL,切记主从库时从库与主库表结构一致
#        slave:
#          enabled: false
#          driverClassName: com.mysql.cj.jdbc.Driver
#          url: jdbc:mysql://127.0.0.1:3306/xiaomayi.elevue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
#          username: root
#          password: 123456
#        # 数据库PG
#        postgres:
#          enabled: false
#          driverClassName: org.postgresql.Driver
#          url: jdbc:postgresql://localhost:5432/xiaomayi.elevue?useUnicode=true&characterEncoding=utf8&useSSL=true&autoReconnect=true&reWriteBatchedInserts=true
#          username: postgres
#          password: 123456
#        # 数据库MSSQL
#        sqlserver:
#          enabled: false
#          driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
#          url: jdbc:sqlserver://localhost:1433;DatabaseName=xiaomayi.elevue;SelectMethod=cursor;encrypt=false;rewriteBatchedStatements=true
#          username: sa
#          password: 123456
    # Druid的其他属性配置 springboot3整合情况下,数据库连接信息必须在Druid属性下
    druid:
      # 初始连接物理个数
      initialSize: 5
      # 最小连接池数量
      minIdle: 10
      # 最大连接池数量
      maxActive: 20
      # 配置获取连接等待超时的时间,单位毫秒
      maxWait: 60000
      # 配置连接超时时间
      connectTimeout: 30000
      # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
      timeBetweenEvictionRunsMillis: 60000
      # 配置一个连接在池中最小生存的时间,单位是毫秒
      minEvictableIdleTimeMillis: 300000
      # 配置一个连接在池中最大生存的时间,单位是毫秒
      maxEvictableIdleTimeMillis: 900000
      # 用来检测数据库连接是否有效的sql 必须是一个查询语句(oracle中为 select 1 from dual)
      validationQuery: SELECT 1 FROM DUAL
      # 申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
      testWhileIdle: true
      # 申请连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true
      testOnBorrow: false
      # 归还连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true
      testOnReturn: false
      # 打开PSCache,并且指定每个连接上PSCache的大小
      # 是否缓存preparedStatement, 也就是PSCache,PSCache对支持游标的数据库性能提升巨大,比如说oracle,mysql下建议关闭。
      poolPreparedStatements: true
      # 配置监控统计拦截的filters:去掉后监控界面sql无法统计,'wall'用于防火墙,stat:监控统计、self4j(使用log4j的记得导入log4j的依赖):日志记录、wall:防御sql注入 此处配置不能遗漏服务sql监控台不能监控sql
      filters: stat,wall,log4j
      # 保持长连接
      keepAlive: true
      # 要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。在Druid中,不会存在OraclePSCache占用内存过多的问题,可以把这个数值配置大一些,比如说100
      maxPoolPreparedStatementPerConnectionSize: 20
      # 合并多个DruidDataSource的监控数据
      useGlobalDataSourceStat: true
      # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
      connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
      webStatFilter:
        # 是否启用StatFilter默认值true
        enabled: true
        # 添加过滤规则
        url-pattern: /*
        # 忽略过滤的格式
        exclusions: /druid/*,*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico
      # 配置DruidStatViewServlet
      statViewServlet:
        # 是否启用StatViewServlet默认值true
        enabled: true
        # 访问路径为/druid时,跳转到StatViewServlet
        url-pattern: /druid/*
        # IP白名单(没有配置或者为空,则允许所有访问)
        allow: 
        # IP黑名单 (共同存在时,deny优先于allow)
        deny:
        # 禁用HTML页面上的“Reset All”功能
        reset-enable: false
        # 控制台登录名,默认为root
        login-username: admin
        # 控制台登录密码
        login-password: 123456
      # 配置过滤
      filter:
        stat:
          enabled: true
          # 慢SQL记录
          log-slow-sql: true
          slow-sql-millis: 1000
          merge-sql: true
        wall:
          enabled: true
          config:
            multi-statement-allow: true

# 系统配置
system:
  # 软件名称
  name: 小蚂蚁云
  # 软件版本
  version: 1.0.0
  # 本地存储路径
  profile: /opt/apps/upload/
  # 本地资源访问域名
  domain: http://images.example.com
  # 演示环境
  demo: true

# 代码工具
generator:
  # 软件作者
  author: 小蚂蚁云团队
  # 生成代码存储模块,实际使用时根据需要自行修改
  modelName: xiaomayi-admin
  # 生成文件包路径,实际使用时根据需要自行修改
  packageName: com.xiaomayi.admin
  # 生成文件是否去除前缀,默认是false
  removePrefix: true
  # 数据表前缀,多个逗号“,”分割
  tablePrefix: sys_,gen_,qrtz_,cms_

TIP

在环境变量分支配置文件中,选用指定的数据库驱动和配置相关的数据库连接账号,本项目主要以 MySQL 数据库为主,因此选择的是 master 主数据源,其他类型数据库支持的扩展库,其他类型数据库脚本可以自行转换。

导入数据库

使用 Navicat 创建数据库并导入脚本的步骤如下:

  1. 打开 Navicat

MySQL

启动 Navicat,连接到你的本地数据库服务器(如 MySQL 等)。

MySQL

MySQL

MySQL

  1. 创建新数据库

右键点击连接名称,选择 新建数据库

MySQL

输入数据库名称,选择字符集和排序规则(如 utf8mb4utf8mb4_general_ci),点击 确定

  1. 打开数据库

在左侧连接树中,双击新建的数据库以打开它。

MySQL

  1. 导入脚本

右键点击数据库名称,选择 运行 SQL 文件...

在弹出的窗口中,点击“文件”旁的“...”按钮,选择要导入的 SQL 脚本文件。

MySQL

MySQL

确认文件路径后,点击 开始 执行导入。

MySQL

MySQL

  1. 检查导入结果

导入完成后,查看是否有错误提示。若无错误,数据库和表结构应已创建成功。可通过查询表数据或查看表结构来验证导入结果。

MySQL

按照以上步骤,你可以在 Navicat 中成功创建数据库并导入 SQL 脚本。

注意事项

  1. 备份数据:导入前建议备份现有数据,以防意外。
  2. 脚本兼容性:确保 SQL 脚本与数据库类型兼容。
  3. 权限:确保有足够的权限创建数据库和导入数据。

启动项目

  • 清理项目

打开 IDEAMaven 插件,点击 clean 清理以前构建生成的文件。

IDEA

清理文件

执行 clean 命令,会删除以前构建生成的 target 目录。

  • 编译打包

运行以下 Maven 命令编译、测试并打包项目,该命令会执行以下操作:

1. 编译项目源代码。
2. 运行单元测试。
3. 将项目打包成 JAR 或 WAR 文件(默认是 JAR 文件)。
4. 将生成的包安装到本地 Maven 仓库(位于 ~/.m2/repository)。

IDEA

输出JAR包

生成的 JAR 文件通常位于 target 目录下,例如:target/xiaomayi-admin-biz.jar

  • 启动项目

打开项目并找到启动文件 AdminApplication,右键选择 Run 'AdminApplication.main()'Debig 'AdminApplication.main()' 启动后端服务。

IDEA

启动服务成功并输出结果:

IDEA

温馨提示

后端服务的监听端口号是 8081,在部署前端应用设置后端服务API访问地址时务填写正确的端口号,接下来安装部署前端应用并访问后端API接口服务。

小蚂蚁云团队 · 提供技术支持