说一说 Maven 使用 profile 实现多套环境变量

简介: 我是小假 期待与你的下一次相遇 ~

多环境变量配置

在SpringCloud多模块微服务项目中,在父pom配置profile实现多套环境,同时也要重写build标签,定位要过滤替换环境变量值的配置文件

  1. <profiles>
  2.  <profile>
  3.    <id>dev</id>
  4.    <properties>
  5.      <!--                环境标识,需要与配置文件的名称相对应-->
  6.      <profiles.active>dev</profiles.active>
  7.    </properties>
  8.    <activation>
  9.      <!--                默认环境-->
  10.      <activeByDefault>true</activeByDefault>
  11.    </activation>
  12.  </profile>
  13.  <profile>
  14.    <id>uat</id>
  15.    <properties>
  16.      <!--                环境标识,需要与配置文件的名称相对应-->
  17.      <profiles.active>uat</profiles.active>
  18.    </properties>
  19.  </profile>
  20.  <profile>
  21.    <id>prod</id>
  22.    <properties>
  23.      <!--                环境标识,需要与配置文件的名称相对应-->
  24.      <profiles.active>prod</profiles.active>
  25.    </properties>
  26.  </profile>
  27. </profiles>

配置好该项后可以在IDEA中的Maven中看到对应的环境变量值,选中激活当前的环境变量即可

在配置文件引用Maven环境变量值

  1. spring:
  2.  application:
  3.    name: eureka-server
  4.  profiles:
  5.    active: @profiles.active@
  6. logging:
  7.  level:
  8.    root: info

配置Maven编译时需要替换环境变量值的过滤的文件类型

  1. <build>
  2.  <finalName>${project.name}-${project.version}</finalName>
  3.  <resources>
  4.    <resource>
  5.      <directory>${basedir}/src/main/resources</directory>
  6.      <filtering>true</filtering>
  7.      <includes>
  8.        <include>**/*.xml</include>
  9.        <include>**/*.yml</include>
  10.        <include>**/*.yaml</include>
  11.        <include>**/*.properties</include>
  12.      </includes>
  13.    </resource>
  14.  </resources>
  15. </build>

注意事项

在自定义build标签后,Maven编译时会根据自定义的过滤文件类型,如果不配置忽略过滤的文件,则可能会发生意想不到的后果。

  1. <build>
  2.  <finalName>${project.name}-${project.version}</finalName>
  3.  <resources>
  4.    <resource>
  5.      <directory>src/main/resources</directory>
  6.      <filtering>true</filtering>
  7.      <includes>
  8.        <include>**/*.yml</include>
  9.      </includes>
  10.    </resource>
  11.    <resource>
  12.      <directory>src/main/resources</directory>
  13.      <filtering>false</filtering>
  14.      <includes>
  15.        <include>**/*.xml</include>
  16.        <include>**/*.ttf</include>
  17.        <include>**/*.jpg</include>
  18.        <include>**/*.png</include>
  19.        <include>**/*.ftl</include>
  20.      </includes>
  21.    </resource>
  22.  </resources>
  23.  <plugins>
  24.    <plugin>
  25.      <groupId>org.springframework.boot</groupId>
  26.      <artifactId>spring-boot-maven-plugin</artifactId>
  27.    </plugin>
  28.  </plugins>
  29. </build>

如:

不配置过滤字体文件,编译后的字体文件不能正常使用

双击编译后的字体

在使用itext的项目中具体报错为:

