• SpringCloud系列之配置中心(Config)使用说明


    大家好,最近公司新项目采用SpingCloud全家桶进行开发,原先对SpringCloud仅仅只是停留在了解的初级层面,此次借助新项目的契机可以深入实践下SpringCloud,甚是Happy。大学毕业刚入职的时候就有想写技术文章的想法,蹉跎蹉跎都那么些年过去了,期间所遇到的问题都图方便随手保存在了有道云笔记这个狭小的空间中,记了这么多也要见见光了,后续有机会都迁移出来,大家互相学习,提升技术,修炼内功。话不多说,那我们现在就开始SpringCloud之旅吧!

    项目版本

    spring-boot-version:2.2.5.RELEASE

    spring-cloud.version:Hoxton.SR3

    ConfigServer服务端

    先构建SpringCloud Config服务端
    打开https://start.spring.io/
    勾选Config Server,下载导入IDE即可
    file
    部分pom信息

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-config-server</artifactId>
    </dependency> 
    

    application.properties

    # 应用服务名称
    spring.application.name=config-server
    # 应用服务端口号
    server.port=9001
    # Git远程库检索相对地址
    spring.cloud.config.server.git.search-paths=/springCloudAProject/**
    # Git远程库http访问项目地址
    spring.cloud.config.server.git.uri=https://github.com/niuniu9631/SpringCloudConfig
    # Git远程库http访问验证用户名
    spring.cloud.config.server.git.username=自己Git账号
    # Git远程库http访问验证密码
    spring.cloud.config.server.git.password=自己Git账号密码
    

    ConfigServerApplication.java

    @EnableConfigServer
    @SpringBootApplication
    public class ConfigServerApplication {
        public static void main(String[] args) {
            SpringApplication.run(ConfigServerApplication.class, args);
        }
    }
    

    至此服务端相关代码配置都已OK,让我们一起Run起来吧。
    通过浏览器访问下服务,http://localhost:9001/
    file
    因未对外开放任何访问接口,所以出现404就是对的啦,只要项目没有启动出错就说明配置这块没啥问题了,不放心当然可以构建个客户端访问拉取下数据。这边我提供下我这边发现的一个小技巧,启动没报错后,可去系统的临时文件查看是否有新建的以config-repo-xxxxx开头的目录,有的话说明服务端Git配置这块没有问题。

    Windows默认临时目录:C:UserswybAppDataLocalTemp

    Linux默认临时目录:/tmp
    该配置项可根据该配置项进行调整

    spring.cloud.config.server.git.basedir=指定目录
    

    我这边未配置指定目录,临时目录文件如下
    file

    ConfigClient客户端

    还是老样子,打开https://start.spring.io/,
    勾选Config Client,Spring Web,下载导入IDE即可。
    file
    部分pom信息

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-config</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    

    application.properties

    # 客户端服务应用名称
    spring.application.name=config-client
    # 客户端端口号
    server.port=9002
    
    

    bootstrap.properties

    # 应用服务名称
    spring.cloud.config.name=config-client
    # 对应git上分支名称
    spring.cloud.config.label=master
    # 对应配置文件上profiles参数项
    spring.cloud.config.profile=dev
    # 配置服务端请求地址
    spring.cloud.config.uri=http://localhost:9001/
    

    ConfigClientApplication.java

    @SpringBootApplication
    public class ConfigClientApplication {
        public static void main(String[] args) {
            SpringApplication.run(ConfigClientApplication.class, args);
        }
    }
    

    ConfigClientWebController.java
    用于访问配置项进行验证

    @RestController
    public class ConfigClientWebController {
        @Value("${app.env.name}")
        private String appEnvName;
        @RequestMapping("/getEnv")
        public String getEnv() {
            return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+",envName:"+appEnvName;
        }
    }
    

    至此客户端相关代码配置都已OK,让我们一起Run起来吧。
    通过浏览器访问下服务,http://localhost:9002/getEnv

    file

    成功获取到Git远程仓库中的配置项信息。远程仓库目录如下图
    file

    注意事项

    到此为止,已基本完成配置中心服务端和客户端的构建及配置,接下来说下本人在构建搭建过程中遇到的问题。

    问题1:spring.cloud.config.server.git.search-paths配置问题
    刚开始我这边该配置参数如下

    spring.cloud.config.server.git.search-paths=/springCloudAProject/**
    

    Config Server端启动正常,Config Client端启动报如下错误

    java.lang.IllegalArgumentException: Could not resolve placeholder
    

    后来自己折腾来折腾去,渐渐发现了问题所在,原来这个/**
    存在一定的对应关系,不能乱用,调整目录结构后正常访问了
    file

    file

    问题2
    公司项目Git采用阿里云Code进行管理,服务端配置后老是提示没有权限访问
    排查了下项目权限也是master,账号和密码都是对的,怎么会没有权限访问呢。折腾了许久都没有进展,后来查看Spring Cloud Config 配置项得知还可以配置SSH访问,那就试试吧,调整服务端配置如下

    spring.cloud.config.server.git.uri = git@code.aliyun.com:XXX/XProjectConfig.git
    spring.cloud.config.server.git.ignore-local-ssh-settings=true
    spring.cloud.config.server.git.private-key=XXX
    

    在这里也遇到了另外一个问题,网上该配置都是基于yml配置的,心想应该都兼容的吧,将私钥复制过来,发现不对貌似都不能正常识别该配置,后通过百度得知如下
    私钥开头和结尾前一行需要 ,中间行需要 连接;要保证秘钥内容是绿色有效值文本
    具体如下

    spring.cloud.config.server.git.private-key=-----BEGIN RSA PRIVATE KEY-----
    
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    XXXXXXXXXXXXXXXXXXXXXXXXX
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    XXXXXXXXXXXXXXXXXXXXXXX
    
    -----END RSA PRIVATE KEY-----
    

    file

    本文由博客群发一文多发等运营工具平台 OpenWrite 发布

  • 相关阅读:
    1.4(java学习笔记) 面向对象内存分析
    1.3(java学习笔记)构造方法及重载
    1.2(java学习笔记)类与对象
    1.1(java学习笔记) 面向过程与面向对象
    STM32F0库函数初始化系列:GPIO配置
    STM32F4库函数初始化系列:PWM输出
    STM32F4库函数初始化系列:DMA串口接收
    STM32F4库函数初始化系列:三重ADC——DMA
    STM32F1库函数初始化系列:DMA—ADC采集
    STM32F4库函数初始化系列:串口DMA接收
  • 原文地址:https://www.cnblogs.com/chinaWu/p/12547992.html
Copyright © 2020-2023  润新知