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
相关产品推荐
相关产品推荐

