mac系统中Java项目环境配置与问题解决全记录| 项目构建篇:Maven编译与打包

文章目录

    • [数据库与缓存环境搭建完全指南:MySQL 8.0 + Redis](#数据库与缓存环境搭建完全指南:MySQL 8.0 + Redis)
    • [------ 手把手教你安装配置数据库、导入初始数据并启动Spring Boot应用](#—— 手把手教你安装配置数据库、导入初始数据并启动Spring Boot应用)
    • [📖 写在前面](#📖 写在前面)
    • 第一章:理解项目的数据库依赖
      • [1.1 查看项目配置文件](#1.1 查看项目配置文件)
      • [1.2 为什么需要MySQL和Redis?](#1.2 为什么需要MySQL和Redis?)
    • [第二章:MySQL 8.0 安装 ------ 方式一:压缩包手动安装](#第二章:MySQL 8.0 安装 —— 方式一:压缩包手动安装)
    • [第三章:MySQL 8.0 安装 ------ 方式二:DMG图形化安装](#第三章:MySQL 8.0 安装 —— 方式二:DMG图形化安装)
      • [3.1 下载DMG安装包](#3.1 下载DMG安装包)
      • [3.2 安装DMG](#3.2 安装DMG)
      • [3.3 启动和停止MySQL(DMG方式)](#3.3 启动和停止MySQL(DMG方式))
      • [3.4 连接到MySQL(DMG方式)](#3.4 连接到MySQL(DMG方式))
      • [3.5 两种安装方式对比](#3.5 两种安装方式对比)
    • 第四章:创建数据库并导入初始数据
      • [4.1 创建项目数据库](#4.1 创建项目数据库)
      • [4.2 导入项目初始化SQL脚本](#4.2 导入项目初始化SQL脚本)
      • [4.3 SQL导入常见问题排查](#4.3 SQL导入常见问题排查)
        • [问题1:`ERROR 1046 (3D000): No database selected`](#问题1:ERROR 1046 (3D000): No database selected)
        • [问题2:`ERROR 1064 (42000): You have an error in your SQL syntax`](#问题2:ERROR 1064 (42000): You have an error in your SQL syntax)
        • [问题3:`ERROR 2002 (HY000): Can't connect to local MySQL server through socket`](#问题3:ERROR 2002 (HY000): Can't connect to local MySQL server through socket)
        • [问题4:`ERROR 1118 (42000): Row size too large`](#问题4:ERROR 1118 (42000): Row size too large)
      • [4.4 创建MySQL配置文件(my.cnf)](#4.4 创建MySQL配置文件(my.cnf))
    • 第五章:Redis安装与配置
      • [5.1 Redis是什么?](#5.1 Redis是什么?)
      • [5.2 方式一:使用Homebrew安装(最推荐)](#5.2 方式一:使用Homebrew安装(最推荐))
      • [5.3 方式二:源码编译安装(更灵活)](#5.3 方式二:源码编译安装(更灵活))
      • [5.4 启动Redis](#5.4 启动Redis)
      • [5.5 验证Redis运行](#5.5 验证Redis运行)
      • [5.6 Redis基本操作测试](#5.6 Redis基本操作测试)
    • [第六章:Spring Boot应用启动](#第六章:Spring Boot应用启动)
      • [6.1 环境检查清单](#6.1 环境检查清单)
      • [6.2 启动Spring Boot应用](#6.2 启动Spring Boot应用)
      • [6.3 启动参数详解](#6.3 启动参数详解)
      • [6.4 启动成功标志](#6.4 启动成功标志)
      • [6.5 验证应用功能](#6.5 验证应用功能)
    • 第七章:启动问题深度排查
      • [7.1 数据库连接失败](#7.1 数据库连接失败)
        • [错误:`Communications link failure`](#错误:Communications link failure)
        • [错误:`Access denied for user 'root'@'localhost'`](#错误:Access denied for user 'root'@'localhost')
        • [错误:`Unknown database 'openerp'`](#错误:Unknown database 'openerp')
      • [7.2 Redis连接失败](#7.2 Redis连接失败)
        • [错误:`Connection refused: localhost/127.0.0.1:6379`](#错误:Connection refused: localhost/127.0.0.1:6379)
        • [错误:`NOAUTH Authentication required`](#错误:NOAUTH Authentication required)
      • [7.3 端口冲突问题](#7.3 端口冲突问题)

数据库与缓存环境搭建完全指南:MySQL 8.0 + Redis

------ 手把手教你安装配置数据库、导入初始数据并启动Spring Boot应用


📖 写在前面

在上一篇中,我们已经成功配置了JDK 17和Maven 3.9.8,并成功编译打包了项目。然而,当你满怀期待地执行 java -jar target/openerp-backend-1.0.0.jar 时,迎接你的却是:

复制代码
Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago.
Connection refused (Connection refused)

这个错误意味着:你的应用需要连接MySQL数据库,但MySQL服务没有运行或根本没有安装

本文将极其详细地讲解如何在macOS(ARM64架构)上:

  1. 安装MySQL 8.0(两种方式:压缩包手动安装 + DMG图形化安装)
  2. 初始化MySQL数据目录并设置root密码
  3. 创建项目数据库并导入初始化SQL脚本
  4. 安装Redis并配置为服务
  5. 最终成功启动Spring Boot应用

第一章:理解项目的数据库依赖

1.1 查看项目配置文件

在启动应用之前,先了解项目需要什么。

bash 复制代码
# 进入项目目录
cd ~/Desktop/FeiChenERP/backend

# 查看Spring Boot配置文件
cat src/main/resources/application.yml
# 或
cat src/main/resources/application.properties

典型的数据库配置如下:

yaml 复制代码
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/openerp?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf-8
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver

  redis:
    host: localhost
    port: 6379
    database: 0

解读

  • 数据库 :MySQL,地址 localhost:3306
  • 数据库名openerp
  • 用户名/密码root / 123456
  • 缓存 :Redis,地址 localhost:6379

如果配置文件中密码不同(如空密码或 password: 123456),下文会统一设置为 123456

1.2 为什么需要MySQL和Redis?

组件 作用 本项目使用场景
MySQL 关系型数据库,持久化存储 存储ERP系统的核心业务数据:用户、订单、商品、库存等
Redis 内存数据库/缓存 存储会话信息、缓存热点数据、分布式锁等

如果MySQL未安装,应用完全无法启动;如果Redis未安装,虽然能启动但部分功能(如缓存、登录状态)会报错。


第二章:MySQL 8.0 安装 ------ 方式一:压缩包手动安装

这是最灵活的方式,适合喜欢掌控一切细节的开发者。

2.1 下载MySQL 8.0(ARM64版本)

确定下载链接

MySQL官方为ARM64 Mac提供了专用版本。截至本文撰写时,推荐版本为 8.0.36

bash 复制代码
# 创建临时下载目录
mkdir -p /tmp/mysql-install

# 下载MySQL 8.0.36 ARM64版本(约400MB)
curl -L -o /tmp/mysql-install/mysql-8.0.36-macos14-arm64.tar.gz \
  "https://cdn.mysql.com/archives/mysql-8.0/mysql-8.0.36-macos14-arm64.tar.gz"

下载速度慢怎么办?

解决方案 操作方法
使用代理 export https_proxy=http://127.0.0.1:7890
使用浏览器下载 访问 https://dev.mysql.com/downloads/mysql/
使用国内镜像 华为云、腾讯云可能有缓存镜像
使用wget wget -c <链接> 支持断点续传
验证下载文件完整性
bash 复制代码
# 查看文件大小(应约400MB)
ls -lh /tmp/mysql-install/mysql-8.0.36-macos14-arm64.tar.gz

# 查看文件类型
file /tmp/mysql-install/mysql-8.0.36-macos14-arm64.tar.gz
# 应输出: gzip compressed data

2.2 解压并安装到用户目录

bash 复制代码
# 创建MySQL安装目录
mkdir -p ~/mysql

# 解压到目标目录(--strip-components=1 去除顶层目录)
tar -xzf /tmp/mysql-install/mysql-8.0.36-macos14-arm64.tar.gz \
  -C ~/mysql --strip-components=1

# 查看解压结果
ls -la ~/mysql/
# 应看到: bin/ docs/ include/ lib/ man/ share/ support-files/ LICENSE README

2.3 MySQL目录结构详解

复制代码
~/mysql/
├── bin/                    # 可执行文件目录(最重要)
│   ├── mysql              # MySQL客户端
│   ├── mysqld             # MySQL服务器守护进程(核心)
│   ├── mysqld_safe        # 服务器启动脚本
│   ├── mysqladmin         # 管理工具
│   ├── mysql_secure_installation  # 安全配置脚本
│   └── ... (其他工具)
├── docs/                   # 文档
├── include/                # 头文件(供C/C++开发使用)
├── lib/                    # 库文件
├── man/                    # 手册页
├── share/                  # 共享资源(字符集、错误信息等)
└── support-files/          # 辅助文件(my-default.cnf等)

为什么安装在 ~/mysql 而不是 /usr/local/mysql

用户目录安装不需要 sudo 权限,卸载时直接删除文件夹,完全隔离不会影响系统其他部分。

2.4 初始化MySQL数据目录

在启动MySQL之前,必须初始化数据目录(data directory),MySQL会在其中存储所有数据库文件。

bash 复制代码
cd ~/mysql

# 执行初始化(--initialize-insecure 表示root密码为空)
bin/mysqld --initialize-insecure \
  --datadir=./data \
  --basedir=.

# 观察输出
# [Warning] [MY-010915] [Server] 'NO_ZERO_DATE'...
# [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
# [System] [MY-013169] [Server] /Users/xxx/mysql/bin/mysqld (mysqld 8.0.36) initializing...
# 如果看到 [System] [MY-010116] [Server] /Users/xxx/mysql/bin/mysqld (mysqld 8.0.36) started,表示初始化成功

参数解释

参数 含义 说明
--initialize-insecure 初始化且不设置密码 root用户密码为空,稍后手动设置
--datadir=./data 数据目录位置 所有数据库文件将存储在此
--basedir=. MySQL基目录 指向MySQL安装根目录

初始化后生成的文件

bash 复制代码
ls -la ~/mysql/data/
# 输出示例:
# auto.cnf         # 服务器UUID
# ca-key.pem       # SSL密钥
# ca.pem           # SSL证书
# client-cert.pem  # 客户端证书
# client-key.pem   # 客户端密钥
# ib_buffer_pool   # InnoDB缓冲池信息
# ibdata1          # InnoDB系统表空间(初始约12MB)
# ib_logfile0      # InnoDB重做日志
# ib_logfile1      # InnoDB重做日志
# mysql/           # mysql系统数据库
# performance_schema/ # 性能监控数据库
# private_key.pem  # 私钥
# public_key.pem   # 公钥
# server-cert.pem  # 服务器证书
# server-key.pem   # 服务器密钥
# sys/             # sys系统数据库
# undo_001         # Undo日志
# undo_002         # Undo日志

2.5 启动MySQL服务

前台启动(用于调试)
bash 复制代码
cd ~/mysql
bin/mysqld --datadir=./data --basedir=. --port=3306

这会保持终端在前台运行,所有日志直接输出到终端。按 Ctrl+C 可停止服务。

后台启动(推荐,日常使用)
bash 复制代码
cd ~/mysql
bin/mysqld --datadir=./data --basedir=. --port=3306 &

# 查看进程是否启动
ps aux | grep mysqld | grep -v grep

# 查看端口是否监听
lsof -i :3306
# 输出示例:
# COMMAND   PID USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
# mysqld  12345  xxx   38u  IPv6 0x1234567890      0t0  TCP *:mysql (LISTEN)
设置开机自启动(Mac Launch Agent)

创建启动配置文件:

bash 复制代码
# 创建Launch Agent配置文件
cat > ~/Library/LaunchAgents/com.mysql.mysqld.plist << 'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.mysql.mysqld</string>
    <key>ProgramArguments</key>
    <array>
        <string>/Users/xxx/mysql/bin/mysqld</string>
        <string>--datadir=/Users/xxx/mysql/data</string>
        <string>--basedir=/Users/xxx/mysql</string>
        <string>--port=3306</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>KeepAlive</key>
    <true/>
    <key>StandardErrorPath</key>
    <string>/Users/xxx/mysql/data/error.log</string>
</dict>
</plist>
EOF

# 注意:将 xxx 替换为你的用户名

# 加载配置
launchctl load ~/Library/LaunchAgents/com.mysql.mysqld.plist

# 启动服务
launchctl start com.mysql.mysqld

注意:如果不想设置开机自启动,每次手动执行后台启动命令即可。

2.6 连接MySQL并设置root密码

连接到MySQL

由于初始化时使用了 --initialize-insecure,root用户密码为空,可以直接连接:

bash 复制代码
cd ~/mysql

# 使用socket文件连接(避免网络问题)
bin/mysql -u root -S /tmp/mysql.sock

# 或者使用TCP连接
bin/mysql -u root -h 127.0.0.1 -P 3306

如果连接成功,会看到MySQL提示符:

复制代码
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.36 MySQL Community Server - GPL

Copyright (c) 2000, 2024, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>
设置root密码为 123456

在MySQL命令行中执行:

sql 复制代码
-- 切换到mysql系统数据库
USE mysql;

-- 查看当前用户认证方式(确认是caching_sha2_password)
SELECT user, host, plugin FROM user WHERE user='root';

-- 设置密码(MySQL 8.0使用ALTER USER语法)
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';

-- 如果有远程访问需求(开发环境不建议)
-- ALTER USER 'root'@'%' IDENTIFIED BY '123456';

-- 刷新权限表使生效
FLUSH PRIVILEGES;

-- 退出
EXIT;

密码策略说明

MySQL 8.0默认有密码复杂度要求:

  • 最小长度:8个字符(如果启用validate_password插件)
  • 需要包含大小写字母、数字、特殊字符

如果遇到 ERROR 1819 (HY000): Your password does not satisfy the current policy requirements 错误:

sql 复制代码
-- 查看当前密码策略
SHOW VARIABLES LIKE 'validate_password%';

-- 临时降低策略(仅开发环境)
SET GLOBAL validate_password.policy = LOW;
SET GLOBAL validate_password.length = 6;

-- 然后重新设置密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
验证密码设置成功
bash 复制代码
cd ~/mysql

# 使用新密码连接
bin/mysql -u root -p123456 -S /tmp/mysql.sock

# 如果成功进入,说明密码设置正确
mysql>

第三章:MySQL 8.0 安装 ------ 方式二:DMG图形化安装

如果你更喜欢图形化界面,或者不想处理命令行细节,可以选择DMG安装方式。

3.1 下载DMG安装包

  1. 打开浏览器,访问:https://dev.mysql.com/downloads/mysql/
  2. 在 "Select Operating System" 下拉菜单中选择:macOS
  3. 在 "Select OS Version" 中选择:macOS 14 (x86, 64-bit)macOS 14 (ARM, 64-bit)
    • M1/M2/M3芯片:选择 ARM 版本
    • Intel芯片:选择 x86 版本
  4. 点击 Download 按钮(约400MB)
  5. 如果提示注册Oracle账号,选择 "No thanks, just start my download."

3.2 安装DMG

  1. 双击下载的 .dmg 文件,挂载磁盘映像
  2. 双击 .pkg 安装包开始安装
  3. 按照安装向导操作:
    • 点击 "Continue"
    • 同意许可证协议
    • 选择安装类型(默认即可)
    • 选择安装位置(默认)
    • 配置MySQL:
      • Use Strong Password Encryption(推荐,使用caching_sha2_password)
      • 设置root密码(设置为 123456 以匹配项目配置)
      • 可以勾选 "Start MySQL Server after installation"
    • 点击 "Finish" 完成安装

3.3 启动和停止MySQL(DMG方式)

DMG安装方式会在系统偏好设置中添加MySQL管理面板:

  • 打开 系统偏好设置 → 底部找到 MySQL
  • 可以看到MySQL服务状态
  • 点击 Start MySQL Server 启动
  • 点击 Stop MySQL Server 停止
  • 勾选 Automatically Start MySQL Server on Startup 设置开机自启动

命令行控制

bash 复制代码
# 启动
sudo /usr/local/mysql/support-files/mysql.server start

# 停止
sudo /usr/local/mysql/support-files/mysql.server stop

# 查看状态
sudo /usr/local/mysql/support-files/mysql.server status

3.4 连接到MySQL(DMG方式)

DMG安装后,MySQL可执行文件在 /usr/local/mysql/bin/

bash 复制代码
# 添加到PATH(临时)
export PATH=/usr/local/mysql/bin:$PATH

# 或永久添加到 ~/.zshrc
echo 'export PATH=/usr/local/mysql/bin:$PATH' >> ~/.zshrc
source ~/.zshrc

# 连接MySQL
mysql -u root -p
# 输入刚才设置的密码(123456)

3.5 两种安装方式对比

对比项 压缩包方式(~/mysql) DMG方式(/usr/local/mysql)
安装路径 用户目录 系统目录
需要sudo ❌ 不需要 ✅ 需要
卸载方式 直接删除文件夹 运行卸载脚本
图形化管理 ❌ 无 ✅ 系统偏好设置面板
开机自启动 需要手动配置Launch Agent ✅ 可勾选自动启动
灵活性 ✅ 高,可多版本共存 ❌ 较低
推荐场景 开发环境、多版本管理 正式环境、偏好图形化

本文后续操作以压缩包方式为例,但SQL命令和步骤对两种方式完全通用。


第四章:创建数据库并导入初始数据

4.1 创建项目数据库

bash 复制代码
cd ~/mysql

# 使用mysql客户端连接(已设置密码)
bin/mysql -u root -p123456 -S /tmp/mysql.sock

# 在MySQL提示符中执行
CREATE DATABASE IF NOT EXISTS openerp 
  DEFAULT CHARACTER SET utf8mb4 
  DEFAULT COLLATE utf8mb4_unicode_ci;

-- 验证数据库已创建
SHOW DATABASES;
-- 应看到 openerp 在列表中

-- 查看字符集设置
SELECT default_character_set_name, default_collation_name 
  FROM information_schema.SCHEMATA 
  WHERE schema_name = 'openerp';

-- 退出
EXIT;

字符集说明

字符集 说明 为什么用utf8mb4?
utf8 MySQL的utf8实现,最多3字节 不支持emoji和部分中文字符(如𠮷)
utf8mb4 真正的UTF-8,最多4字节 ✅ 支持全部Unicode字符,推荐使用

4.2 导入项目初始化SQL脚本

bash 复制代码
# 确认SQL文件存在
ls -la ~/Desktop/FeiChenERP/sql/init.sql

# 查看SQL文件内容(了解会创建哪些表)
head -50 ~/Desktop/FeiChenERP/sql/init.sql

# 导入数据
bin/mysql -u root -p123456 openerp < ~/Desktop/FeiChenERP/sql/init.sql

# 观察导入过程(终端会显示执行信息)
# 如果SQL文件较大,可能需要几秒到几十秒

导入验证

bash 复制代码
# 连接数据库
bin/mysql -u root -p123456 openerp -S /tmp/mysql.sock

# 查看所有表
SHOW TABLES;
# 应看到类似:user, role, menu, product, order, inventory 等表

# 查看表数量
SELECT COUNT(*) FROM information_schema.TABLES 
  WHERE table_schema = 'openerp';

# 查看某张表的数据量(例如用户表)
SELECT COUNT(*) FROM user;  -- 或使用实际的表名

# 退出
EXIT;

4.3 SQL导入常见问题排查

问题1:ERROR 1046 (3D000): No database selected

原因:没有指定目标数据库。

解决

bash 复制代码
# 方式一:命令行指定数据库
bin/mysql -u root -p123456 openerp < init.sql

# 方式二:在SQL文件开头添加 USE openerp;
问题2:ERROR 1064 (42000): You have an error in your SQL syntax

原因:SQL文件语法问题,可能与MySQL版本不兼容。

解决

bash 复制代码
# 查看MySQL版本
bin/mysql --version

# 检查SQL文件中的语法,常见问题:
# - 使用过时的TYPE=InnoDB → 应使用 ENGINE=InnoDB
# - 使用过时的DEFAULT CHARSET=latin1 → 应使用 utf8mb4
# - 使用MySQL 5.x特有的语法

# 使用兼容模式导入
bin/mysql -u root -p123456 --compatible=mysql40 openerp < init.sql
问题3:ERROR 2002 (HY000): Can't connect to local MySQL server through socket

原因:MySQL未启动或socket文件位置不对。

解决

bash 复制代码
# 检查MySQL是否运行
ps aux | grep mysqld

# 如果未启动,重新启动
cd ~/mysql && bin/mysqld --datadir=./data --basedir=. --port=3306 &

# 指定socket文件
bin/mysql -u root -p123456 -S /tmp/mysql.sock openerp < init.sql
问题4:ERROR 1118 (42000): Row size too large

原因:InnoDB的行大小限制(约8126字节)与UTF8MB4字符集冲突。

解决

sql 复制代码
-- 在导入前执行
SET GLOBAL innodb_strict_mode = OFF;
-- 导入完成后恢复
SET GLOBAL innodb_strict_mode = ON;

-- 或修改MySQL配置文件
-- 在 my.cnf 中添加: innodb_strict_mode=OFF

4.4 创建MySQL配置文件(my.cnf)

为了优化MySQL运行,可以创建配置文件:

bash 复制代码
cat > ~/mysql/my.cnf << 'EOF'
[mysqld]
# 基础设置
port=3306
basedir=/Users/xxx/mysql
datadir=/Users/xxx/mysql/data
socket=/tmp/mysql.sock
pid-file=/tmp/mysql.pid

# 字符集
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci

# 连接设置
max_connections=200
wait_timeout=600
max_allowed_packet=256M

# 内存设置
innodb_buffer_pool_size=512M
innodb_log_file_size=256M

# 日志
log-error=/Users/xxx/mysql/data/mysql-error.log
slow-query-log=1
slow-query-log-file=/Users/xxx/mysql/data/mysql-slow.log
long_query_time=2

# SQL模式(放宽限制)
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

[client]
default-character-set=utf8mb4
socket=/tmp/mysql.sock
EOF

# 注意:将 xxx 替换为用户名

使用配置文件启动:

bash 复制代码
cd ~/mysql
bin/mysqld --defaults-file=./my.cnf --datadir=./data --basedir=. &

第五章:Redis安装与配置

5.1 Redis是什么?

Redis(REmote DIctionary Server)是一个开源的内存数据结构存储系统,常用作:

  • 缓存:减少数据库查询压力
  • 会话存储:保存用户登录状态
  • 消息队列:异步任务处理
  • 分布式锁:协调多实例并发

本项目使用Redis存储缓存数据和会话信息。

5.2 方式一:使用Homebrew安装(最推荐)

bash 复制代码
# 如果未安装Homebrew,先安装
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# 安装Redis
brew install redis

# 查看安装信息
brew info redis
# 输出示例:
# redis: stable 7.2.4 (bottled), HEAD
# /opt/homebrew/Cellar/redis/7.2.4 (15 files, 2.1MB)
# 会显示配置文件位置、数据目录等

# 启动Redis服务(前台)
redis-server

# 或后台启动
brew services start redis

Homebrew安装的优势

  • ✅ 自动配置环境变量
  • ✅ 提供 brew services 管理开机自启动
  • ✅ 更新方便(brew upgrade redis

5.3 方式二:源码编译安装(更灵活)

bash 复制代码
# 下载Redis源码
curl -L -o /tmp/redis-stable.tar.gz https://download.redis.io/redis-stable.tar.gz

# 解压
tar -xzf /tmp/redis-stable.tar.gz -C ~/
cd ~/redis-stable

# 编译(需要Xcode Command Line Tools)
make

# 安装到用户目录
make PREFIX=~/redis install

# 创建配置文件目录
mkdir -p ~/redis/conf

# 复制默认配置文件
cp redis.conf ~/redis/conf/

# 修改配置(可选)
vim ~/redis/conf/redis.conf
# 主要修改:
# daemonize yes    # 后台运行
# port 6379        # 端口(默认)
# bind 127.0.0.1   # 只允许本地连接(安全)
# requirepass      # 设置密码(如果需要)
Redis配置文件重要参数
参数 默认值 建议值 说明
port 6379 6379 监听端口
bind 127.0.0.1 127.0.0.1 绑定IP(生产环境建议不修改)
daemonize no yes 是否后台运行
maxmemory 512mb 最大内存限制
maxmemory-policy noeviction allkeys-lru 内存淘汰策略
save 900 1 / 300 10 / 60 10000 根据需求 RDB持久化策略
appendonly no yes 开启AOF持久化
requirepass 可选 设置访问密码

5.4 启动Redis

使用Homebrew
bash 复制代码
# 启动
brew services start redis

# 停止
brew services stop redis

# 重启
brew services restart redis

# 查看状态
brew services list | grep redis
手动启动(源码安装)
bash 复制代码
# 前台启动(调试用)
~/redis/bin/redis-server ~/redis/conf/redis.conf

# 后台启动
~/redis/bin/redis-server ~/redis/conf/redis.conf --daemonize yes

# 设置开机自启动(Launch Agent)
cat > ~/Library/LaunchAgents/com.redis.redis-server.plist << 'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.redis.redis-server</string>
    <key>ProgramArguments</key>
    <array>
        <string>/Users/xxx/redis/bin/redis-server</string>
        <string>/Users/xxx/redis/conf/redis.conf</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>
EOF

launchctl load ~/Library/LaunchAgents/com.redis.redis-server.plist

5.5 验证Redis运行

bash 复制代码
# 方式一:使用redis-cli
redis-cli ping
# 应输出: PONG

# 方式二:使用telnet
telnet localhost 6379
# 输入: PING
# 应输出: +PONG

# 方式三:查看端口监听
lsof -i :6379
# 应看到 redis-server 进程

# 查看Redis信息
redis-cli info server
# 输出Redis版本、运行时间等信息

5.6 Redis基本操作测试

bash 复制代码
# 连接Redis
redis-cli

# 测试读写
127.0.0.1:6379> SET test_key "Hello Redis"
OK
127.0.0.1:6379> GET test_key
"Hello Redis"
127.0.0.1:6379> DEL test_key
(integer) 1
127.0.0.1:6379> EXIT

第六章:Spring Boot应用启动

6.1 环境检查清单

在启动应用之前,逐一确认:

bash 复制代码
# 1. MySQL运行状态
ps aux | grep mysqld | grep -v grep
lsof -i :3306

# 2. Redis运行状态
ps aux | grep redis | grep -v grep
lsof -i :6379

# 3. 数据库存在且已导入数据
~/mysql/bin/mysql -u root -p123456 -e "USE openerp; SHOW TABLES;"

# 4. JAR包存在
ls -la ~/Desktop/FeiChenERP/backend/target/*.jar

# 5. Java版本正确
java -version | head -1  # 应为 openjdk version "17"

6.2 启动Spring Boot应用

bash 复制代码
cd ~/Desktop/FeiChenERP/backend

# 方式一:直接启动(使用默认配置)
java -jar target/openerp-backend-1.0.0.jar

# 方式二:指定参数启动(跳过Spring的SQL初始化)
java -jar target/openerp-backend-1.0.0.jar \
  --spring.sql.init.mode=never

# 方式三:指定配置文件启动
java -jar target/openerp-backend-1.0.0.jar \
  --spring.profiles.active=dev \
  --spring.datasource.url="jdbc:mysql://localhost:3306/openerp?useSSL=false" \
  --spring.datasource.username=root \
  --spring.datasource.password=123456

# 方式四:后台启动并记录日志
nohup java -jar target/openerp-backend-1.0.0.jar \
  --spring.sql.init.mode=never \
  > app.log 2>&1 &

# 查看日志
tail -f app.log

6.3 启动参数详解

参数 作用 何时使用
--spring.sql.init.mode=never 禁用Spring Boot自动执行SQL初始化 已手动导入SQL,避免重复执行或冲突
--spring.profiles.active=dev 激活dev配置文件 使用 application-dev.yml 中的配置
--server.port=8081 修改应用端口 默认8080被占用时
--spring.datasource.password=xxx 覆盖配置文件中的数据库密码 数据库密码与配置文件不同时

6.4 启动成功标志

应用启动成功后,日志中会看到:

复制代码
  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v3.2.5)

2026-07-26 10:30:15.123  INFO 12345 --- [           main] com.erp.OpenerpApplication               : Starting OpenerpApplication v1.0.0 using Java 17.0.11 with PID 12345 (/Users/xxx/Desktop/FeiChenERP/backend/target/openerp-backend-1.0.0.jar started by xxx in /Users/xxx/Desktop/FeiChenERP/backend)
2026-07-26 10:30:15.456  INFO 12345 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port 8080 (http)
2026-07-26 10:30:15.789  INFO 12345 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2026-07-26 10:30:16.123  INFO 12345 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
2026-07-26 10:30:16.456  INFO 12345 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port 8080 (http) with context path ''
2026-07-26 10:30:16.789  INFO 12345 --- [           main] com.erp.OpenerpApplication               : Started OpenerpApplication in 3.456 seconds (process running for 4.123)

6.5 验证应用功能

bash 复制代码
# 健康检查(如果项目有actuator)
curl http://localhost:8080/actuator/health

# 访问Swagger(如果有)
open http://localhost:8080/swagger-ui.html

# 测试接口
curl -X GET http://localhost:8080/api/users
# 应返回JSON数据(如果接口需要认证,需要先登录)

第七章:启动问题深度排查

7.1 数据库连接失败

bash 复制代码
# 排查步骤
# 1. 检查MySQL是否运行
ps aux | grep mysqld | grep -v grep

# 2. 检查端口是否监听
netstat -an | grep 3306
lsof -i :3306

# 3. 尝试用命令行连接
~/mysql/bin/mysql -u root -p123456 -h 127.0.0.1 -P 3306

# 4. 检查socket文件
ls -la /tmp/mysql.sock

# 5. 查看MySQL错误日志
tail -50 ~/mysql/data/mysql-error.log
错误:Access denied for user 'root'@'localhost'
bash 复制代码
# 重置root密码
cd ~/mysql

# 停止MySQL
kill $(cat /tmp/mysql.pid)

# 跳过权限验证启动
bin/mysqld --datadir=./data --basedir=. --skip-grant-tables &

# 连接并重置密码
bin/mysql -u root
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
EXIT;

# 重启MySQL(正常模式)
kill $(cat /tmp/mysql.pid)
bin/mysqld --datadir=./data --basedir=. --port=3306 &
错误:Unknown database 'openerp'
bash 复制代码
# 创建数据库
~/mysql/bin/mysql -u root -p123456 -e "CREATE DATABASE openerp DEFAULT CHARACTER SET utf8mb4;"

# 重新导入数据
~/mysql/bin/mysql -u root -p123456 openerp < ~/Desktop/FeiChenERP/sql/init.sql

7.2 Redis连接失败

错误:Connection refused: localhost/127.0.0.1:6379
bash 复制代码
# 1. 检查Redis是否运行
ps aux | grep redis | grep -v grep
redis-cli ping

# 2. 检查端口
lsof -i :6379

# 3. 启动Redis
brew services start redis
# 或
redis-server --daemonize yes

# 4. 检查bind配置
cat ~/redis/conf/redis.conf | grep bind
# 如果是 bind 127.0.0.1,确保应用连接的是127.0.0.1
错误:NOAUTH Authentication required
bash 复制代码
# 如果Redis设置了密码,应用需要配置
# 在application.yml中添加:
spring:
  redis:
    password: your_password

# 或在启动时指定:
java -jar app.jar --spring.redis.password=your_password

7.3 端口冲突问题

bash 复制代码
# 查看所有服务端口占用
sudo

> 您好,我是肥晨。
>  欢迎关注我获取前端/AI学习资源,日常分享技术变革,生存法则;行业内幕,洞察先机。
相关推荐
万亿少女的梦1682 小时前
基于Spring Boot的乐助在线助农系统设计与实现
java·spring boot·mysql·敏感词过滤·助农系统
唐青枫2 小时前
Java Undertow 实战指南:从轻量 Web Server 到 Spring Boot 嵌入式容器
java
其实防守也摸鱼4 小时前
KMP全栈开发:从Android到AI Agent的技术演进与实践
android·运维·网络·人工智能·学习·安全·macos
前端工作日常12 小时前
我学习到的Java中domain和dto区别
java·后端
码农学院12 小时前
基于Spring Boot的跨境电商多语言订单管理系统架构设计
java·大数据·spring boot
技术小结-李爽13 小时前
【工具】pom文件的<packaging>
java·maven
l1564694814 小时前
突围!图文混合知识库难以解析,Kimi-K3 原生视觉架构深耕知识工作,DMXAPI 统一接口,缩短项目开发周期
java·大数据·开发语言
布吉岛的石头15 小时前
Java 程序员第 45 阶段11:网关统一路由大模型接口,配合 Nacos 配置治理,灰度路由:基于Nacos元数据实现大模型服务灰度发布与权重路由
java·服务发现
我命由我1234515 小时前
Android 开发问题:Cannot resolve method ‘repeat‘ in ‘String‘
android·java·java-ee·android studio·android jetpack·android-studio·android runtime