Spring Boot - 在war文件中设置application.properties的位置

时间:2015-08-24 18:24:05

标签: spring spring-boot

我正在尝试构建一个war文件,该文件知道要查找spring boot application.properties的特定路径。例如,在linux环境中运行时,

我希望我的maven构建一些如何构建该应用程序,以便它知道查看以下位置:

/etc/projects/application.properties

要清楚,我想避免设置系统或命令行属性。我想将文件的位置连接到弹簧,并让应用程序服务器和操作系统不知道spring是如何做到的。这可能吗?

3 个答案:

答案 0 :(得分:5)

您可以将-Dspring.config.location=/etc/projects/application.properties作为JAVA_OPTS的一部分传递给Tomcat。

答案 1 :(得分:1)

//编辑:

我确信上面会有效,但是......:)

根据文档(here),您可以在war / jar文件旁边创建config目录,并在那里创建application.properties文件。它将被加载。 我通过克隆this repo来测试。在HelloController项目中修改initial课程:

@RestController
public class HelloController {

@Value("${test.property}")
private String testProperty;

@RequestMapping("/")
public String index() {
    return "Greetings from Spring Boot! Test property value="+testProperty;
}
}

使用maven构建jar:

mvn clean package

创建config目录,在那里添加我们的属性,运行app:

cd target
mkdir config
echo "test.property=Value from external config" >> config/application.properties 
java -jar gs-spring-boot-0.1.0.jar

转到localhost:8080 - 来自外部属性文件的值应该在那里:)

当然,如果您真的必须将文件存储在/etc/projects/,那么您可以在config目录中创建符号链接。

答案 2 :(得分:0)

以下是我解决案件的方法。

@SpringBootApplication(exclude = SpringDataWebAutoConfiguration.class)
@PropertySources({
        @PropertySource(value = "classpath:application.properties"),
        @PropertySource(value = "file:/etc/projects/application.properties", ignoreResourceNotFound = true)
})
@EnableAutoConfiguration(exclude = FlywayAutoConfiguration.class)
@EnableAspectJAutoProxy(proxyTargetClass=true)
public class App extends SpringBootServletInitializer {

}

它不容易构建时间可配置,所以如果属性文件移动我必须更改代码。但就我而言,这不太可能,所以这是一个可以接受的解决方案。