SpringCloud Alibaba微服务实战六 - 配置隔离

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: SpringCloud Alibaba微服务实战六 - 配置隔离

导读:本篇作为SpringCloud Alibaba微服务实战系列的第六篇,主要内容是将所有的微服务接入Nacos配置中心并按环境进行隔离。系列文章,欢迎持续关注。


配置中心集成


在SpringCloud Alibaba体系中是使用Nacos作为配置中心,这样Nacos既可以作为注册中心也可以作为配置中心,相当于SpringCloud中的Eureka + Config。要接入Nacos的配置中心也很简单,只需要如下几步:

  • 引入配置中心组件spring-cloud-starter-alibaba-nacos-config
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
  • 在resource中新建文件bootstrap.yml,配置应用名称和注册中心地址
spring:
  application:
    name:account-service
  cloud:
    nacos:
      config:
        server-addr:10.0.10.48:8848
        file-extension:yml

这里指定文件后缀为yml

  • 在nacos控制台建立配置文件

注:在客户端和server端对文件格式的声明要一致,例如在客户端声明的是yml,则server端添加配置文应该是${spring.application.name}.yml,若写成${spring.application.name}.yaml,则会找不到配置文件。如在我们的account-service中应该建立一个account-service.yml文件,然后把原application.yml的内容复制到里面即可,在nacos配置中可以删除spring.application.name配置。

  • 运行测试 测试服务功能是否正常

简单几步就可以将你的微服务集成Nacos的配置中心了,但是在实际开发中我们需要准备多个环境的配置文件(开发、测试、生产),接下来我们看看如何使用Nacos进行多环境配置管理。


多环境管理


在Nacos中实现多环境管理很容易,可以通过Profiles, Group, Namespace三个维度实现。

profiles

nacos配置中心的DATA ID就相当于一个配置文件的名称,前面一部分我们DATA ID的默认命名方式为${spring.application.name}.${ spring.cloud.nacos.config.file-extension},比如我们之前的配置文件为account-service.yml

如果我们在服务启动的时候指定了服务的环境名称spring.profiles.active,那么DATA ID的命名方式就变成了${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}。比如上面的account-service我们在bootstrap.yml中设置了spring.profiles.active=DEV,那么服务启动时就会去nacos抓取account-service-DEV.yml这个配置文件的数据。

利用Nacos命名方式的特性我们可以实现多环境配置管理。


实战

  • 给系统指定环境名称
spring:
  profiles:
    active:DEV
  • Nacos中建立多套环境的配置
  • 启动应用,观察后端启动日志
2019-12-13 13:39:21,352 INFO  NacosPropertySourceBuilder:87 - Loading nacos data, dataId: 'account-service-DEV.yml', group: 'DEFAULT_GROUP'
2019-12-13 13:39:21,363 INFO  PropertySourceBootstrapConfiguration:101 - Located property source: CompositePropertySource {name='NACOS', propertySources=[NacosPropertySource {name='account-service-DEV.yml'}, NacosPropertySource {name='account-service.yml'}]}
2019-12-13 13:39:21,376 INFO  AccountServiceApplication:652 - The following profiles are active: DEV


Group

Group是DATA ID集合的概念,将同一个环境下的配置文件组成一个Group,在服务启动时通过指定spring.cloud.nacos.config.group属性可以让系统加载不同Group的配置文件。

实战

  • 在nacos中建立多个配置文件,以Group进行区分如上所示,我们建立了一个DEV_GROUP 和TEST_GROUP。
  • 修改配置文件,指定spring.cloud.nacos.config.group的值
spring:
  cloud:
    nacos:
      config:
        server-addr:10.0.10.48:8848
        file-extension:yml
        group:DEV_GROUP

这个时候不需要再给服务指定spring.profiles.active属性

  • 启动应用,观察后端启动日志
