You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot应用连接MySQL失败:权限拒绝问题求助

Spring Boot连接MySQL权限拒绝问题排查

我正在开发首个Spring Boot连接MySQL的项目,已成功创建employeemanager数据库,但运行应用时出现权限拒绝错误:java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES),同时伴随entityManagerFactory创建失败等异常。以下是项目相关代码及配置:

项目主类(EmployeeManager.java)

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;


@SpringBootApplication
public class EmployeemanagerApplication {

    public static void main(String[] args) {
        SpringApplication.run(EmployeemanagerApplication.class, args);
    }

}

实体类(Employee.java)

package com.example.demo.model;

import java.io.Serializable;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;


@SuppressWarnings("serial")
@Entity
public class Employee implements Serializable{
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(nullable = false, updatable = false)
    private Long id;
    private String name;
    private String email;
    private String jobTitle;
    private String phone;
    private String imageUrl;
    @Column(nullable = false, updatable = false)
    private String empCode;
    
    
    public Employee(String name, String email, String jobTitle, String phone, String imageUrl,
            String empCode) {
        this.name = name;
        this.email = email;
        this.jobTitle = jobTitle;
        this.phone = phone;
        this.imageUrl = imageUrl;
        this.empCode = empCode;
    }
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public String getJobTitle() {
        return jobTitle;
    }
    public void setJobTitle(String jobTitle) {
        this.jobTitle = jobTitle;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    public String getImageUrl() {
        return imageUrl;
    }
    public void setImageUrl(String imageUrl) {
        this.imageUrl = imageUrl;
    }
    public String getEmpCode() {
        return empCode;
    }
    public void setEmpCode(String empCode) {
        this.empCode = empCode;
    }
    @Override
    public String toString() {
        return "Employee [id=" + id + ", name=" + name + ", email=" + email + ", jobTitle=" + jobTitle + ", phone="
                + phone + ", imageUrl=" + imageUrl + ", empCode=" + empCode + "]";
    }
    
}

配置文件(application.properties)

spring.datasource.url=jdbc:mysql://localhost:3306/employeemanager
spring.datasource.username=root
spring.datasource.password=pass   
spring.jpa.show-sql=true
spring.jpa.database-platform = org.hibernate.dialect.MySQL5Dialect
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto = update

Maven依赖(pom.xml)

<?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.0.5</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>employeemanager</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>employeemanager</name>
    <description>employee manager app</description>
    <properties>
        <java.version>17</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </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>
            </plugin>
        </plugins>
    </build>

</project>

报错信息

java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.exception.GenericJDBCException: Unable to open JDBC Connection for DDL execution

Caused by: jakarta.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.exception.GenericJDBCException: Unable to open JDBC Connection for DDL execution

Caused by: org.hibernate.exception.GenericJDBCException: Unable to open JDBC Connection for DDL execution

数据库状态

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| hello              |
| db1                |
| employeemanager    |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
7 rows in set (0.00 sec)

排查步骤与解决方案

  • 验证账号密码准确性:通过MySQL客户端执行mysql -u root -p,输入配置中的pass,确认能否正常登录。若登录失败,说明密码错误,需修正配置文件或重置MySQL root密码。
  • 检查root用户访问权限:登录MySQL后执行以下命令查看root用户的授权主机:
    SELECT user, host FROM mysql.user WHERE user='root';
    
    若不存在root@localhost的记录,执行以下命令授权:
    CREATE USER 'root'@'localhost' IDENTIFIED BY '你的密码';
    GRANT ALL PRIVILEGES ON employeemanager.* TO 'root'@'localhost';
    FLUSH PRIVILEGES;
    
  • 修正Hibernate方言:Spring Boot 3.0.5适配MySQL 8+,需将方言改为MySQL8Dialect,修改application.properties:
    spring.jpa.database-platform = org.hibernate.dialect.MySQL8Dialect
    
  • 确认MySQL服务状态:确保MySQL服务正在运行,且3306端口未被占用。
  • 处理特殊字符密码:若密码包含特殊字符,需用双引号包裹,例如spring.datasource.password="pass@123"。

内容的提问来源于stack exchange,提问作者Aishwarya Bibinagar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 17:17:56