## 一、不同环境的配置文件隔离
1. Nacos地址和命名空间
* 直接通过运行参数设置:例如开发环境的nacos地址为127.0.0.1:8848,而生产环境的nacos地址为10.80.98.110,部署生产环境时只需要在项目的启动参数添加以下内容
~~~
//以下参数是本项目个性化的,能同时影响配置中心和注册中心的地址
-Dpigframe.nacos.server-addr=10.80.98.110:8848 -Dpigframe.nacos.namespace=701cead9-85b6-4818-b411-130eef6d4336
~~~
2. 业务配置项
总共有3种方法实现(选择一种即可)
2.1. 通过spring.profiles.active
~~~
//通过运行参数设置
-Dspring.profiles.active=dev
~~~
2.2. 通过Nacos 的 Group
~~~
//通过运行参数设置
-Dspring.cloud.nacos.config.group=DEVELOP_GROUP
~~~
2.3. 通过Nacos 的 Namespace
~~~
//通过运行参数设置,值是namespace对应的id,id值可以在Nacos的控制台获取
-Dspring.cloud.nacos.config.namespace=701cead9-85b6-4818-b411-130eef6d4336
~~~
## 二、多环境总结
**第一种**:通过`DataID`与`profile`实现。
* 优点:这种方式与Spring Cloud Config的实现非常像,用过Spring Cloud Config的用户,可以毫无违和感的过渡过来,由于命名规则类似,所以要从Spring Cloud Config中做迁移也非常简单。
* 缺点:这种方式在项目与环境多的时候,配置内容就会显得非常混乱。配置列表中会看到各种不同应用,不同环境的配置交织在一起,非常不利于管理。
* 建议:项目不多时使用,或者可以结合 `Group`对项目根据业务或者组织架构做一些拆分规划。
**第二种**:通过`Group`实现。
* 优点:通过 `Group`按环境讲各个应用的配置隔离开。可以非常方便的利用 `DataID`和 `Group`的搜索功能,分别从应用纬度和环境纬度来查看配置。
* 缺点:由于会占用 `Group`纬度,所以需要对 `Group`的使用做好规划,毕竟与业务上的一些配置分组起冲突等问题。
* 建议:这种方式虽然结构上比上一种更好一些,但是依然可能会有一些混乱,主要是在 `Group`的管理上要做好规划和控制。
**第三种**:通过`Namespace`实现。
* 优点:官方建议的方式,通过 `Namespace`来区分不同的环境,释放了 `Group`的自由度,这样可以让 `Group`的使用专注于做业务层面的分组管理。同时,Nacos控制页面上对于 `Namespace`也做了分组展示,不需要搜索,就可以隔离开不同的环境配置,非常易用。
* 缺点:没有啥缺点,可能就是多引入一个概念,需要用户去理解吧。
* 建议:直接用这种方式长远上来说会比较省心。虽然可能对小团队而言,项目不多,第一第二方式也够了,但是万一后面做大了呢?
>[warning] 多环境注意:不论用哪一种方式实现。对于指定环境的配置(`spring.profiles.active=DEV`、`spring.cloud.nacos.config.group=DEV_GROUP`、`spring.cloud.nacos.config.namespace=701cead9-85b6-4818-b411-130eef6d4336`),都不要配置在应用的`bootstrap.properties`中。而是在发布脚本的启动命令中,用`-Dspring.profiles.active=DEV`的方式来动态指定,会更加灵活!。
>[danger] Nacos使用注意
>
> * Nacos本身的相关配置必须都放在`bootstrap.yml`文件中
> * 如果在Nacos添加了应用的配置文件
> 1.**应用读取配置后只会覆盖本地相同key的配置**
> 2.**应用读取配置后会缓存起来,就算停掉Nacos也会生效**
- 微服务介绍
- 软件架构设计
- 系统简介
- 运行环境
- 模块介绍
- 启动部署命令参数
- 打包说明
- 开发说明
- Java8
- 认证理论
- 有网络隔离
- 无网络隔离
- token自动续签设计
- url级权限控制
- 单点登录
- 登录
- 用户名密码(+验证码)登录
- 通过openId获取token
- 通过手机号获取token
- 第三方系统接口对接
- 第三方系统单点登录
- 通用刷新token
- 账号登出接口
- 统一异常处理
- 日志埋点工具
- 审计日志
- yml自定义配置自动提示
- Redis使用
- CacheManager集成
- 搜索中心
- 网关zuul动态路由
- swagger
- 解决开发环境的服务冲突和实例乱窜
- 多租户理论
- 多租户实现
- 分布式锁
- 分布式id生成器
- 分布式事务
- 分库分表sharding-sphere
- 消息队列
- 系统幂等性
- X 实时搜索系统设计
- Spring Cloud性能调优
- 链路跟踪
- JWT的RSA非对称密钥生成
- jdk
- Oracle
- OpenJDK
- Dragonwell
- JVM介绍
- 常见JVM内存错误及解决方案
- JVM分析工具详解
- nexus
- docker
- 安装
- docker-compose安装
- 私有仓库搭建
- 指定数据储存目录
- 添加私有仓库
- 提交拉取镜像
- X 免Dockerfile文件构建项目镜像
- 持续集成部署CI/CD
- Confluence知识管理
- JIRA事务与项目跟踪软件
- Gitlab代码仓库
- Jenkins自动化部署
- SonarQube代码检测
- Rancher容器管理平台
- nacos
- 部署
- Rancher部署nacos
- 注册中心
- 配置中心
- 多环境
- 生产部署方案
- X 通过Nginx来实现环境隔离
- Sentinel详解
- 动态规则扩展
- 在生产环境中使用 Sentinel
- 启动配置项
- X 网关流控
- ELK日志系统和慢查询SQL
- docker安装
- 普通安装
- Filebeat安装部署
- ES数据定期删除
- 没数据问题排查思路
- X Logstash的grok语法调试
- 慢查询sql
- 审计日志
- Elasticsearch性能优化
- APM监控
- SkyWalking介绍
- Zipkin,Pinpoint,SkyWalking三种服务链路监控组件分析
- 服务端部署
- 客户端部署
- 日志清理
- Metrics监控
- 二进制包部署
- docker部署
- docker安装各组件监控
- Grafana仪表盘和告警配置
- JMeter压力测试工具
- 使用说明
- 分布式事务
- TX-LCN(同步)
- X SEATA(同步)
- X RocketMQ(异步)
- 消息队列
- RocketMQ
- RocketMQ安装部署
- RocketMQ常见异常处理
- SpringCloud-Stream
- RabbitMQ
- Redis
- 单机安装
- 主从复制
- 主从复制+哨兵
- cluster集群
- 持久化方案
- MySQL
- 单机安装
- 主从复制
- 主从切换
- 主主复制
- 高可用
- 分表分库
- Canal数据库日志解析消费
- Canal安装
- 实时同步数据到ElasticSearch
- FastDFS
- docker安装
- centos安装
- 项目管理系统
- 禅道
- 111