2019-12-13 14:19:19,861 INFO  NacosPropertySourceBuilder:87 - Loading nacos data, dataId: 'account-service.yml', group: 'DEV_GROUP'
2019-12-13 14:19:19,869 INFO  PropertySourceBootstrapConfiguration:101 - Located property source: CompositePropertySource {name='NACOS', propertySources=[NacosPropertySource {name='account-service.yml'}]}
2019-12-13 14:19:19,882 INFO  AccountServiceApplication:648 - No active profile set, falling back to default profiles: default


Namespace

Namespace 是 nacos 做多环境以及多租户数据(配置和服务)隔离的,目前也是官方推荐的多环境支持方案。如果你的微服务有多套不同的环境(DEV,TEST),那么这个时候可以根据指定的环境来创建不同的 namespce,以此来实现多环境的隔离。不同的命名空间下可以有相同的GroupData ID

实战

  • Nacos中根据项目环境建立多套Namespace建好Namespace后会生产一串命名空间ID,在应用里通指定spring.cloud.nacos.config.namespace属性对应不同的Namespace
  • 在不同的命名空间下分别建立配置文件account-service.yml
  • 修改配置文件,指定spring.cloud.nacos.config.namespace属性
spring:
  cloud:
    nacos:
      config:
        server-addr:10.0.10.48:8848
        file-extension:yml
        namespace:7e8ccc22-6f51-42fa-bcf1-db45f99dbf57
  • 启动应用,观察后端启动日志这个版本没有关于Namespace的启动日志,不过你可以修改你的配置确认是否正常加载,反正我这里是正常的O(∩_∩)O哈哈~

Namespace作为官方推荐的环境隔离配置,我们将所有的微服务全部按照此方式进行改造,改造完的效果如下:

改造完成后要对服务进行测试,保证服务能正常运行。

