Docker 下 Nacos 配置应用开发,java 初级程序员面试
基于 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>
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>1.3.0</version>
<configuration>
<from>
<image>openjdk:8u201-jdk-alpine3.9</image>
</from>
<to>
<!--镜像名称和 tag,使用了 mvn 内置变量{project.version}-->
<image>bolingcavalry/nacos{project.version}</image>
</to>
<container>
<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.grou
p=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
评论