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 为例,具体配置如下:
- 添加
mysql-connector-java
依赖到pom.xml
文件中:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
- 在
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 中。我们可以通过以下方式验证:
- 访问 Nacos 控制台:http://localhost:8848/nacos
- 点击左侧的 "服务管理",然后选择 "服务列表"
- 在 "服务列表" 中,可以看到刚刚注册的服务
5. 查询服务
当服务注册完成后,我们可以通过 Nacos 控制台进行服务查询。具体步骤如下:
- 打开 Nacos 控制台:http://localhost:8848/nacos
- 点击左侧的 "服务管理",然后选择 "服务列表"
- 在 "服务列表" 中,找到注册的