文章目录
- @[TOC](文章目录)
- 前言
- 一、项目配置
- 1.1 pom配置
- 1.2 nacos新建命名空间
- 1.3 项目配置
- 1.4 nacos上配置配置文件
- 1.5 代码新增测试读取服务配置代码
- 1.6 启动类增加注解
- 二、启动服务并测试
- 2.1 启动服务,查看是否注册成功
- 2.2 测试是否读取到了nacos上的配置
- 总结
文章目录
- @[TOC](文章目录)
- 前言
- 一、项目配置
- 1.1 pom配置
- 1.2 nacos新建命名空间
- 1.3 项目配置
- 1.4 nacos上配置配置文件
- 1.5 代码新增测试读取服务配置代码
- 1.6 启动类增加注解
- 二、启动服务并测试
- 2.1 启动服务,查看是否注册成功
- 2.2 测试是否读取到了nacos上的配置
- 总结
前言
nacos已经搭建好了,现在搭建springcloudalibaba项目。这里对于springcloudalibaba版本的选择,选择支持jdk8的最新版本,我本地的jdk为1.8版本,就直接用支持jdk8的版本。
这里选择的springcloudalibaba 2021.0.5.0*版本。
一、项目配置
先自己建立一个springboot项目,具体过程就不展示了
1.1 pom配置
关键nacos配置如下,注意这里的nacos2.0 discoverry和nacos config要一起引入使用,否则启动会报错如下
Server check fail, please check server 127.0.0.1 ,port 9848 is available , error ={}
<!-- SpringCloud Alibaba Nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- SpringCloud Alibaba Nacos Config -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
完整的配置pom如下:
<?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>
<groupId>com.springcloudalibaba</groupId>
<artifactId>gateway</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>gateway</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>8</java.version>
<spring-boot.version>2.6.13</spring-boot.version>
<spring-cloud.version>2021.0.5</spring-cloud.version>
<spring-cloud-alibaba.version>2021.0.5.0</spring-cloud-alibaba.version>
</properties>
<dependencies>
<!-- SpringCloud Gateway -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!-- SpringCloud Alibaba Nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- SpringCloud Alibaba Nacos Config -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<!-- SpringCloud 微服务 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- SpringCloud Alibaba 微服务 -->
<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>
<!-- SpringBoot 依赖配置 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.6.0</version>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
1.2 nacos新建命名空间
新建名为test的命名空间,记住这个命名空间id,后面会用到
1.3 项目配置
新建bootstrap.yml文件,
- 配置服务注册到nacos配置
spring:
application:
# 应用名称
name: gateway
profiles:
# 环境配置
active: dev
main:
allow-bean-definition-overriding: true
cloud:
nacos:
discovery:
# 服务注册地址
server-addr: 192.168.184.130:8848
group: alibaba
#服务命名空间,即上面创建命名空间的时候自动生成的id
namespace: 7dd9fa65-9c9d-484f-94f8-d621ca05d0e5
#是否注册到nacos,false不注册到nacos,默认true
register-enabled: true
2.配置中心配置
这里的配置是部署到环境后自动读取nacos的配置文件启动服务,达到灵活配置服务配置的目的。读取的规则为
s
p
r
i
n
g
.
a
p
p
l
i
c
a
t
i
o
n
.
n
a
m
e
−
{spring.application.name}-
spring.application.name−{spring.profiles.active}.yml
例如我这里的为gateway-dev.yml
shared-configs为共享配置,即一个命名空间下所有的服务都可以读取到的配置,一般用来设置多个服务共享的配置,例如我这里配置的为application-
s
p
r
i
n
g
.
p
r
o
f
i
l
e
s
.
a
c
t
i
v
e
.
{spring.profiles.active}.
spring.profiles.active.{spring.cloud.nacos.config.file-extension}
即application-dev.yml
config:
# 配置中心地址
server-addr: 192.168.184.130:8848
# 配置文件格式
file-extension: yml
group: ${spring.cloud.nacos.discovery.group}
namespace: ${spring.cloud.nacos.discovery.namespace}
#共享配置
shared-configs[0]:
data-id: application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} # 配置文件名-Data Id
group: ${spring.cloud.nacos.discovery.group} # 默认为DEFAULT_GROUP
refresh: false
完整的整个配置如下:
# Tomcat
server:
port: 8080
# Spring
spring:
application:
# 应用名称
name: gateway
profiles:
# 环境配置
active: dev
main:
allow-bean-definition-overriding: true
cloud:
nacos:
discovery:
# 服务注册地址
server-addr: 192.168.184.130:8848
group: alibaba
namespace: 7dd9fa65-9c9d-484f-94f8-d621ca05d0e5
register-enabled: true
config:
# 配置中心地址
server-addr: 192.168.184.130:8848
# 配置文件格式
file-extension: yml
group: ${spring.cloud.nacos.discovery.group}
namespace: ${spring.cloud.nacos.discovery.namespace}
shared-configs[0]:
data-id: application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} # 配置文件名-Data Id
group: ${spring.cloud.nacos.discovery.group} # 默认为DEFAULT_GROUP
refresh: false
logging:
level:
com.alibaba.nacos.client: info
1.4 nacos上配置配置文件
配置gateway-dev.yml文件如下,dataid为1.3里面配置的配置文件名称,group和项目服务一致即可。
配置application-dev.yml如下
这里我增加了两个配置,用于验证是否读取到了nacos上的配置。
1.5 代码新增测试读取服务配置代码
package com.springcloudalibaba.gateway.control;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class Control {
@Value("${testName}")
private String testName;
@Value(("${publicName}"))
private String publicName;
@RequestMapping(value = "/hello")
public String index() {
System.out.println("testname: "+testName);
System.out.println("publicName:"+publicName);
return testName+publicName;
}
}
1.6 启动类增加注解
启动类增加注解@EnableDiscoveryClient
package com.springcloudalibaba.gateway;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class GatewayApplication {
public static void main(String[] args) {
SpringApplication.run(GatewayApplication.class, args);
}
}
二、启动服务并测试
2.1 启动服务,查看是否注册成功
本地启动服务
可以看到服务已经注册上去了。
2.2 测试是否读取到了nacos上的配置
测试刚刚写的接口
可以看到已经请求到了刚刚写在nacos上的配置,测试成功。
总结
1.nacos2.0服务注册和服务配置要同时使用,否则会报错。
2.springcloudalibaba的版本、springcloud版本、springboot版本要版本匹配,不然容易出现不可预知的错误。