Nacos使用(下):SpringBoot和SpringCloud项目中使用Nacos

这篇具有很好参考价值的文章主要介绍了Nacos使用(下):SpringBoot和SpringCloud项目中使用Nacos。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Nacos使用(上):Nacos安装
Nacos使用(中):Java项目和Spring项目使用Nacos
Nacos使用(下):SpringBoot和SpringCloud项目中使用Nacos

3.3 SpringBoot SDK

父工程指定springboot版本:

<dependencyManagement>
  <dependencies>
	<dependency>
  	  <groupId>org.springframework.boot</groupId>
  	  <artifactId>spring-boot-dependencies</artifactId>
  	  <version>2.4.2</version>
  	  <type>pom</type>
  	  <scope>import</scope>
	</dependency>
  </dependencies>
</dependencyManagement>

导入jar包

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--配置中心-->
<dependency>
  <groupId>com.alibaba.boot</groupId>
  <artifactId>nacos-config-spring-boot-starter</artifactId>
  <version>0.2.12</version>
</dependency>
<!--服务治理-->
<dependency>
  <groupId>com.alibaba.boot</groupId>
  <artifactId>nacos-discovery-spring-boot-starter</artifactId>
  <version>0.2.12</version>
</dependency>

配置文件application.properties

spring.application.name=boot-test
server.port=8080
#配置中心
nacos.config.server-addr=127.0.0.1:8848
nacos.config.username=nacos
nacos.config.password=nacos
nacos.config.namespace=dev
#注册中心
nacos.discovery.server-addr=127.0.0.1:8848
nacos.discovery.username=nacos
nacos.discovery.password=nacos
nacos.discovery.namespace=dev

启动类

package com.test.nacos;

import com.alibaba.nacos.api.annotation.NacosProperties;
import com.alibaba.nacos.spring.context.annotation.EnableNacos;
import com.alibaba.nacos.spring.context.annotation.config.EnableNacosConfig;
import com.alibaba.nacos.spring.context.annotation.config.NacosPropertySource;
import com.alibaba.nacos.spring.context.annotation.discovery.EnableNacosDiscovery;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.PropertySource;

/**
 * @author 专治八阿哥的孟老师
 */
@SpringBootApplication
// 读取配置中心配置文件
@NacosPropertySource(dataId = "example.properties", autoRefreshed = true)
// 启动服务治理
@EnableNacosDiscovery
public class BootTestStarter {
    public static void main(String[] args) {
        SpringApplication.run(BootTestStarter.class, args);
    }
}

Nacos上创建一个配置文件

Nacos使用(下):SpringBoot和SpringCloud项目中使用Nacos,java技术,spring boot,spring cloud,java,Nacos

属性可以直接通过@NacosValue读取,也可以映射到一个配置类中

配置类:

package com.test.nacos;

import com.alibaba.nacos.api.config.annotation.NacosConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * @author 专治八阿哥的孟老师
 */
@Component
@NacosConfigurationProperties(prefix = "test", dataId = "example.properties", autoRefreshed = true)
public class TestConfiguration {
    private String config;

    public String getConfig() {
        return config;
    }

    public void setConfig(String config) {
        this.config = config;
    }
}

测试类

package com.test.nacos;

import javax.annotation.PostConstruct;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import com.alibaba.nacos.api.annotation.NacosInjected;
import com.alibaba.nacos.api.config.ConfigService;
import com.alibaba.nacos.api.config.annotation.NacosValue;
import com.alibaba.nacos.api.exception.NacosException;
import com.alibaba.nacos.api.naming.NamingService;

/**
 * @author 专治八阿哥的孟老师
 */
@Component
public class TestBean {

    @NacosInjected
    private ConfigService configService;
    // 服务名称
    @Value("${spring.application.name}")
    private String applicationName;
    // 服务的端口号
    @Value("${server.port}")
    private Integer port;
    // 远程配置,直接读取属性
    @NacosValue(value = "${test.config}", autoRefreshed = true)
    private String config;
    @Autowired
    private TestConfiguration testConfiguration;

    @NacosInjected
    private NamingService namingService;

    @PostConstruct
    public void register() throws NacosException {
        // 测试服务注册
        namingService.registerInstance(applicationName, "127.0.0.1", port);
    }

    @PostConstruct
    public void init() {
        try {
            System.out.println(configService.getConfig("example.properties", "DEFAULT_GROUP", 5000));
            System.out.println(config);
            System.out.println(testConfiguration.getConfig());
        } catch (NacosException e) {
            throw new RuntimeException(e);
        }
    }
}

