欢迎访问我的GitHub
这里分类和汇总了欣宸的全部原创(含配套源码): https://github.com/zq2599/blog_demos
- 本文是在《Docker下,两分钟极速体验Nacos配置中心》一文的续篇,前面我们快速搭建Nacos配置中心,并且运行一个springboot应用来使用该配置中心的服务,今天来研究这个springboot应用的细节,学习springboot应用如何使用Nacos配置中心的服务;
系列文章链接
- 下面是《Spring Cloud Alibaba实战系列》的所有文章地址:
环境信息
- 操作系统:CentOS Linux release 7.6.1810
- Docker:1.13.1, build b2f74b2/1.13.1
- docker-compose:1.24.1, build 4667896
- jdk:1.8.0_191
- 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配置服务开发的时候,希望本文能给您提供一些参考。
欢迎关注阿里云开发者社区博客:程序员欣宸
学习路上,你不孤单,欣宸原创一路相伴...