java - 在 JSON 配置文件中注入(inject) Spring Boot 应用程序属性

标签 java spring spring-boot azure azure-application-insights

我正在将 Azure Application Insight 服务集成到我的 Spring Boot 应用程序中。 src/main/resources/applicationinsights.json 用于配置。不知道如何将环境变量注入(inject)其中。 我试过这个

applicationinsights.json

{
  "connectionString": "InstrumentationKey=${appInsightInstrumentationKey};IngestionEndpoint=https://eastus-8.in.applicationinsights.azure.com/;LiveEndpoint=https://eastus.livediagnostics.monitor.azure.com/"
}

其中 appInsightInstrumentationKey 可作为 Spring 环境变量的一部分使用。

这会引发错误

Illegal character in path at java.base/java.net.URI.create(URI.java:883) at reactor.netty.http.HttpOperations.resolvePath(HttpOperations.java:429)

这意味着变量不会被实际值替换。如有任何建议,我们将不胜感激。

最佳答案

我已经重现了您的需求,并且可以在 Spring Boot 中从 Json 文件加载配置,如下所示:

  1. Resources 文件夹和 META-INF 目录中创建一个 Application.json 文件。在 META-INF 目录中创建一个名为 spring.factories 的文件并添加以下配置:
org.springframework.boot.env.PropertySourceLoader=com.example.demo.JsonPropertySourceLoader

enter image description here

  • 创建 .json 文件并添加以下代码:
  • {
    "server.port":9080,
    "testdata1":"testing",
    "valuesMap":"{key1: '1', key2: '2', key3: '3'}"
    }
    

    enter image description here

  • 创建一个名为 JsonPropertySourceLoader 的类,它将扩展以下包中的 YAMLPropertySourceLoader 类:
  • import  org.springframework.boot.env.YamlPropertySourceLoader;
    
    public  class  JsonPropertySourceLoader extends  YamlPropertySourceLoader  {
    @Override
    public  String[]  getFileExtensions()  {
    return  new  String[]  {  "json"  };
    }
    }
    

    enter image description here

  • 使用以下代码创建一个休息 Controller 类:
  • @RestController
    @SpringBootApplication
    public  class  DemoApplication  {
    
    @Value("${testdata1}")
    private  String  testData1;
    
    @Value("#{${valuesMap}}")
    private  Map<String,  Integer>  valuesMap;
    
    @GetMapping("/")
    public  String  echo()  {
    System.out.println("Iterating the map....");
    for  (Map.Entry<String,  Integer>  entry  :  valuesMap.entrySet())  {
    System.out.println("Key = "  +  entry.getKey()
    +  ", Value = "  +  entry.getValue());
    }
    return  testData1;
    }
    public  static  void  main(String[]  args)  {
    SpringApplication.run(DemoApplication.class,  args);
    }
    }
    

    回应:

    从 json 配置文件中获取值。

    enter image description here

    请参阅我的 github repo完整代码。

    关于java - 在 JSON 配置文件中注入(inject) Spring Boot 应用程序属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76140441/

    相关文章:

    java - 为什么我的测试不能从其父级继承其 ContextConfiguration 位置?

    java - swagger-ui 未找到 HTTP 请求的映射

    java - Spring JSON 请求得到 406( Not Acceptable )

    java - 动态 JPA 标准构建器

    java - 如何迭代位于运行的 .jar 文件外部的文件夹

    java - Ubuntu java 错误日志

    java - 在 "Java Concurrency In Practice"之后阅读更多并发示例?

    java - 关于接口(interface)中合约之外使用的方法的澄清

    java - Spring - 让 TaskExecutor 和 TaskScheduler 由同一线程池支持

    java - 如何使用 Spring Boot Rest Controller 返回 JSONArray?