是否可以从服务器加载Spring Boot配置。json文件,而不是。亚马尔。房产?从文档来看,这是不支持开箱即用的——我想知道这是否可能,如果可能的话,人们将如何着手呢?
SPRING_应用程序_JSON属性可以在命令行上与环境变量一起提供。例如,可以在UN*X shell中使用以下行:
$SPRING_APPLICATION_JSON='{“acme”:{“name”:“test”}'java-jar myapp。罐子
在前面的例子中,您最终得到了acme。name=在Spring环境中进行测试。您还可以将JSON作为spring提供。应用系统属性中的json,如下例所示:
$java-Dspring.application.html" target="_blank">json='{"name":"test"}'-jarmyapp.jar
还可以使用命令行参数提供JSON,如下例所示:
$java-jarmyapp。罐子——Spring。应用json='{“name”:“test”}
您还可以将JSON作为JNDI变量提供,如下所示:
java:comp/env/spring。应用json。
参考留档:https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html
Spring启动方式:
@EnableAutoConfiguration
@Configuration
@PropertySource(value = { "classpath:/properties/config.default.json" }, factory=SpringBootTest.JsonLoader.class )
public class SpringBootTest extends SpringBootServletInitializer {
@Bean
public Object test(Environment e) {
System.out.println(e.getProperty("test"));
return new Object();
}
public static void main(String[] args) {
SpringApplication.run(SpringBootTest.class);
}
public static class JsonLoader implements PropertySourceFactory {
@Override
public org.springframework.core.env.PropertySource<?> createPropertySource(String name,
EncodedResource resource) throws IOException {
Map readValue = new ObjectMapper().readValue(resource.getInputStream(), Map.class);
return new MapPropertySource("json-source", readValue);
}
}
}
定义自己的PropertySourceFactory
,并通过@PropertySource
注释将其挂钩。阅读资源,设置属性,在任何地方使用它们。
唯一的问题是,如何转换嵌套属性。Spring实现这一点的方法(通过将Json定义为属性变量的方法,请参见:https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html)将嵌套属性转换为:
{"test": { "test2" : "x" } }
成为:
test.test2.x
希望有帮助,
阿图尔
如文档和GitHub上所述
YAML是JSON的超集
因此,您可以在Spring Boot项目中创建以下类:
public class JsonPropertySourceLoader extends YamlPropertySourceLoader {
@Override
public String[] getFileExtensions() {
return new String[]{"json"};
}
}
然后创建一个文件:
/src/main/resources/META-INF/spring。工厂
包含以下内容:
org.springframework.boot.env.PropertySourceLoader=\
io.myapp.JsonPropertySourceLoader
您的Spring应用程序已经准备好从application.json
加载JSON配置。优先级将是:。属性-
如果你有多个应用,你可以用共享的PropertySourceLoader
和spring创建一个jar。工厂
文件,以便将其包含到您需要的任何项目中。
我在尝试添加
问题内容: 我已经编写了一个PropertyUtils类(来自互联网),它将加载属性 而PropertiesUtil类如下所示 稍后,我可以通过调用PropertiesUtil.getProperty()方法来获取属性。 但是现在我要稍作修改,以便如果myApp.properties被用户修改/更改,则应再次加载 可能我需要FileWatcher类 但我的怀疑是 如何使用classpath:myA
我已经写了一个PropertyUtils类(来自互联网),它将加载属性 PropertiesUtil类如下所示 稍后,我可以通过调用PropertiesUtil来获取属性。getProperty()方法。 但现在我想稍微修改一下,如果myApp。属性被用户修改/更改,应该重新加载 可能我需要FileWatcher类 但我的疑虑是 如何使用classpath创建File对象:myApp/myApp.
对于spring framework,我想手动重新加载属性文件中的数据。实际上,当我手动运行这个servlet文件时,我必须编写一个重新加载servlet来手动重新加载数据。 我已经为MessageSource定义了Spring配置。 但不希望在特定时间段自动加载,例如,设置时可以自动加载: 我以前尝试过clear缓存(),但没有自动加载。
并将属性加载到映射中,结果为: 有什么想法如何创建一个映射策略吗?
我们正在将csv文件从Angular上传到Spring boot 2。x app包含约100万条记录,这100万条记录在间隔超过20分钟后在服务器上处理。csv文件请求将文件从Angular加载到Spring boot需要更多时间,在Spring boot应用程序中接收文件大约需要20分钟。 在application.yml文件中配置 servlet:多部分:已启用:真实最大文件大小:200MB最