[SPRING] json 파일에서 spring-boot 특성로드
SPRINGjson 파일에서 spring-boot 특성로드
.yaml 또는 .properties가 아닌 .json 파일에서 spring-boot config를로드 할 수 있습니까? 설명서를 보면서, 이것은 상자에서 지원되지 않습니다. 가능한지 궁금합니다. 만약 그렇다면 어떻게 할 것인지 궁금합니다.
해결법
-
==============================
1.봄 부팅 방법 :
봄 부팅 방법 :
@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
희망은 도움이된다.
아르투르
-
==============================
2.2 단계
2 단계
public String asYaml(String jsonString) throws JsonProcessingException, IOException { // parse JSON JsonNode jsonNodeTree = new ObjectMapper().readTree(jsonString); // save it as YAML String jsonAsYaml = new YAMLMapper().writeValueAsString(jsonNodeTree); return jsonAsYaml; }
게시물에서 가져왔다.
과
public class YamlFileApplicationContextInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> { @Override public void initialize(ConfigurableApplicationContext applicationContext) { try { Resource resource = applicationContext.getResource("classpath:file.yml"); YamlPropertySourceLoader sourceLoader = new YamlPropertySourceLoader(); PropertySource<?> yamlTestProperties = yamlTestProperties = sourceLoader.load("yamlTestProperties", resource, null); applicationContext.getEnvironment().getPropertySources().addFirst(yamlTestProperties); } catch (IOException e) { throw new RuntimeException(e); } } }
게시물에서 가져왔다.
그래서 둘을 결합 할 수 있습니다. 자원으로 json을로드하고 yaml로 변환 한 다음 Environment에 발견 된 모든 특성을 추가하십시오
-
==============================
3.명령 행에서 SPRING_APPLICATION_JSON 특성을 환경 변수와 함께 제공 할 수 있습니다. 예를 들어 UN * X 쉘에서 다음 행을 사용할 수 있습니다.
명령 행에서 SPRING_APPLICATION_JSON 특성을 환경 변수와 함께 제공 할 수 있습니다. 예를 들어 UN * X 쉘에서 다음 행을 사용할 수 있습니다.
앞의 예제에서는 Spring 환경에서 acme.name = test로 끝난다. 다음 예제와 같이 JSON을 Spring.application.json으로 System 속성에 제공 할 수도 있습니다.
다음 예제와 같이 명령 줄 인수를 사용하여 JSON을 제공 할 수도 있습니다.
다음과 같이 JSON을 JNDI 변수로 제공 할 수도 있습니다.
참조 문서 : https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html
-
==============================
4.docs 및 GitHub에 명시된대로
docs 및 GitHub에 명시된대로
따라서 Spring 부트 프로젝트에 다음 클래스를 만들면됩니다.
public class JsonPropertySourceLoader extends YamlPropertySourceLoader { @Override public String[] getFileExtensions() { return new String[]{"json"}; } }
그런 다음 파일을 만듭니다.
/src/main/resources/META-INF/spring.factories 다음 내용으로
org.springframework.boot.env.PropertySourceLoader=\ io.myapp.JsonPropertySourceLoader
그리고 Spring 애플리케이션은 application.json에서 JSON 구성을로드 할 준비가되었다. 우선 순위는 .properties -> .yaml -> .json입니다.
여러 개의 앱을 사용하는 경우 필요한 모든 프로젝트에 포함하기 위해 공유 PropertySourceLoader 및 spring.factories 파일로 jar를 만들 수 있습니다.
from https://stackoverflow.com/questions/44564166/load-spring-boot-properties-from-json-file by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 여러 작업에 대한 Spring Batch JUnit 테스트 (0) | 2019.04.12 |
---|---|
[SPRING] Spring MVC Controller의 클래스 속성으로서 Session scope bean (0) | 2019.04.12 |
[SPRING] 사용자 정의 속성 편집기가 Spring MVC의 요청 매개 변수에 대해 작동하지 않습니까? (0) | 2019.04.12 |
[SPRING] Spring과 Hibernate를 이용한 다중 데이터베이스 트랜잭션 관리 (0) | 2019.04.12 |
[SPRING] 스프링 부트는 문자열에서 자리 표시자를 해결할 수 없습니다. (0) | 2019.04.12 |