写点什么

Docker 下 Nacos 配置应用开发

作者:程序员欣宸
  • 2022-10-12
    广东
  • 本文字数:3492 字

    阅读完需:约 1 分钟

Docker下Nacos配置应用开发

欢迎访问我的 GitHub

这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos


  • 本文是在《Docker下,两分钟极速体验Nacos配置中心》一文的续篇,前面我们快速搭建 Nacos 配置中心,并且运行一个 springboot 应用来使用该配置中心的服务,今天来研究这个 springboot 应用的细节,学习 springboot 应用如何使用 Nacos 配置中心的服务;

系列文章链接

  • 下面是《Spring Cloud Alibaba 实战系列》的所有文章地址:


  1. 《Docker下,两分钟极速体验Nacos》

  2. 《Docker下的Nacos环境开发》

  3. 《Docker下,两分钟极速体验Nacos配置中心》

  4. 《Docker下Nacos配置应用开发》

环境信息

  1. 操作系统:CentOS Linux release 7.6.1810

  2. Docker:1.13.1, build b2f74b2/1.13.1

  3. docker-compose:1.24.1, build 4667896

  4. jdk:1.8.0_191

  5. maven:3.6.0

源码下载

  • 如果您不打算写代码,也可以从 GitHub 上下载本次实战的源码,地址和链接信息如下表所示:



  • 这个 git 项目中有多个文件夹,本章的应用在 nacosdemo 文件夹下,如下图所示,nacosdemo 文件夹下的 configdemo 就是本文对应的项目源码:

springboot 应用开发

  • 基于 maven 创建名为 nacosdemo 的 springboot 应用,pom.xml 内容如下:


<?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">    <parent>        <artifactId>nacosdemo</artifactId>        <groupId>com.bolingcavalry</groupId>        <version>1.0-SNAPSHOT</version>    </parent>    <modelVersion>4.0.0</modelVersion>    <artifactId>configdemo</artifactId>
<name>configdemo</name> <description>Demo project for Spring Boot</description>
<properties> <java.version>1.8</java.version> </properties>
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> </dependencies>
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <!--使用jib插件--> <plugin> <groupId>com.google.cloud.tools</groupId> <artifactId>jib-maven-plugin</artifactId> <version>1.3.0</version> <configuration> <!--from节点用来设置镜像的基础镜像,相当于Docerkfile中的FROM关键字--> <from> <!--使用openjdk官方镜像,tag是8u201-jdk-alpine3.9,表示镜像的操作系统是alpine3.9,装好了jdk8u201--> <image>openjdk:8u201-jdk-alpine3.9</image> </from> <to> <!--镜像名称和tag,使用了mvn内置变量${project.artifactId}和${project.version}--> <image>bolingcavalry/nacos${project.artifactId}:${project.version}</image> </to> <!--容器相关的属性--> <container> <!--jvm内存参数--> <jvmFlags> <jvmFlag>-Xms1g</jvmFlag> <jvmFlag>-Xmx1g</jvmFlag> </jvmFlags> <!--要暴露的端口--> <ports> <port>8080</port> </ports> <useCurrentTimestamp>true</useCurrentTimestamp> </container> </configuration> </plugin> </plugins> </build></project>
复制代码


  • 上述 pom.xml 文件有两点要注意:a. 添加依赖 spring-cloud-starter-alibaba-nacos-config ;b. 为了生成 docker 镜像,使用 jib 插件;

  • src\main\resources 这个目录下,将原有的 application.properties 或者 application.yml 都删除干净,只保留一个名为 bootstrap.properites 的文件,内容如下所示:


#应用名spring.application.name=config-demo
#nacos配置中心的地址和端口,"nacos"是docker-compose.yml中的nacos容器名spring.cloud.nacos.config.server-addr=nacos:8848
#配置的分组spring.cloud.nacos.config.group=BOLING_CAVALRY
#对应配置文件的ID,如果没有这个配置,就按照应用名称"config-demo"去nacos上寻找spring.cloud.nacos.config.prefix=my-nacos-config
#配置文件的扩展名,这里使用yamlspring.cloud.nacos.config.file-extension=yaml
复制代码


  • 创建启动类 ConfigdemoApplication.java,增加一个注解 EnableDiscoveryClient:


package com.bolingcavalry.configdemo;
import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication@EnableDiscoveryClientpublic class ConfigdemoApplication {
public static void main(String[] args) { SpringApplication.run(ConfigdemoApplication.class, args); }}
复制代码


  • 创建一个 Controller 类 ConfigController.java,用于提供一个 http 服务,返回的内容来自配置信息,如果能使用 Nacos 提供的配置服务,这里返回的应该是在 Nacos 上配置的内容:


package com.bolingcavalry.configdemo.controller;
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;
import java.text.SimpleDateFormat;import java.util.Date;
/** * @Description: 提供web服务的controller * @author: willzhao E-mail: zq2599@gmail.com * @date: 2019/08/18 18:23 */@RestController@RefreshScopepublic class ConfigController {
@Value("${bolingcavalry.desc:desc from code}") private String desc;
@RequestMapping("/test") public String test(){ return desc + new SimpleDateFormat(" [yyyy-mm-dd HH:mm:ss]").format(new Date()); }}
复制代码


  • 上述代码有两处需要注意:a. RefreshScope 注解用于声明配置信息变化后立即同步至此;b. desc 变量的值来自 @Value 注解,如果无法从 Nacos 取得"bolingcavalry.desc"对应的值,desc 的值就是默认的"desc from code";

  • 以上就是 configdemo 的所有源码了,在 pom.xml 所在目录执行以下命令,即可构建 docker 镜像,存入本地仓库:


mvn compile jib:dockerBuild
复制代码


  • 将镜像推送到 hub.docker.com,这样大家都可以下载此镜像来用了:


docker push bolingcavalry/nacosconfigdemo:1.0-SNAPSHOT
复制代码


  • 现在镜像文件已经准备好了,接下来做容器编排;

容器编排

  • 创建 docker-compose.yml 文件,如下所示,nacos 我们在前面的章节已经介绍过了,是 nacos server 作成的镜像,config-demo 是刚才构建好的 springboot 应用镜像:


version: '2'services:  nacos:    image: bolingcavalry/nacosserver:0.0.1    container_name: nacos    restart: unless-stopped    ports:    - '8848:8848'  config-demo:    image: bolingcavalry/nacosconfigdemo:1.0-SNAPSHOT    container_name: config-demo    restart: unless-stopped    depends_on:    - nacos    ports:    - '8080:8080'
复制代码


  • 至此,上一篇实战所需的源码和配置就全部介绍完毕,在您着手 nacos 配置服务开发的时候,希望本文能给您提供一些参考。

欢迎关注 InfoQ:程序员欣宸

学习路上,你不孤单,欣宸原创一路相伴...


发布于: 2022-10-12阅读数: 19
用户头像

搜索"程序员欣宸",一起畅游Java宇宙 2018-04-19 加入

前腾讯、前阿里员工,从事Java后台工作,对Docker和Kubernetes充满热爱,所有文章均为作者原创,个人Github:https://github.com/zq2599/blog_demos

评论

发布
暂无评论
Docker下Nacos配置应用开发_nacos_程序员欣宸_InfoQ写作社区