注册中心
- 项目使用
Nacos
作为注册中心和配置中心,能够实现服务的动态注册、发现以及配置的集中管理。Nacos
是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台,支持多种服务注册与配置管理方式。 - 项目已实现工程化
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
项目。以下是详细步骤:
- 准备工作
安装 IntelliJ IDEA:确保已安装 IntelliJ IDEA(Community 或 Ultimate 版)。
安装 JDK:Spring Boot 需要 JDK 17 或更高版本(推荐JDK17)。
安装 Maven/Gradle:Spring Boot 项目通常使用 Maven 或 Gradle 构建工具。
TIP
特别备注:目前官方全系列项目全部采用 Maven
做版本依赖管理,因此推荐使用 Maven。
- 打开项目
启动 IntelliJ IDEA
:
打开项目:
选择项目:
选中指定项目后,点击 OK
。
TIP
信任项目:首次打开时,IDE
会询问是否信任项目,点击 Trust Project
。
打开项目后如下图:
- 依赖下载
等待依赖下载: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 官网 下载并安装。
TIP
根据实际需要下载需要的版本,此处不作强行要求,也可以使用官方使用的 apache-maven-3.8.4
版本。
- 配置
Maven
打开设置:进入 File > Settings(Windows/Linux)
或 IntelliJ IDEA > Preferences(macOS)
。
找到 Maven
配置:在左侧导航栏中,选择 Build, Execution, Deployment > Build Tools > 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)。
应用更改:
点击 Apply
和 OK
保存配置。
安装依赖
项目设置 Maven
依赖后,先点击 clean
清理工程,然后点击 install
安装项目所需的依赖。
导入注册中心Nacos脚本
项目集成 Nacos
、Seata
和 OAuth2
是一种常见的微服务架构方案,能够实现服务注册与发现、分布式事务管理和安全认证授权。
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.sql
和 xiaomayi.seata.sql
两个脚本因业务场景需要已集成至业务库表表 xiaomayi.nacos.elevue.sql
脚本中。
使用 Navicat
创建数据库并导入脚本的步骤如下:
- 打开
Navicat
启动 Navicat
,连接到你的本地数据库服务器(如 MySQL
等)。
- 创建新数据库
右键点击连接名称,选择 新建数据库
。
输入数据库名称,选择字符集和排序规则(如 utf8mb4
和 utf8mb4_general_ci
),点击 确定
。
- 打开数据库
在左侧连接树中,双击新建的数据库以打开它。
- 导入脚本
右键点击数据库名称,选择 运行 SQL 文件...
。
在弹出的窗口中,点击“文件”旁的“...”按钮,选择要导入的 SQL
脚本文件。
确认文件路径后,点击 开始
执行导入。
- 检查导入结果
导入完成后,查看是否有错误提示。若无错误,数据库和表结构应已创建成功。可通过查询表数据或查看表结构来验证导入结果。
按照以上步骤,你可以在 Navicat
中成功创建 xiaomayi.nacos.sql
数据库并导入 SQL
脚本。
注意事项
- 备份数据:导入前建议备份现有数据,以防意外。
- 脚本兼容性:确保 SQL 脚本与数据库类型兼容。
- 权限:确保有足够的权限创建数据库和导入数据。
导入项目数据库SQL脚本
- 创建新数据库
右键点击连接名称,选择 新建数据库
。
输入数据库名称,选择字符集和排序规则(如 utf8mb4
和 utf8mb4_general_ci
),点击 确定
。
- 打开数据库
在左侧连接树中,双击新建的数据库以打开它。
- 导入脚本
右键点击数据库名称,选择 运行 SQL 文件...
。
在弹出的窗口中,点击“文件”旁的“...”按钮,选择要导入的 SQL
脚本文件。
确认文件路径后,点击 开始
执行导入。
- 检查导入结果
导入完成后,查看是否有错误提示。若无错误,数据库和表结构应已创建成功。可通过查询表数据或查看表结构来验证导入结果。
按照以上步骤,你可以在 Navicat
中成功创建 xiaomayi.nacos.elevue.sql
数据库并导入 SQL
脚本。
注意事项
- 备份数据:导入前建议备份现有数据,以防意外。
- 脚本兼容性:确保 SQL 脚本与数据库类型兼容。
- 权限:确保有足够的权限创建数据库和导入数据。
启动Nacos注册中心服务
启动Gateway网关服务
启动OAuth2认证中心服务
启动Seata分布式事务服务
启动System后台系统服务
启动User用户中心服务
启动Order订单中心服务
启动Product产品中心服务
启动CMS新闻资讯服务
启动Job定时任务调度服务
启动Generator代码生成器服务
启动Admin后台管理应用服务
启动Web网站应用服务
启动Uniapp客户终端服务
配置项目
在项目中,通常需要为不同的环境(如本地、开发、测试、UAT、生产)配置不同的配置文件。通过多环境配置,可以灵活地管理不同环境下的参数(如数据库连接、日志级别、第三方服务地址等)。
本项目采用多环境配置文件的命名规则,支持通过 application-{profile}.properties
或 application-{profile}.yml
文件来定义不同环境的配置。其中 {profile}
是环境名称。
# 本地环境
application-local.yml
# 开发环境
application-dev.yml
# 测试环境
application-test.yml
# UAT 环境
application-uat.yml
# 生产环境
application-prod.yml
TIP
默认情况下,会加载 application.properties
或 application.yml
作为通用配置,然后根据激活的环境加载对应的配置文件。
本项目的启动模块是 xiaomayi-modules/xiaomayi-admin
模块,在模块的 POM
文件中定义了支持多种环境变量,包括 local
、dev
、test
、uat
、prod
等环境参数和变量。
<!-- 全局编译环境变量 -->
<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.yml
或 application.properties
中动态设置 spring.profiles.active
。
spring:
profiles:
active: @package.environment@
环境变量和参数配置后,在工具 maven
插件中会同步读取并呈现,如下图:
本次项目打包我们模拟生产环境发布,选择 prod
环境分支,因此根据配置文件规则,默认读取的是 application.yml
公共配置文件 和 application-prod.yml
分支环境配置文件。
- 公共环境
application.yml
配置文件
# 全局配置
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
# 其他配置文件(按需引入)
- 环境分支
application-prod.yml
配置文件
# 服务配置
server:
# 端口
port: 8081
servlet:
# 访问上下文前缀
context-path: /api
spring:
# 全局配置
config:
# 导入配置
import:
# redis缓存配置,按需引入
- configs/prod/application-redis.yml
# 邮件配置,按需引入
- configs/prod/application-email.yml
# 阿里云OSS、SMS配置,按需引入
- 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中,不会存在Oracle下PSCache占用内存过多的问题,可以把这个数值配置大一些,比如说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
创建数据库并导入脚本的步骤如下:
- 打开
Navicat
启动 Navicat
,连接到你的本地数据库服务器(如 MySQL
等)。
- 创建新数据库
右键点击连接名称,选择 新建数据库
。
输入数据库名称,选择字符集和排序规则(如 utf8mb4
和 utf8mb4_general_ci
),点击 确定
。
- 打开数据库
在左侧连接树中,双击新建的数据库以打开它。
- 导入脚本
右键点击数据库名称,选择 运行 SQL 文件...
。
在弹出的窗口中,点击“文件”旁的“...”按钮,选择要导入的 SQL
脚本文件。
确认文件路径后,点击 开始
执行导入。
- 检查导入结果
导入完成后,查看是否有错误提示。若无错误,数据库和表结构应已创建成功。可通过查询表数据或查看表结构来验证导入结果。
按照以上步骤,你可以在 Navicat
中成功创建数据库并导入 SQL
脚本。
注意事项
- 备份数据:导入前建议备份现有数据,以防意外。
- 脚本兼容性:确保 SQL 脚本与数据库类型兼容。
- 权限:确保有足够的权限创建数据库和导入数据。
启动项目
- 清理项目
打开 IDEA
的 Maven
插件,点击 clean
清理以前构建生成的文件。
清理文件
执行 clean
命令,会删除以前构建生成的 target
目录。
- 编译打包
运行以下 Maven
命令编译、测试并打包项目,该命令会执行以下操作:
1. 编译项目源代码。
2. 运行单元测试。
3. 将项目打包成 JAR 或 WAR 文件(默认是 JAR 文件)。
4. 将生成的包安装到本地 Maven 仓库(位于 ~/.m2/repository)。
输出JAR包
生成的 JAR
文件通常位于 target
目录下,例如:target/xiaomayi-admin-biz.jar
。
- 启动项目
打开项目并找到启动文件 AdminApplication
,右键选择 Run 'AdminApplication.main()'
或 Debig 'AdminApplication.main()'
启动后端服务。
启动服务成功并输出结果:
温馨提示
后端服务的监听端口号是 8081
,在部署前端应用设置后端服务API访问地址时务填写正确的端口号,接下来安装部署前端应用并访问后端API接口服务。