복붙노트

[SPRING] json 파일에서 spring-boot 특성로드

SPRING

json 파일에서 spring-boot 특성로드

.yaml 또는 .properties가 아닌 .json 파일에서 spring-boot config를로드 할 수 있습니까? 설명서를 보면서, 이것은 상자에서 지원되지 않습니다. 가능한지 궁금합니다. 만약 그렇다면 어떻게 할 것인지 궁금합니다.

해결법

  1. ==============================

    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 단계

    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. ==============================

    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. ==============================

    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를 만들 수 있습니다.

  5. from https://stackoverflow.com/questions/44564166/load-spring-boot-properties-from-json-file by cc-by-sa and MIT license