英文:
External properties file in spring
问题
我有一个使用Maven构建的Java命令行程序,涉及Spring框架但不是Spring Boot。在使用Maven的maven-assembly-plugin插件构建包含所有依赖的JAR文件时,会包含application.properties文件。我想知道如何读取外部的application.properties文件而不是JAR包内部的那个。
我目前是这样读取属性文件的:
@PropertySource(value = { "classpath:application.properties" })
如果我打印类路径(classpath),类路径只包括JAR包路径,而不包括当前目录。
英文:
I have a java,spring and not spring boot command line program with maven , which when i build a jar with all dependencies using maven-assembly-plugin , it includes application.properties, what i need to know is how to read the external application.properties and not the jar one.
I am reading the property file as:
@PropertySource(value = { "classpath:application.properties" })
If I print the classpath, the classpath does only include the jar and not the current directory.
答案1
得分: 0
这里是你可以做的:
@PropertySources({
@PropertySource("classpath:application.properties"),
@PropertySource(value = "file:/etc/config/my-custom-config.properties", ignoreResourceNotFound = true)
})
这个 ignoreResourceNotFound
自从 Spring 4.3 版本就可用,而且很容易理解。
你也可以选择 "编程式" 方法。在纯 Spring 中(不是你在问题中提到的 Spring Boot):
@Configuration
public class CommonConfig {
...
@Bean
public static PropertySourcesPlaceholderConfigurer propertyPlaceholderConfigurer() {
PropertySourcesPlaceholderConfigurer ppc = new PropertySourcesPlaceholderConfigurer();
ppc.setLocations(new FileSystemResource("/etc/config/my-custom-config.properties"),
new ClassPathResource("config/application.properties"));
return ppc;
}
...
}
FileSystemResource
用于访问外部文件系统中的资源。
ClassPathResource
用于访问类路径中的资源。
英文:
Here is what you can do:
@PropertySources({
@PropertySource("classpath:application.properties"),
@PropertySource(value = "file:/etc/config/my-custom-config.properties", ignoreResourceNotFound = true)
})
This ignoreResourceNotFound
is available since spring 4.3 and is pretty self-explanatory.
You can also opt for "programmatic" approach. In pure spring (not spring boot as you've mentioned in the question):
@Configuration
public class CommonConfig {
...
@Bean
public static PropertySourcesPlaceholderConfigurer propertyPlaceholderConfigurer() {
PropertySourcesPlaceholderConfigurer ppc = new PropertySourcesPlaceholderConfigurer();
ppc.setLocations(new FileSystemResource("/etc/config/my-custom-config.properties"),
new ClassPathResource("config/application.properties"),
return ppc;
}
...
}
FileSystemResource
is for accessing resources available externally in the file system
ClassPathResource
is for accessing resources in the classpath
答案2
得分: 0
我们使用动态生成的配置文件,其中注入了特定环境的机密信息。使一切保持一致的组合如下:
代码:
myFunction(@Value("${custom.configuration.name}") final String customConfigurationName) {
InputStream inputStream = new ClassPathResource(customconfigFileName).getInputStream();
// ...
}
模板 - 添加一个硬性要求的路径,以确认文件在磁盘上并已加载:
- name: SPRING_CONFIG_LOCATION
value: file:./config/schema-${ENV}.yml
...
- name: custom.configuration.name
value: file:config/schema-${ENV}.yml
英文:
We use dynamically generated configuration files that are injected with environment specific secrets. The combination to get everything aligned is as follows:
Code:
myFunction(@Value("${custom.configuration.name}") final String customConfigurationName) {
InputStream inputStream=new ClassPathResource(customconfigFileName).getInputStream()){}
...
}
Template - Add a hard required path as this confirms the file is on disk and loaded:
- name: SPRING_CONFIG_LOCATION
value: file:./config/schema-${ENV}.yml
...
- name: custom.configuration.name
value: file:config/schema-${ENV}.yml
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论