programing

스프링 부트: YAML 파일에서 @Value 로드

newsource 2023. 3. 6. 21:10

스프링 부트: YAML 파일에서 @Value 로드

에서 속성을 로드해야 합니다..ymlfile - 응용 프로그램이 파일을 읽을 수 있는 폴더의 경로를 포함합니다.

다음 코드를 사용하여 속성을 주입합니다.

@Value("${files.upload.baseDir}")
private String pathToFileFolder;

.yml개발 파일은 아래에 있습니다.src/main/resources/config/application.yml개발 설정을 덮어쓰기 위해 운영 환경에서 다음 명령을 사용하여 응용 프로그램을 실행하고 있습니다.

java -jar app.jar --spring.config.location=/path/to/application-production.yml

Spring Boot 매뉴얼에는 다음과 같이 기재되어 있습니다.

Spring Application은 다음 위치에 있는 application.properties 파일에서 속성을 로드하여 Spring 환경에 추가합니다.

  1. 현재 디렉토리의 /config 서브 디렉토리.

  2. 현재 디렉토리

  3. classpath /config 패키지

  4. 클래스 패스 루트

그 외:

'.properties' 대신 YAML('yml') 파일을 사용할 수도 있습니다.

.yml파일 내용:

{...}
files:
      upload:
        baseDir: /Users/Thomas/Code/IdeaProjects/project1/files
{...}

그리고 나의Application클래스 주석:

@SpringBootApplication
@EnableCaching

응용 프로그램을 실행하면 예외가 발생합니다.

Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'files.upload.baseDir' in string value "${files.upload.baseDir}"

를 사용해야 합니까?YamlPropertySourceLoader클래스 또는 특별한 주석을 추가하여 지원을 가능하게 합니다..yml스프링 부츠에?

편집:.yml파일에는 다음과 같은 스프링 부트에 의해 성공적으로 로드되는 다른 속성이 포함되어 있습니다.dataSource.XXX또는hibernate.XXX.

예를 들어 application.yml 입니다.

key:
 name: description here

클래스:

@Value("${key.name}")
private String abc;

M. Deinum의 말이 맞아, 내가 제공한 설정은 효과가 있어.yml파일의 들여쓰기가 잘못되어 속성을 찾을 수 없습니다.

컨스트럭터에서 변수에 접속하려고 했기 때문에 위의 내용은 나에게 효과가 없었습니다.하지만 공사에서는 아직 가치가 투입되지 않았습니다.결국 https://mrhaki.blogspot.com/2015/04/spring-sweets-using-value-for.html을 사용하여 작업을 수행할 수 있게 되었습니다.

아마 이것은 다른 사람들에게 도움이 될 것이다.

나한테는 자산 파일에 있는 중복된 키가 원인이었어...

저도 모르게 큰 yml 파일에서 같은 키를 사용하고 있었습니다.

key:   
 key1: value
 key2: value

key:  
 key3: value

yml 속성 파일:

xxxx:
     page:
        rowSize: 1000

Yaml 속성 설정 클래스를 만듭니다.

@Configuration
@EnableConfigurationProperties
@ConfigurationProperties(prefix = "xxxx")
public class YmlPropertiesConfig {

    private Page page;

    public Page getPage() {
        return page;
    }
    public void setPage(Page page) {
        this.page = page;
    }

    public class Page {
        private Integer rowSize;

        public Integer getRowSize() {
            return rowSize;
        }

        public void setRowSize(Integer rowSize) {
            this.rowSize = rowSize;
        }
    }    
}

마지막으로 입수하여 사용합니다.

public class XXXXController {

     @Autowired
     private YmlPropertiesConfig ymlProperties;

     public String getIt(){

        Integer pageRowSize = ymlProperties.getPage().getRowSize();
     }
}

나는 그 문제가 있다.Caused by: java.lang.IllegalArgumentException: Could not resolve placeholderproperties.yaml에 테스트 스프링 부트 프로파일을 설정했기 때문입니다.프로필이 없는 앱을 실행할 때 Spring에서 테스트 프로필 속성을 찾을 수 없습니다.

따라서 속성 또는 yaml에서 스프링 부트 프로파일을 삭제하거나 활성화된 프로파일을 사용하여 앱을 실행합니다.

컨피규레이션파일 예는 다음과 같은 예를 나타냅니다.

@Configuration
public class AppConfig {
  @Value("${prop.foo}")
  private String foo;
  @Value("${prop.bar}")
  private String bar;

  @Bean
  BeanExample beanExample() {
    return new BeanExample(foo, bar);
  }
}

@RestController에 문제가 있는 사용자를 위해 다음과 같이 수행합니다.

@Autowired
@Value("${google.recaptcha}") 
private String keyRecaptcha;

속성 파일의 이름이 잘못 지정되었습니다.applcation.properties스프링 이니셜라이저그러나 속성을 .yml 형식으로 추가했는데 동일한 오류로 검색되지 않았습니다.

을 「 」로 했을 때.application.yml이치노

언급URL : https://stackoverflow.com/questions/34556677/spring-boot-load-value-from-yaml-file