nacos 安装
这里主要是 docker 的安装方式,安装完成以后访问http://ip:8848/nacos 即可打开 nacos 控制台。
docker search nacos
docker pull nacos/nacos-server
# 镜像拉完之后,启动脚本
docker run -d \
--name nacos \
--privileged \
--cgroupns host \
--env JVM_XMX=256m \
--env MODE=standalone \
--env JVM_XMS=256m \
-p 8848:8848/tcp \
-p 9848:9848/tcp \
--restart=always \
-w /home/nacos \
nacos/nacos-server
新建配置
在nacos控制台配置列表中创建配置:
dataId 一般设置成项目名,格式选择需要配置的格式
配置说明:
- dataId 用于项目读取名称,nacos 的命名规范为
{prefix}-{spring.profiles.active}.{file-extension} spring.profiles.active即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当spring.profiles.active为空时,对应的连接符-也将不存在,dataId 的拼接格式变成${prefix}.${file-extension}file-exetension为配置内容的数据格式,可以通过配置项spring.cloud.nacos.config.file-extension来配置。目前只支持properties和yaml类型。
整合依赖
pom 依赖
工程 pom 文件如下,注意 nacos 版本和 springboot 版本的匹配关系,如果版本不匹配会出现很多莫名其妙的问题。
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.zhangyl</groupId>
<artifactId>zhangyl-club-oss</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.4.2</spring-boot.version>
<spring-cloud-alibaba.version>2021.1</spring-cloud-alibaba.version>
<spring-cloud.version>2020.0.6</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<artifactId>spring-boot-starter-logging</artifactId>
<groupId>org.springframework.boot</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.2.0</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.16</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
配置文件
在 application.yml 同级目录下新建 bootstrap.yml 配置文件,并配置 nacos 相关配置。
spring:
application:
name: zhangyl-club-oss
profiles:
active: dev
cloud:
nacos:
config:
server-addr: xx.xx.xx.xx:8848
prefix: ${spring.application.name}
group: DEFAULT_GROUP
namespace:
file-extension: yaml
discovery:
enabled: true
server-addr: xx.xx.xx.xx:8848
配置读取
controller 层实现
package com.zhangyl.oss.controller;
import com.zhangyl.oss.adapter.NacosTestService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
/**
* @author zhangyl
* @date 2024/8/7 00:51
* @note
*/
@RestController
@Slf4j
public class FileController {
@Resource
private NacosTestService nacosTestService;
@RequestMapping("/testGetValue")
public String getValue() throws Exception {
return nacosTestService.test();
}
}
service 层
package com.zhangyl.oss.adapter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
/**
* @author zhangyl
* @date 2024/8/14 00:16
* @note
*/
@Service
public class NacosTestServiceImpl implements NacosTestService{
@Value("${storage.service.type}")
private String testValue;
@Override
public String test() {
return testValue;
}
}
测试结果:
ps:这里如果需要配置动态更新需要配合
@RefreshScop注解使用,该注解可以作用在方法和类上。
问题记录
应用无法启动
解法:nacos 配置后加上服务发现的相关配置即可正常启动
discovery:
enabled: true
server-addr: xx.xx.xx.xx:8848