3.4 SpringCloud

父工程指定:

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-dependencies</artifactId>
      <version>2020.0.1</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-dependencies</artifactId>
      <version>2.4.2</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
    <dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-alibaba-dependencies</artifactId>
      <version>2021.1</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

3.4.1 配置中心

在 Nacos Spring Cloud 中,dataId 的完整格式如下,其中**${prefix}**默认是spring.application.name,可以通过配置

${prefix}-${spring.profiles.active}.${file-extension}

Nacos Spring Cloud默认使用的是bootstrap.properties文件

spring.application.name=consumer

spring.profiles.active = dev

不同环境使用不同配置文件,bootstrap-dev.properties内容为如下

server.port=8080

spring.cloud.nacos.config.server-addr=http://localhost:8848
spring.cloud.nacos.config.namespace=${spring.profiles.active}
spring.cloud.nacos.config.file-extension=properties
spring.cloud.nacos.config.username=nacos
spring.cloud.nacos.config.password=nacos

在Nacos上添加配置文件,文件的dataId要与当前项目的application-name对应

Nacos使用(下):SpringBoot和SpringCloud项目中使用Nacos,java技术,spring boot,spring cloud,java,Nacos

spring.datasource.url = jdbc:mysql://localhost:3306/test?characterEncoding=utf-8&serverTimezone=GMT%2B8
spring.datasource.username =root
spring.datasource.password =
spring.datasource.driverClassName = com.mysql.cj.jdbc.Driver

测试类

package com.test.consumer;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author 专治八阿哥的孟老师
 */
@RestController
@RefreshScope // 自动刷新
public class TestController {
    //从nacos读取
    @Value("${spring.datasource.url}")
    private String url;

    @RequestMapping("test")
    public String test() { //访问接口可以看读取出的配置
        return url;
    }
}

启动类

package com.test.consumer;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * @author 专治八阿哥的孟老师
 */
@SpringBootApplication
public class ConsumerStarter {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerStarter.class, args);
    }
}

3.4.2 服务治理-Feign

常用的服务有Feign和Dubbo两种,我们写两种类型的提供者,注意此处配置与版本有关,旧版本需要在启动类上加@EnableDiscoveryClient

http服务的提供者不需要特殊配置,写一个普通的controller接口

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</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>

启动类

package com.test.nacos;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * @author 专治八阿哥的孟老师
 */
@SpringBootApplication
public class HttpProviderStarter {
    public static void main(String[] args) {
        SpringApplication.run(HttpProviderStarter.class, args);
    }
}
package com.test.nacos.controller;

import java.util.HashMap;
import java.util.Map;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author 专治八阿哥的孟老师
 */
@RestController
public class TestController {

    @RequestMapping("/test")
    public Map test() {
        Map map = new HashMap();
        map.put("name", "张三");
        map.put("id", 123);
        return map;
    }
}

bootstrap.properties

spring.application.name=provider-http
spring.profiles.active = dev

server.port=8081

spring.cloud.nacos.discovery.server-addr=http://localhost:8848
spring.cloud.nacos.discovery.namespace=${spring.profiles.active}
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=nacos

消费者

<!--服务治理-->
<dependency>
  <groupId>com.alibaba.cloud</groupId>
  <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--调用feign-->
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>

bootstrap.properties

spring.cloud.nacos.discovery.server-addr=http://localhost:8848
spring.cloud.nacos.discovery.namespace=${spring.profiles.active}
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=nacos

#只做消费者,不被其他服务发现
spring.cloud.nacos.discovery.register-enabled=false

启动类上添加@EnableFeignClients注解

Nacos使用(下):SpringBoot和SpringCloud项目中使用Nacos,java技术,spring boot,spring cloud,java,Nacos

调用Feign服务,详见SpringCloud

package com.test.consumer.service;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import java.util.Map;

/**
 * @author 专治八阿哥的孟老师
 */
@FeignClient(value = "provider-http")
public interface TestFeignService {
    @RequestMapping(value = "/test", method = RequestMethod.GET)
    Map test();
}

需要用到服务的地方注入service即可

@Autowired
private TestFeignService testFeignService;

@RequestMapping("feign")
public Map feign() {
    return testFeignService.test();
}

3.4.3 服务治理-Dubbo

Dubbo服务通常需要把暴露的接口和实体单独提取出来,封装成jar,服务提供者实现jar里的接口,消费者通过jar调用远程服务

