如何在打包为war的Spring Boot应用程序中加载其他属性文件?

时间:2019-04-07 14:51:15

标签: spring spring-boot tomcat war

我有一个标准的springboot网络应用程序。我想加载不在类路径中的属性文件。 application.properties在类路径中,并且正在正确读取。

我在建造一个罐子时没有问题。我只是将.properties放在jar旁边,它可以工作。但是,当我打包战争时,我无法使应用程序读取属性文件。

3 个答案:

答案 0 :(得分:0)

您将属性文件与application.properties文件平行并将其加载到这样的类中:

@PropertySource("classpath:foo.properties")
public class My class {

@Value( "${some.property}" )
String myProp;

}

答案 1 :(得分:0)

您可以使用ClassPathResource。给定用于加载资源的类。

这是给您的示例代码

ClassPathResource resource = new ClassPathResource("/application/context/blabla.yml");
InputStream inputStream = resource.getInputStream();
File file = resource.getFile();

// using inputStream or file

ClassPathResource

答案 2 :(得分:0)

您可以使用spring application.properties来具有spring配置文件,并使用spring profile根据需要为每个环境定义单独的属性。您甚至可以将spring profile分离到不同的文件中,例如appication-dev.properties等等,以便您可以将每个spring配置文件保存在不同的文件中。

您可以使用@Configuration批注来读取属性:

@Configuration
@EnableConfigurationProperties(TestProperties.class)
public class MySampleConfiguration {
} 

此处TestProperties.class用于映射属性文件或yaml中的值。 详细参考:https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html