使用带有外部 JSON 文件的 @PropertySource 的 Spring 属性配置
Posted
技术标签:
【中文标题】使用带有外部 JSON 文件的 @PropertySource 的 Spring 属性配置【英文标题】:Spring properties configuration using @PropertySource with external JSON file 【发布时间】:2018-04-01 13:00:17 【问题描述】:我正在使用可以访问 keycloak 的 spring boot。我需要将 keycloak 配置保留在 keycloak.json 文件中我想使用 PropertySource 注释从 json 中获取值...
我的应用程序.yml
keycloak:
configurationFile: "classpath:keycloak.json"
我的 keycloak.json
"realm": "MyRealm",
"auth-server-url": "https://keycloakURL",
....
我的班级
@Controller
@Configuration
@PropertySource("classpath:keycloak.json")
public class MyClass
@Autowired
private Environment env;
@RequestMapping(value = "/mycontroller", method = RequestMethod.GET)
public String method(Model model)
env.getProperty("auth-server-url")
问题是我得到这个环境变量的空值
【问题讨论】:
在调试中运行,在 env.getProperty 上放一个断点,然后查看 env 上的属性源,看看是否有任何 keycloak.json 的源作为起点。 Load spring-boot properties from json file的可能重复 我在 application.yml 中有环境变量,即 classpath:keycloak.json 但不是 keycloak.json 文件的内容 【参考方案1】:如果 env 为 null,则问题可能与导入有关。
org.springframework.core.env.Environment
否则,如果从环境中查询的值为空。在 Spring Boot 应用程序中,JSON 文件作为属性的配置有很大不同,请参考Example 1, Example 2
【讨论】:
【参考方案2】:我知道使用@Value
在某种程度上不鼓励使用env.getProperty()
,但我发现前者更加可靠和直接。在mkyong's great tutorial 中描述了从PropertySource
使用@Value
的正确方法
要在 @Values 中解析 $,您必须注册一个静态 XML 或注释中的 PropertySourcesPlaceholderConfigurer 配置文件。
【讨论】:
我已经尝试过你所说的@value。 @Value("$keycloak.configurationFile") 私有字符串 authServerUrl;返回 "classpath:keycloak.json" @Value("$auth-server-url") private String authServerUrl;春天不会开始.. @testeurFou 应该是@PropertySource("classpath:keycloak.json") public class MyClass @Value("$auth-server-url") private String authServerUrl;
@testeurFou 我也不知道@Controller
和@Configuration
在同一个文件中。至少(假设它有效)建议将它们分开。【参考方案3】:
目前不可能,但我们有票https://issues.jboss.org/browse/KEYCLOAK-4942
【讨论】:
以上是关于使用带有外部 JSON 文件的 @PropertySource 的 Spring 属性配置的主要内容,如果未能解决你的问题,请参考以下文章
将带有嵌套标签的 XML 读入 Spark RDD,并转换为 JSON
如何使用 Json.Net 序列化/反序列化带有自定义键的字典?