Nacos使用(下):SpringBoot和SpringCloud项目中使用Nacos,java技术,spring boot,spring cloud,java,Nacos

dubbo-service,注意实体类一定要实现Serializable接口,否则调用过程中会报通信失败

package com.test.nacos.entity;

import java.io.Serializable;

/**
 * @author 专治八阿哥的孟老师
 */
public class User implements Serializable {
    private Integer id;
    private String name;

   //getter/setter略
}
package com.test.nacos.service;

import com.test.nacos.entity.User;

public interface TestDubboService {

    User getUser(Integer id);
}

dubbo-provider

<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</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>
  <dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-dubbo</artifactId>
  </dependency>
  <!--不同版本不一样-->
  <dependency>
    <groupId>javax.ws.rs</groupId>
    <artifactId>jsr311-api</artifactId>
    <version>1.1.1</version>
  </dependency>
  <!--定义接口的包-->
  <dependency>
    <groupId>com.test.nacos</groupId>
    <artifactId>dubbo-service</artifactId>
    <version>1.0-SNAPSHOT</version>
  </dependency>
</dependencies>

bootstrap.properties

spring.application.name=provider-dubbo
spring.profiles.active = dev

server.port=8082

spring.cloud.nacos.discovery.server-addr=http://localhost:8848
spring.cloud.nacos.discovery.namespace=${spring.profiles.active}
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=nacos

dubbo.application.name=${spring.application.name}
# dubbo扫描包路径
dubbo.scan.base-packages=com.test.nacos.service
# dubbo协议
dubbo.protocol.name=dubbo
# 随机端口
dubbo.protocol.port=-1
# nacos地址
dubbo.registry.address=spring-cloud://localhost:8848
dubbo.registry.username=nacos
dubbo.registry.password=nacos

接口实现类

package com.test.nacos.service.impl;

import com.test.nacos.entity.User;
import com.test.nacos.service.TestDubboService;
import org.apache.dubbo.config.annotation.DubboService;

/**
 * @author 专治八阿哥的孟老师
 */
@DubboService // dubbo注解
public class TestDubboServiceImpl implements TestDubboService {
    @Override
    public User getUser(Integer id) {
        User user = new User();
        user.setId(id);
        user.setName("test");
        return user;
    }
}

启动类

package com.test.nacos;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * @author 专治八阿哥的孟老师
 */
@SpringBootApplication
public class DubboTestStarter {
    public static void main(String[] args) {
        SpringApplication.run(DubboTestStarter.class, args);
    }
}

消费者追加jar包

<dependency>
  <groupId>com.alibaba.cloud</groupId>
  <artifactId>spring-cloud-starter-dubbo</artifactId>
</dependency>
<dependency>
  <groupId>javax.ws.rs</groupId>
  <artifactId>jsr311-api</artifactId>
  <version>1.1.1</version>
</dependency>
<dependency>
  <groupId>com.test.nacos</groupId>
  <artifactId>dubbo-service</artifactId>
  <version>1.0-SNAPSHOT</version>
</dependency>
dubbo.registry.protocol=dubbo
dubbo.registry.address=spring-cloud://localhost:8848
# dubbo 协议
dubbo.protocol.id=dubbo
dubbo.protocol.name=dubbo
# dubbo 协议端口( -1 表示自增端口,从 20880 开始)
dubbo.protocol.port=-1
# Dubbo 消费端订阅服务端的应用名,多个服务提供者用逗号分隔
dubbo.cloud.subscribed-services=provider-dubbo

需要引入的时候,通过 @DubboReference引入服务文章来源地址https://www.toymoban.com/news/detail-685707.html

    @DubboReference
    private TestDubboService testDubboService;

    @RequestMapping("dubbo")
    public User dubbo() {
        return testDubboService.getUser(1);
    }

