【问题标题】:How to correctly using Spring profile on windows如何在 Windows 上正确使用 Spring 配置文件
【发布时间】:2023-04-06 08:59:01
【问题描述】:

我正在尝试为开发和生产维护不同的 Spring 配置文件,为此我在我的桌面上使用我的 Spring Boot 项目、application-dev.properties 和 application-prod.properties 创建了一个文件夹(Web 框架)。

但是,我无法将配置文件导入到我的项目中。我用来将它导入我的项目的代码如下。

@Configuration
@Profile("dev")
@PropertySource("file:///${user.home}/web skeleton/application-dev.properties")
public class DevelopmentConfig {
@Bean
public  EmailService emailService(){
    return new MockEmailService();
}

谁能告诉我这是否是在 Spring 中使用 PropertySource 的正确方法。

【问题讨论】:

  • 准确地定义“我不能”。你在做什么,你期望发生什么,会发生什么?
  • 我正在尝试使用 JPA,并且我已经在 application-dev.properties 文件中编写了使用 H2 数据库的配置。但是,JPA 没有创建我期望它创建的表。所以我认为这是由于没有导入属性文件。
  • 这是一个相当疯狂的假设。在您的方法中添加 System.out.println()(或仅使用您的调试器)将确认或确认它正在被调用。您的 JPA 问题很可能是另一回事。
  • 好的,我会尝试通过将它打印到我的控制台来调试它。您能否告诉我,如果按照我的方式使用文件路径定义 @PropertySorce 是否是在 Windows 机器上执行此操作的正确方法。我无法在网上找到好的解决方案。
  • 我不知道。测试一下。

标签: spring spring-boot spring-profiles


【解决方案1】:

您可以选择定义一个自定义源来存储这些属性,否则会查找默认位置 (classpath:application.properties)。所以我们现在将上述注解添加到现有的属性类中:

@Configuration
@PropertySource("classpath:configprops.properties")
@ConfigurationProperties(prefix = "dev")
public class ConfigProperties {
    // previous code
}

现在,在属性文件中定义的任何具有前缀 dev 且与属性之一同名的属性都会自动分配给该对象。

#Simple properties
dev.host=mailer@mail.com
dev.port=9000

查看this

【讨论】:

  • 这是正确的。但是,如果他必须将配置文件从 dev 更改为 prod 或 cert,他必须一次又一次地重新编译代码。这是不可取的。
  • 在 Maven 构建中使用外部配置文件:在 pom.xml 中像这样配置 maven surefire 插件: org.apache.maven.pluginsmaven-surefire-plugin-Dspring.config.location=file:${home}/conf/dev-external.properties 在运行 JUnit 测试时IntelliJ:运行→编辑配置默认值→JUnit添加VM选项-> -ea -Dspring.config.location=file:${home}/conf/dev-external.properties
  • 或者只使用 ${home} 等环境变量并使用相同的名称命名属性。例如 application.proeprties
  • 大家好。我的配置文件在我机器上的不同目录中,而不是在项目文件夹中(即不是类路径)。我希望 spring 获取该文件并为我初始化 JPA 属性。我把它放在一个单独的目录中,因为它有一些我不想包含在项目文件夹中的关键信息。因此我使用“@PropertySource("file:///${user.home}/web skeleton/application-dev.properties")”。
  • 我仍然不明白为什么当我使用@Profile("dev") 而不是@ConfigurationProperties(prefix="dev") 时我的代码不起作用。
【解决方案2】:

这种配置我也做过

只需在您的配置类中添加以下代码

@PropertySource("classpath:application-${spring.profiles.active}.properties")

这个属性在 application.properties

spring.profiles.active=dev

您可以根据需要将其更改为 prod 和 cert。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-30
    • 1970-01-01
    • 2012-07-17
    • 2018-03-01
    相关资源
    最近更新 更多