Spring中的Maven配置文件和应用程序yml文件

Dex*_*ter 5 java spring yaml spring-mvc maven

我有一个使用以下命令构建的Spring项目

mvn clean install -Pdevelopment
Run Code Online (Sandbox Code Playgroud)

通过基于Maven配置文件选择适当的属性文件可以完美地工作

现在,我们当前的应用程序已更新为同时具有application.yml文件和属性文件

Yml文件提供了基于弹簧轮廓创建属性的能力

#DEV
spring:
    profiles: profile1
environment:
    property1: AAA
    property2: BBB
---
#PROD
spring:
    profiles: profile2
environment:
    property1: CCC
    property2: DDD
---
Run Code Online (Sandbox Code Playgroud)

这与使用 -Dspring.profiles.active=profile1

有没有办法读取Maven配置文件(而不是弹簧配置文件)并相应地设置属性?

Mar*_*sen 5

由于您不再想使用弹簧配置文件,因此您只需要application.yml. 从你的例子来看,它可能看起来像这样:

environment:
  property1: @property1@
  property2: @property2@
Run Code Online (Sandbox Code Playgroud)

然后在您的pom.xmlsettings.xml

<profiles>
    <profile>
        <id>dev</id>
        <properties>
            <property1>AAA</property1>
            <property2>BBB</property2>
        </properties>
    </profile>
    <profile>
        <id>prod</id>
        <properties>
            <property1>CCC</property1>
            <property2>DDD</property2>
        </properties>
    </profile>
</profiles>
Run Code Online (Sandbox Code Playgroud)

在我的应用程序类中使用如下:

@Value("${environment.property1}")
private String profileProperty;

@Value("${environment.property2}")
private String settingsProperty;
Run Code Online (Sandbox Code Playgroud)

  • 当我尝试这样做时,我收到一个异常 --- 扫描下一个标记发现字符 @ '@' 时线程“main”中出现异常,该字符无法启动任何标记。(不要使用 @ 进行缩进)在 'reader',第 2 行,第 13 列:主机:@host-ip@ ^ at org.yaml.snakeyaml.scanner.ScannerImpl.fetchMoreTokens(ScannerImpl.java:420) at org.yaml .snakeyaml.scanner.ScannerImpl.checkToken(ScannerImpl.java:226) 在 org.yaml.snakeyaml.parser.ParserImpl$ParseBlockMappingValue.product(ParserImpl.java:586) (3认同)