Nacos: No DataSource set 解决方案

介绍

在使用 Nacos 进行服务注册和发现时,有时候会遇到 java.lang.IllegalStateException: No DataSource set 异常。这个异常通常是由于没有配置数据源而导致的。本文将介绍这个问题的原因,并提供解决方案。

异常原因

Nacos 是一个用于实现服务发现、配置管理和动态 DNS 的开源项目。它使用了数据库来存储服务注册信息和配置。因此,在运行 Nacos 之前,需要先配置数据库,并将数据库的连接信息配置给 Nacos。

当运行 Nacos 时,如果没有配置数据源,或者配置错误,就会抛出 java.lang.IllegalStateException: No DataSource set 异常。

解决方案

要解决 java.lang.IllegalStateException: No DataSource set 异常,需要进行以下步骤:

1. 配置数据源

首先,需要配置正确的数据源。对于大多数情况,我们可以使用 MySQL 数据库作为 Nacos 的数据存储。

在这里,我们以 Spring Boot 为例,具体配置如下:

  1. 添加 mysql-connector-java 依赖到 pom.xml 文件中:
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.26</version>
</dependency>
  1. application.properties(或 application.yml)文件中添加以下配置:
# 数据库连接信息
spring.datasource.url=jdbc:mysql://localhost:3306/nacos?useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

# 数据库连接池配置
spring.datasource.initialSize=5
spring.datasource.minIdle=5
spring.datasource.maxActive=20
spring.datasource.maxWait=60000

这里,我们使用了一个名为 nacos 的数据库,用户名为 root,密码为 123456。根据实际情况修改配置。

2. 启动 Nacos

配置完成后,就可以启动 Nacos 了。可以使用以下任一方式启动:

  • 命令行启动:执行 startup.sh -m standalone(Linux/MacOS)或 startup.cmd -m standalone(Windows)
  • 通过 IDE 启动:运行 com.alibaba.nacos.NacosApplication 类的 main 方法

3. 验证配置

启动完成后,可以访问 http://localhost:8848/nacos 来查看 Nacos 控制台。

如果看到了 Nacos 的登录页面,说明配置成功。使用默认的用户名 nacos 和密码 nacos 进行登录。

4. 注册服务

接下来,我们来注册一个简单的服务。

创建服务提供者

首先,创建一个简单的 Spring Boot 项目,添加以下依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
    <groupId>com.alibaba.boot</groupId>
    <artifactId>nacos-discovery-spring-boot-starter</artifactId>
    <version>2.0.0</version>
</dependency>

然后,创建一个 RESTful Controller:

@RestController
public class HelloController {
    
    @GetMapping("/hello")
    public String hello() {
        return "Hello Nacos!";
    }
}

最后,在 application.properties(或 application.yml)文件中添加以下配置:

# Nacos 服务注册配置
spring.cloud.nacos.discovery.server-addr=localhost:8848
spring.application.name=nacos-demo-provider
注册服务

运行该项目后,服务将会注册到 Nacos 中。我们可以通过以下方式验证:

  1. 访问 Nacos 控制台:http://localhost:8848/nacos
  2. 点击左侧的 "服务管理",然后选择 "服务列表"
  3. 在 "服务列表" 中,可以看到刚刚注册的服务

5. 查询服务

当服务注册完成后,我们可以通过 Nacos 控制台进行服务查询。具体步骤如下:

  1. 打开 Nacos 控制台:http://localhost:8848/nacos
  2. 点击左侧的 "服务管理",然后选择 "服务列表"
  3. 在 "服务列表" 中,找到注册的