Docker下Nacos配置应用开发

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker下Nacos配置应用开发相关的知识,希望对你有一定的参考价值。

欢迎访问我的GitHub

  • 本文是在《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上下载本次实战的源码,地址和链接信息如下表所示:
名称 链接 备注
项目主页 https://github.com/zq2599/blog_demos 该项目在GitHub上的主页
git仓库地址(https) https://github.com/zq2599/blog_demos.git 该项目源码的仓库地址,https协议
git仓库地址(ssh) git@github.com:zq2599/blog_demos.git 该项目源码的仓库地址,ssh协议
  • 这个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

#配置文件的扩展名,这里使用yaml
spring.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
@EnableDiscoveryClient
public 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
@RefreshScope
public 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配置服务开发的时候,希望本文能给您提供一些参考。

欢迎关注51CTO博客:程序员欣宸

以上是关于Docker下Nacos配置应用开发的主要内容,如果未能解决你的问题,请参考以下文章

Docker如何安装nacos最新版本2.2.0

Docker下配置nacos

Docker下载安装Nacos并完成持久化配置

Docker下载安装Nacos并完成持久化配置

Docker下载安装Nacos并完成持久化配置

spring boot使用nacos作为配置中心实践