我正在将 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 文件加载配置,如下所示:
- 在 Resources 文件夹和 META-INF 目录中创建一个
Application.json
文件。在 META-INF 目录中创建一个名为spring.factories
的文件并添加以下配置:
org.springframework.boot.env.PropertySourceLoader=com.example.demo.JsonPropertySourceLoader
- 创建
.json
文件并添加以下代码:
{
"server.port":9080,
"testdata1":"testing",
"valuesMap":"{key1: '1', key2: '2', key3: '3'}"
}
- 创建一个名为
JsonPropertySourceLoader
的类,它将扩展以下包中的YAMLPropertySourceLoader
类:
import org.springframework.boot.env.YamlPropertySourceLoader;
public class JsonPropertySourceLoader extends YamlPropertySourceLoader {
@Override
public String[] getFileExtensions() {
return new String[] { "json" };
}
}
- 使用以下代码创建一个休息 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 配置文件中获取值。
请参阅我的 github repo完整代码。
关于java - 在 JSON 配置文件中注入(inject) Spring Boot 应用程序属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76140441/