我正在尝试构建一个war文件,该文件知道要查找spring boot application.properties的特定路径。例如,在linux环境中运行时,
我希望我的maven构建一些如何构建该应用程序,以便它知道查看以下位置:
/etc/projects/application.properties
要清楚,我想避免设置系统或命令行属性。我想将文件的位置连接到弹簧,并让应用程序服务器和操作系统不知道spring是如何做到的。这可能吗?
答案 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 {
}
它不容易构建时间可配置,所以如果属性文件移动我必须更改代码。但就我而言,这不太可能,所以这是一个可以接受的解决方案。