在WSL2环境下开发Spring Boot项目时,集成MySQL数据库是很多后端开发者的常见需求,WSL2的网络架构和原生Linux环境存在差异,容易出现连接失败、连接波动等问题,需要针对性调整配置才能保证连接稳定。

WSL2与MySQL的网络基础
WSL2采用虚拟化网络架构,和Windows宿主机的网络并非完全打通,默认情况下WSL2内的服务端口不会自动暴露给Windows,这是很多连接问题的核心原因。首先需要在WSL2中安装并启动MySQL服务,执行以下命令安装MySQL:
# 更新软件源 sudo apt update # 安装MySQL服务 sudo apt install mysql-server # 启动MySQL服务 sudo service mysql start # 查看MySQL运行状态 sudo service mysql status
MySQL远程访问配置
默认安装的MySQL只允许本地localhost访问,需要修改配置允许外部连接,首先登录MySQL执行用户授权操作:
-- 登录MySQL,默认root用户无密码可直接登录 mysql -u root -- 切换到mysql系统库 use mysql; -- 修改root用户的host为%,允许所有IP访问 update user set host='%' where user='root'; -- 刷新权限 flush privileges; -- 退出MySQL exit;
接着需要修改MySQL的配置文件,允许绑定所有网络接口,编辑/etc/mysql/mysql.conf.d/mysqld.cnf文件:
# 编辑MySQL配置文件 sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
找到bind-address配置项,将其修改为0.0.0.0,保存后重启MySQL服务:
# 重启MySQL服务使配置生效 sudo service mysql restart
Spring Boot数据源配置
在Spring Boot项目的application.yml或application.properties中配置数据源,需要注意WSL2的IP地址获取方式,Windows访问WSL2内的服务可以使用WSL2的虚拟IP,也可以在较新版本的WSL2中直接使用localhost映射。
首先获取WSL2的IP地址,在WSL2终端执行以下命令:
# 查看WSL2的IP地址 ip addr show eth0 | grep inet
假设获取到的WSL2 IP为172.28.123.45,MySQL端口为3306,Spring Boot的application.yml配置如下:
spring:
datasource:
# 如果WSL2版本支持localhost映射,也可以用jdbc:mysql://localhost:3306/test_db
url: jdbc:mysql://172.28.123.45:3306/test_db?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
username: root
password: 你的MySQL密码
driver-class-name: com.mysql.cj.jdbc.Driver
稳定连接优化方案
处理WSL2 IP变动问题
WSL2重启后IP地址可能会发生变化,导致Spring Boot连接失效,可以在Windows的hosts文件中添加WSL2的域名映射,或者在Spring Boot中配置动态获取WSL2 IP的逻辑。更简单的方案是在WSL2中固定IP,编辑WSL2的网络配置文件:
# 编辑WSL2的网络配置 sudo vim /etc/netplan/01-network-manager-all.yaml
添加以下内容固定IP,根据实际网络调整网段:
network:
version: 2
ethernets:
eth0:
dhcp4: no
addresses: [172.28.123.45/24]
gateway4: 172.28.123.1
nameservers:
addresses: [8.8.8.8]
应用配置后IP即可固定,避免重启后连接失效。
调整数据源连接池参数
默认的连接池参数可能导致连接超时,建议在Spring Boot中调整HikariCP连接池参数,提升连接稳定性:
spring:
datasource:
hikari:
# 连接超时时间,单位毫秒
connection-timeout: 30000
# 最大连接数
maximum-pool-size: 10
# 最小空闲连接数
minimum-idle: 5
# 连接最大存活时间,单位毫秒
max-lifetime: 1800000
# 连接空闲超时时间,单位毫秒
idle-timeout: 600000
验证连接稳定性
编写简单的测试接口验证连接是否正常,创建测试Controller:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestController {
@Autowired
private JdbcTemplate jdbcTemplate;
@GetMapping("/test-mysql")
public String testMysql() {
// 执行简单查询验证连接
Integer count = jdbcTemplate.queryForObject("select 1", Integer.class);
return "MySQL连接正常,查询结果:" + count;
}
}
启动Spring Boot项目后访问/test-mysql接口,返回正常结果则说明连接配置成功,连续多次访问无异常即可确认连接稳定。
常见问题排查
- 连接超时:检查MySQL是否启动,WSL2防火墙是否开放3306端口,Windows防火墙是否允许Spring Boot程序访问网络
- 访问被拒绝:检查MySQL用户host配置是否为%,密码是否正确,是否执行了flush privileges刷新权限
- 重启后连接失效:检查WSL2 IP是否变动,建议固定WSL2 IP或者更新数据源配置中的IP地址
Spring_BootWSL2MySQL数据库连接修改时间:2026-07-02 05:36:19