至此我们已经把我们微服务的配置全部放入了配置中心,并且使用Namespace对环境进行了隔离。那么本期的“SpringCloud Alibaba微服务实战六 - 配置隔离”篇也就该结束啦,咱们下期有缘再见!

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
3天前
|
NoSQL MongoDB 微服务
微服务——MongoDB实战演练——文章评论的基本增删改查
本节介绍了文章评论的基本增删改查功能实现。首先,在`cn.itcast.article.dao`包下创建数据访问接口`CommentRepository`,继承`MongoRepository`以支持MongoDB操作。接着,在`cn.itcast.article.service`包下创建业务逻辑类`CommentService`,通过注入`CommentRepository`实现保存、更新、删除及查询评论的功能。最后,新建Junit测试类`CommentServiceTest`,对保存和查询功能进行测试,并展示测试结果截图,验证功能的正确性。
15 2
|
3天前
|
缓存 Java API
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的配置
本文介绍了在Spring Boot中配置Swagger2的方法。通过创建一个配置类,添加`@Configuration`和`@EnableSwagger2`注解,使用Docket对象定义API文档的详细信息,包括标题、描述、版本和包路径等。配置完成后,访问`localhost:8080/swagger-ui.html`即可查看接口文档。文中还提示了可能因浏览器缓存导致的问题及解决方法。
20 0
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的配置
|
3天前
|
Java 关系型数据库 数据库
微服务——SpringBoot使用归纳——Spring Boot事务配置管理——Spring Boot 事务配置
本文介绍了 Spring Boot 中的事务配置与使用方法。首先需要导入 MySQL 依赖,Spring Boot 会自动注入 `DataSourceTransactionManager`,无需额外配置即可通过 `@Transactional` 注解实现事务管理。接着通过创建一个用户插入功能的示例,展示了如何在 Service 层手动抛出异常以测试事务回滚机制。测试结果表明,数据库中未新增记录,证明事务已成功回滚。此过程简单高效,适合日常开发需求。
13 0
|
3天前
|
Java 测试技术 微服务
微服务——SpringBoot使用归纳——Spring Boot中的项目属性配置——少量配置信息的情形
本课主要讲解Spring Boot项目中的属性配置方法。在实际开发中,测试与生产环境的配置往往不同,因此不应将配置信息硬编码在代码中,而应使用配置文件管理,如`application.yml`。例如,在微服务架构下,可通过配置文件设置调用其他服务的地址(如订单服务端口8002),并利用`@Value`注解在代码中读取这些配置值。这种方式使项目更灵活,便于后续修改和维护。
11 0
|
3天前
|
SQL Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录—— application.yml 中对日志的配置
在 Spring Boot 项目中,`application.yml` 文件用于配置日志。通过 `logging.config` 指定日志配置文件(如 `logback.xml`),实现日志详细设置。`logging.level` 可定义包的日志输出级别,例如将 `com.itcodai.course03.dao` 包设为 `trace` 级别,便于开发时查看 SQL 操作。日志级别从高到低为 ERROR、WARN、INFO、DEBUG,生产环境建议调整为较高级别以减少日志量。本课程采用 yml 格式,因其层次清晰,但需注意格式要求。
13 0
|
3天前
|
Java 数据库连接 微服务
微服务——MyBatis配置——事务管理
本段内容主要介绍了事务管理的两种类型:JDBC 和 MANAGED。JDBC 类型直接利用数据源连接管理事务,依赖提交和回滚机制;而 MANAGED 类型则由容器全程管理事务生命周期,例如 JEE 应用服务器上下文,默认会关闭连接,但可根据需要设置 `closeConnection` 属性为 false 阻止关闭行为。此外,提到在使用 Spring + MyBatis 时,无需额外配置事务管理器,因为 Spring 模块自带的功能可覆盖上述配置,且这两种事务管理器类型均无需设置属性。
13 0
|
3天前
|
Java 数据库连接 数据库
微服务——MyBatis配置——多环境配置
在 MyBatis 中,多环境配置允许为不同数据库创建多个 SqlSessionFactory。通过传递环境参数给 SqlSessionFactoryBuilder,可指定使用哪种环境;若忽略,则加载默认环境。`environments` 元素定义环境配置,包括默认环境 ID、事务管理器和数据源类型等。每个环境需唯一标识,确保默认环境匹配其中之一。代码示例展示了如何构建工厂及配置 XML 结构。
13 0
|
3天前
|
缓存 Java 数据库连接
微服务——MyBatis配置——常见配置
本文介绍了 MyBatis 的常见配置及其加载顺序。属性配置优先级为:方法参数传递的属性 &gt; resource/url 属性中配置 &gt; properties 元素中指定属性。同时列举了多个关键配置项,如 `cacheEnabled`(全局缓存开关)、`lazyLoadingEnabled`(延迟加载)、`useGeneratedKeys`(使用 JDBC 自动生成主键)等,并详细说明其作用、有效值及默认值。这些配置帮助开发者优化 MyBatis 的性能与行为。
13 0
|
3天前
|
NoSQL 测试技术 MongoDB
微服务——MongoDB实战演练——MongoTemplate实现评论点赞
本节介绍如何使用MongoTemplate实现评论点赞功能。传统方法通过查询整个文档并更新所有字段,效率较低。为优化性能,采用MongoTemplate对特定字段直接操作。代码中展示了如何利用`Query`和`Update`对象构建更新逻辑,通过`update.inc(&quot;likenum&quot;)`实现点赞数递增。测试用例验证了功能的正确性,确保点赞数成功加1。
11 0
|
3天前
|
NoSQL 测试技术 MongoDB
微服务——MongoDB实战演练——根据上级ID查询文章评论的分页列表
本节介绍如何根据上级ID查询文章评论的分页列表,主要包括以下内容:(1)在CommentRepository中新增`findByParentid`方法,用于按父ID查询子评论分页列表;(2)在CommentService中新增`findCommentListPageByParentid`方法,封装分页逻辑;(3)提供JUnit测试用例,验证功能正确性;(4)使用Compass插入测试数据并执行测试,展示查询结果。通过这些步骤,实现对评论的高效分页查询。
14 0