Spring Boot如何读取jar外的属性文件

新手上路,请多包涵

在我的目标文件夹中,有 2 个文件夹,lib 和 conf。所有的属性文件都放在 conf 文件夹中,而 jars 放在 lib folder 中。

在 Spring Boot 之前,我们在 spring.xml 中使用以下配置来使用 @value

 <context:property-placeholder location="classpath*:*.properties"/>

在java代码中,如:

 @Value("${name}")

private String name;

但是在spring boot中,我不知道如何在java代码中做同样的事情。

我试过关注,但没有用

@Configuration
@PropertySource(value = "classpath:aaa.properties")
public class AppConfig {
    @Bean
    public PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
    return new PropertySourcesPlaceholderConfigurer();
    }
}

原文由 Benjamin Liu 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 602
2 个回答

我对问题的标题和描述有点困惑。希望我的评论不会让您更加困惑。

一般来说,Spring Boot 对项目结构以及创建的二进制文件非常有意见。推荐的方式(Spring Boot 意见)是构建一个包含所有依赖项的 jar(fat jar)。如果您需要在 fat jar 之外定义的配置属性(或者如果您构建的是 war),Spring Boot 提供了许多选项(请参阅参考资料 1)。我喜欢我的应用程序使用可以使用系统属性设置的标志 (spring.config.location) 指向外部文件:

 java -jar -Dspring.config.location=<path-to-file> myBootProject.jar

请注意,您可以通过使用环境变量来定义外部文件所在的位置来执行类似的操作。

我希望这有帮助!

参考资料: 1. https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html

原文由 Alberto 发布,翻译遵循 CC BY-SA 3.0 许可协议

找到了解决方案:

首先创建一个类并添加@ConfigurationProperties

 @ConfigurationProperties(prefix = "asdf", locations = "file:conf/aaa.properties")
public class ASDF {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

请注意位置,我使用文件,而不是类路径。

然后在您的应用程序类中,添加 @EnableConfigurationProperties

 @SpringBootApplication
@EnableConfigurationProperties({ASDF.class, BBB.class})
public class InitialBeanTestApplication {

    public static void main(String[] args) {
        SpringApplication.run(InitialBeanTestApplication.class, args);
    }
}

然后你可以读取conf文件夹中的配置文件

原文由 Benjamin Liu 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题