Docker下Nacos配置应用开发

简介: 细说springboot应用如何使用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上下载本次实战的源码,地址和链接信息如下表所示:
名称 链接 备注
项目主页 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配置服务开发的时候,希望本文能给您提供一些参考。

欢迎关注阿里云开发者社区博客:程序员欣宸

学习路上,你不孤单,欣宸原创一路相伴...
相关文章
|
7天前
|
Docker 容器
Docker 镜像加速器配置指南
dockerhub加速器失败,使用第三方加速器
|
19天前
|
存储 Prometheus 监控
Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行
本文深入探讨了在Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行。
29 5
|
1月前
|
负载均衡 应用服务中间件 Nacos
Nacos配置中心
Nacos配置中心
83 1
Nacos配置中心
|
24天前
|
Java 网络安全 Nacos
Nacos作为流行的微服务注册与配置中心,其稳定性与易用性广受好评
Nacos作为流行的微服务注册与配置中心,其稳定性与易用性广受好评。然而,“客户端不发送心跳检测”是使用中常见的问题之一。本文详细探讨了该问题的原因及解决方法,包括检查客户端配置、网络连接、日志、版本兼容性、心跳检测策略、服务实例注册状态、重启应用及环境变量等步骤,旨在帮助开发者快速定位并解决问题,确保服务正常运行。
44 5
|
1月前
|
监控 Java 测试技术
Nacos 配置中心变更利器:自定义标签灰度
本文是对 MSE Nacos 应用自定义标签灰度的功能介绍,欢迎大家升级版本进行试用。
134 10
|
26天前
|
存储 安全 数据安全/隐私保护
Docker中配置TLS加密的步骤
我们可以在 Docker 中成功配置 TLS 加密,增强 Docker 环境的安全性,保护容器之间以及与外界的通信安全。需要注意的是,在实际应用中,应根据具体情况进行更细致的配置和调整,确保符合安全要求。同时,定期更新证书和私钥,以保障安全性。
50 1
|
1月前
|
网络安全 Nacos 开发者
Nacos作为流行的微服务注册与配置中心,“节点提示暂时不可用”是常见的问题之一
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。然而,“节点提示暂时不可用”是常见的问题之一。本文将探讨该问题的原因及解决方案,帮助开发者快速定位并解决问题,确保服务的正常运行。通过检查服务实例状态、网络连接、Nacos配置、调整健康检查策略等步骤,可以有效解决这一问题。
36 4
|
1月前
|
Java 网络安全 Nacos
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。然而,实际使用中常遇到“客户端不发送心跳检测”的问题。本文深入探讨该问题的原因及解决方案,帮助开发者快速定位并解决问题,确保服务正常运行。通过检查客户端配置、网络连接、日志、版本兼容性、心跳策略、注册状态、重启应用和环境变量等步骤,系统地排查和解决这一问题。
51 3
|
1月前
|
安全 Nacos 数据库
Nacos是一款流行的微服务注册与配置中心,但直接暴露在公网中可能导致非法访问和数据库篡改
Nacos是一款流行的微服务注册与配置中心,但直接暴露在公网中可能导致非法访问和数据库篡改。本文详细探讨了这一问题的原因及解决方案,包括限制公网访问、使用HTTPS、强化数据库安全、启用访问控制、监控和审计等步骤,帮助开发者确保服务的安全运行。
45 3