【问题标题】:Spring properties configuration using @PropertySource with external JSON file使用带有外部 JSON 文件的 @PropertySource 的 Spring 属性配置
【发布时间】: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 的源作为起点。
  • 我在 application.yml 中有环境变量,即 classpath:keycloak.json 但不是 keycloak.json 文件的内容

标签: java json spring spring-mvc spring-boot


【解决方案1】:

如果 env 为 null,则问题可能与导入有关。

org.springframework.core.env.Environment

否则,如果从环境中查询的值为空。在 Spring Boot 应用程序中,JSON 文件作为属性的配置有很大不同,请参考Example 1Example 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-21
      • 1970-01-01
      • 1970-01-01
      • 2017-08-18
      • 2017-01-17
      • 2013-08-12
      • 2018-08-15
      • 1970-01-01
      相关资源
      最近更新 更多