Idea的maven复选框配置profile,解决了nacos命名空间的问题

411 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

前言

今年开始使用了StringCloudAlibaba,注册中心也由eureka切换到了nacos,以前eurekaServer放在了项目中,然后每个人都会自己启动一个eureka ,然后客户端注册到自己的localhost:1511 eureka服务,每个人有自己的注册中心从而进行环境隔离, 但是现在不是换成nacos了嘛,nacos中可以每个人新建命名空间,从而进行环境的隔离,但是又有个问题,每次需要手动修改项目中的namespace ,造成了没必要的麻烦,这篇文章我利用idea的复选框搭配maven的配置解决这一问题

创建命名空间

这里我拿张三 李四 模拟我们的开发人员 , 然后为了实现开发环境的隔离,他们每个人都新建了一个命名空间 在这里插入图片描述

修改项目pom配置

  • pom添加配置
<profiles>
    <profile>
        <id>正式环境</id>
        <properties>
            <nacos.namespace>pro</nacos.namespace>
        </properties>
        <!--默认配置-->
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>
    <profile>
        <id>dev命名空间</id>
        <properties>
            <nacos.namespace>dev</nacos.namespace>
        </properties>
    </profile>
    <profile>
        <id>张三的命名空间</id>
        <properties>
            <nacos.namespace>zhangsan</nacos.namespace>
        </properties>
    </profile>
    <profile>
        <id>李四的命名空间</id>
        <properties>
            <nacos.namespace>lisi</nacos.namespace>
        </properties>
    </profile>
</profiles>
  • build 标签中添加配置
<resources>
    <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
    </resource>
</resources>

修改yml

  • 如下代码所示,我们可以直接使用 @标签名@ 进行动态配置
spring:
  application:
    name: user-service #实例名
    description: 用户模块
  profiles:
    active: dev
  cloud:
    nacos:
      discovery:
        #集群环境隔离
        cluster-name: shanghai
        #命名空间
        namespace: @nacos.namespace@

刷新我们的pom配置

在这里插入图片描述

  • 如下图所示,idea的这个地方出现的复选框 在这里插入图片描述

  • 此时张三开发的时候勾选他自己的命名空间选项就可以注册到他自己的nacos命名空间了 在这里插入图片描述

踩坑

因为我build里边加上了 <directory>src/main/resources</directory> 所以在gateway中的https证书也被编译打包,启动项目的时候报错 cloud not load key store '127.0.0.1.pfx'

解决办法

  • build 中添加
<plugins>
    <plugin>
         <artifactId>maven-resources-plugin</artifactId>
         <configuration>
             <encoding>utf-8</encoding>
             <nonFilteredFileExtensions>
                 <nonFilteredFileExtension>pfx</nonFilteredFileExtension>
             </nonFilteredFileExtensions>
         </configuration>
     </plugin>
 </plugins>

需要注意<nonFilteredFileExtension><exclude>的使用区别

  • <exclude>指定的文件不会编译也不会打入war包。
  • <nonFilteredFileExtension>指定的文件不会编译,但会打入war包。