到了这里,关于Nacos使用(下):SpringBoot和SpringCloud项目中使用Nacos的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Java项目】SpringCloud项目注册到Nacos中心时显示的是内网IP导致不同服务器之间无法互相调用接口的解决并发

    微服务项目地址—动动你发财的小手点一个stars吧 出现这个问题是之前我也就遇到过的,这个问题的情况就是: 我们知道微服务项目是可以把不同的项目部署在不同的服务器上从而减少某一台服务器的压力,我们只需要为每一个服务配置一个注册中心即可,然后一个服务需要

    2024年02月16日
    浏览(50)
  • SpringCloud Alibaba(一)微服务简介+Nacos的安装部署与使用+Nacos集成springboot实现服务注册+Feign实现服务之间的远程调用+负载均衡+领域划分

    目录 一.认识微服务 1.0.学习目标 1.1.单体架构 单体架构的优缺点如下: 1.2.分布式架构 分布式架构的优缺点: 1.3.微服务 微服务的架构特征: 1.4.SpringCloud 1.5Nacos注册中心 1.6.总结 二、Nacos基本使用安装部署+服务注册 (一)linux安装包方式单节点安装部署 1. jdk安装配置 2. na

    2024年02月09日
    浏览(47)
  • java 入门Spring,SpringBoot,SpringCloud等技术全栈教程网站导航

    我们整理了Java的全栈技术路线的各个精品网站,从最简单的基础语法,到核心JVM,到企业级开发Spring以及通信技术Netty等开发,每个网站都有对应的免费的精品教程。我们全部收录到 java 技术全栈学习导航 http://​www.webhub123.com/#/home/detail?projectHashid=59183272ownerUserid=22053727 整理

    2023年04月20日
    浏览(44)
  • springcloud/springboot集成NACOS 做注册和配置中心以及nacos源码分析

    Spring Cloud 是一系列框架的有序集合如服务发现注册、配置中心、消息总线、负载均衡、熔断器、数据监控等。 SpringCloud 将多个服务框架组合起来,通过Spring Boot进行再封装,屏蔽掉了复杂的配置和实现原理,最终给开发者提供了一套简单易懂、易部署和易维护的分布式系统开

    2024年02月08日
    浏览(67)
  • 微服务(SpringBoot、SpringCloud、SpringCloud Alibaba、Nacos、JDK)之间的版本对应依赖关系(附Nacos高速下载地址)

    前言 本文主要整理与介绍在搭建微服务项目时,核心组件之间的版本对应关系,避免版本依赖冲突带来的一系列问题,同时也方便后续升级与查看。 这里先放上我目前搭建的较新的微服务脚手架版本,如下(springboot3.0开始不支持jdk8) Spring Boot Spring Cloud Spring Cloud Alibaba Noc

    2024年02月04日
    浏览(45)
  • springboot 项目里面使用nacos ,不需要配置nacos 的用户名密码嘛

    当在Spring Boot项目中使用Nacos时,如果您不需要配置Nacos的用户名和密码,可以将username和password属性留空或不配置。这样,Nacos客户端将以匿名方式连接到Nacos服务器。 在bootstrap.yml或application.yml中配置Nacos的用户名和密码时,您可以将其留空或不填写: 通过将username和password属

    2024年02月14日
    浏览(38)
  • springBoot配置文件账号密码加密存储(springCloud nacos)

            最近公司有要求,项目中的配置文件不允许明文存储,全部要改为密文,收集了一些资料,在这里做下记录总结。 在Application启动主类中加入启动注解 @EnableEncryptableProperties 注:加密因子password配置在配置文件中也会涉及到安全问题,更安全的做法是:将其作为系

    2024年02月16日
    浏览(35)
  • 分布式微服务技术栈-SpringCloud<Eureka,Ribbon,nacos>

    分布式架构的一种 把服务进行 拆分 springcloud 解决了 服务拆分过程中的 治理问题 与单体应用 进行区分 (单体架构 把业务所有功能集中开发,打成一个包部署) 每个模块独立开发和部署(服务集群) 服务之间互相调用 出现分布式技术 Webservice ESB Hession Dubbo 异步通信 消息队

    2024年02月07日
    浏览(54)
  • SpringCloud-SpringBoot读取Nacos上的配置文件

    在 Spring Boot 应用程序中,可以使用 Spring Cloud Nacos 来实现从 Nacos 服务注册中心和配置中心读取配置信息。以下是如何在 Spring Boot 中读取 Nacos 上的配置文件的步骤: 1. 引入依赖 首先,在 Spring Boot 项目的 pom.xml 文件中添加 Spring Cloud Nacos 的依赖: 2. 配置 Nacos 连接信息 将 Nac

    2024年04月17日
    浏览(54)
  • SpringCloud学习笔记(九)_使用Java类加载SpringBoot、SpringCloud配置文件

    我们都知道平常在使用SpringBoot和SpringCloud的时候,如果需要加载一两个配置文件的话我们通常使用@Value(“${属性名称}”)注解去加载。但是如果配置文件属性特别多的时候使用这种方式就显得特别的不友好了。 比如说,我们要加载下方这个名为application.yml的配置文件。 | —

    2024年02月11日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包