在使用Spring Boot项目时,若通过Nacos读取MySQL数据库配置时遇到“Public Key Retrieval is not allowed”错误,通常是因为MySQL的安全设置导致的。下面将详细阐述出现这一错误的原因、解决方案以及代码示例。

一、错误原因

当你在Spring Boot项目中配置MySQL数据源时,如果数据库未正确配置,或者JDBC URL中缺少必要的参数,就会导致“Public Key Retrieval is not allowed”错误。这通常出现在使用MySQL 8.0及以上版本时,因为这些版本默认启用了更高的安全标准,禁止公钥的自动检索。

二、解决方案

为了解决这个问题,我们可以在连接数据库的JDBC URL中添加一个参数:allowPublicKeyRetrieval=true。这个参数允许MySQL在连接时自动检索公钥。通过这种方式,可以避免以上错误。

在Nacos中配置MySQL数据库连接信息时,可以按照以下格式进行配置:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/your_database?allowPublicKeyRetrieval=true&useSSL=false
    username: your_username
    password: your_password

三、使用Nacos配置数据源

如果项目使用Nacos作为配置中心,可以在Nacos的配置管理中添加MySQL的连接信息。以下是一个典型的配置文件示例:

# Nacos Config Example
spring.datasource.url=jdbc:mysql://localhost:3306/your_database?allowPublicKeyRetrieval=true&useSSL=false
spring.datasource.username=your_username
spring.datasource.password=your_password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

四、Spring Boot项目配置示例

下面是一个简单的Spring Boot项目配置示例。

1. pom.xml依赖配置

pom.xml中,确保引入Spring Boot Starter Data JPA和MySQL驱动的依赖:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    </dependency>
</dependencies>

2. application.yml 或bootstrap.yml配置

如果使用bootstrap.yml来加载Nacos配置,可以这样配置:

spring:
  application:
    name: your-application-name
  cloud:
    nacos:
      config:
        server-addr: localhost:8848
        file-extension: properties

3. Repository 示例

创建一个简单的JPA Repository来管理数据:

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
}

4. 使用示例

在服务中使用该Repository:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserService {

    @Autowired
    private UserRepository userRepository;

    public List<User> getAllUsers() {
        return userRepository.findAll();
    }
}

五、总结

通过在JDBC连接字符串中添加allowPublicKeyRetrieval=true,可以有效解决“Public Key Retrieval is not allowed”的错误。同时,通过Nacos配置中心管理数据库连接配置信息,可以使项目的配置更加灵活和集中管理。在实际开发中,保持对数据库连接参数的注意,可以减少由于配置错误导致的运行时异常。希望以上内容能对你接下来的开发有所帮助。

点赞(0) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部