复制代码

  1. com.itextpdf.text.DocumentException: Table 'name' does not exist in image/font/simhei.ttf
  2.        at com.itextpdf.text.pdf.TrueTypeFont.getBaseFont(TrueTypeFont.java:517)
  3.        at com.itextpdf.text.pdf.TrueTypeFont.process(TrueTypeFont.java:675)
  4.        at com.itextpdf.text.pdf.TrueTypeFontUnicode.process(TrueTypeFontUnicode.java:122)
  5.        at com.itextpdf.text.pdf.TrueTypeFontUnicode.<init>(TrueTypeFontUnicode.java:99)
  6.        at com.itextpdf.text.pdf.BaseFont.createFont(BaseFont.java:706)
  7.        at com.itextpdf.text.pdf.BaseFont.createFont(BaseFont.java:626)
  8.        at com.itextpdf.text.pdf.BaseFont.createFont(BaseFont.java:461)
  9.        at com.cntaiping.ft.bankinsurance.image.util.LexPDF.insentFont(LexPDF.java:291)
  10.        at com.cntaiping.ft.bankinsurance.image.util.LexPDF.getPDFBytes(LexPDF.java:52)
  11.        at com.cntaiping.ft.bankinsurance.image.service.impl.ImageBuildServiceImpl.build(ImageBuildServiceImpl.java:75)
  12.        at com.cntaiping.ft.bankinsurance.image.service.impl.ImageBuildServiceImpl.build(ImageBuildServiceImpl.java:91)
  13.        at com.cntaiping.ft.bankinsurance.image.service.impl.ImageServiceImpl.create(ImageServiceImpl.java:88)
  14.        at com.cntaiping.ft.bankinsurance.image.service.impl.ImageServiceImpl$$FastClassBySpringCGLIB$$7c164064.invoke(<generated>)
  15.        at org.springwork.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
  16.        at org.springwork.aop.work.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:687)
  17.        at com.cntaiping.ft.bankinsurance.image.service.impl.ImageServiceImpl$$EnhancerBySpringCGLIB$$260adbfe.create(<generated>)
  18.        at com.cntaiping.ft.bankinsurance.image.listener.ImageCreateStreamListener.onMessage(ImageCreateStreamListener.java:45)
  19.        at com.cntaiping.ft.bankinsurance.image.listener.ImageCreateStreamListener.onMessage(ImageCreateStreamListener.java:20)
  20.        at org.springwork.data.redis.stream.StreamPollTask.doLoop(StreamPollTask.java:142)
  21.        at org.springwork.data.redis.stream.StreamPollTask.run(StreamPollTask.java:123)
  22.        at java.lang.Thread.run(Thread.java:748)
相关文章
|
Java 关系型数据库 数据库
微服务——SpringBoot使用归纳——Spring Boot事务配置管理——Spring Boot 事务配置
本文介绍了 Spring Boot 中的事务配置与使用方法。首先需要导入 MySQL 依赖,Spring Boot 会自动注入 `DataSourceTransactionManager`,无需额外配置即可通过 `@Transactional` 注解实现事务管理。接着通过创建一个用户插入功能的示例,展示了如何在 Service 层手动抛出异常以测试事务回滚机制。测试结果表明,数据库中未新增记录,证明事务已成功回滚。此过程简单高效,适合日常开发需求。
1907 0
|
9月前
|
移动开发 小程序 前端开发
小程序开发平台有哪些?哪个好
小程序的开发方式丰富多元,开发团队可根据自身的技术背景、项目具体需求以及资源状况,灵活挑选最为适宜的开发路径。以下将详细介绍几种主流的小程序开发方式。
705 1
|
Java 数据库 开发者
详细介绍SpringBoot启动流程及配置类解析原理
通过对 Spring Boot 启动流程及配置类解析原理的深入分析,我们可以看到 Spring Boot 在启动时的灵活性和可扩展性。理解这些机制不仅有助于开发者更好地使用 Spring Boot 进行应用开发,还能够在面对问题时,迅速定位和解决问题。希望本文能为您在 Spring Boot 开发过程中提供有效的指导和帮助。
2466 12
|
关系型数据库 MySQL Apache
实时计算 Flink版操作报错之mysql整库同步到doris连接器报错,如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
Web App开发 JavaScript 前端开发
代码规范
代码规范
1536 0
|
安全 前端开发 Java
Spring Security 6.x 过滤器链SecurityFilterChain是如何工作的
上一篇主要介绍了Spring Secuirty中的过滤器链SecurityFilterChain是如何配置的,那么在配置完成之后,SecurityFilterChain是如何在应用程序中调用各个Filter,从而起到安全防护的作用,本文主要围绕SecurityFilterChain的工作原理做详细的介绍。
1791 0
Spring Security 6.x 过滤器链SecurityFilterChain是如何工作的
|
Java
SpringBoot之@Conditional衍生条件装配详解
SpringBoot之@Conditional衍生条件装配详解
458 0
|
存储 IDE Java
Java“NoClassDefFoundError”解决
Java中的“NoClassDefFoundError”错误通常发生在尝试访问某个类时,该类在编译时可用但在运行时找不到。解决方法包括:确保所有依赖库已正确添加到类路径中,检查类名和包名是否正确,以及清理并重新构建项目。
4623 3
|
Java Spring 容器
SpringBoot读取配置文件的6种方式,包括:通过Environment、@PropertySource、@ConfigurationProperties、@Value读取配置信息
SpringBoot读取配置文件的6种方式,包括:通过Environment、@PropertySource、@ConfigurationProperties、@Value读取配置信息
3511 3
QLExpress的基本语法
1、操作符和java对象操作 普通java语法 //支持 +,-,*,/,<,>,<=,>=,==,!=,<>【等同于!=】,%,mod【取模等同于%】,++,--,&&,|| //in【类似sql】,like【类似sql】,&&,||,!,等操作符 //and、or 和java里面的&& || .
28690 0

热门文章

最新文章