복붙노트

[SPRING] 스프링 부트는 문자열에서 자리 표시자를 해결할 수 없습니다.

SPRING

스프링 부트는 문자열에서 자리 표시자를 해결할 수 없습니다.

mvn clean install spring-boot :를 실행하여 maven을 통해 임베디드 tomcat 서버에서 spring-boot를 실행하고 있습니다. 그러나 내가 그것을 실행할 때마다 나는이 오류를 얻는다.

그 오류는 다음 두 줄의 코드에 관한 것입니다.

@Value("${language}")
private String language;

해당 언어 플래그는 내 application.properties에 다음과 같이 지정됩니다.

application.properties

language=java
logging.level.org.springframework=TRACE

이것은 혼란스러운 부분입니다. spring-boot : run 명령을 사용하지 않고 빌드를 실행하면 올바르게 빌드되고 전혀 빌드 된 jar 파일을 실행할 수 없습니다. 이 문제에 직면 한 임베디드 tomcat 서버에서 실행하려고 할 때만입니다.

내 코드에서 이렇게하면 일종의 우회 할 수 있습니다.

@Value("${language:java}")
private String language;

하지만 스프링은 application.properties 파일의 기본값을 자동으로 읽어야하기 때문에 저에게는 의미가 없습니다.

편집 : 사람들이 지적한대로 embedded.catcat 서버에서 실행할 때 application.properties를 전혀 읽지 않습니다. 파일을 읽도록 강제하는 방법이나 읽지 못할 수도있는 이유는 무엇입니까? 내장 된 서버가 아닌 외부의 응용 프로그램 서버에 배포 할 때 제대로 작동합니다.

도움을 위해 미리 감사드립니다.

해결법

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

    1.이 줄을 섹션의 pom에 추가하여 수정했습니다.

    이 줄을 섹션의 pom에 추가하여 수정했습니다.

    <resource>
         <directory>src/main/resources</directory>
         <filtering>true</filtering>
         <includes>
              <include>**/*.properties</include>
         </includes>
    </resource>
    

    내가 완전히 이해하지 못하는 것은 이것을하기위한 필요성이다.

    a)이 줄을 추가 할 필요없이 외부 응용 프로그램 서버에서 실행할 수 있으며 응용 프로그램은 application.properties를 잘 읽습니다.

    b) Eclipse에서 독립 실행 형 Java 응용 프로그램으로 응용 프로그램을 실행할 수 있습니다 (즉, Maven을 통해 응용 프로그램을 빌드 할 필요없이). 응용 프로그램 속성을 잘 읽습니다.

    c) 스프링 부트가 기본값에 상관없이 읽히지 않아야합니까? (위의 두 가지 경우에 표시된 것처럼?)

    도움을 주신 모든 분들께 감사드립니다. 희망적으로 이것은 다른 사람들을 도울 것입니다.

  2. ==============================

    2.우연히 Eclipse에서 이것을 실행 했습니까?

    우연히 Eclipse에서 이것을 실행 했습니까?

    나는 같은 문제를 가지고 있었고 그 프로젝트가 Maven 특성을 가지고 있지 않다는 것을 알았다. 프로젝트 -> 구성 -> Maven 프로젝트로 마우스 오른쪽 버튼을 클릭하십시오. 그런 다음 프로젝트 -> Maven-> Update Project에서 마우스 오른쪽 버튼을 클릭하여 문제를 해결하십시오.

  3. ==============================

    3.pom.xml 파일의 위의 변경 사항이 여전히 문제를 해결하지 못하면 아래 옵션을 시도하십시오.

    pom.xml 파일의 위의 변경 사항이 여전히 문제를 해결하지 못하면 아래 옵션을 시도하십시오.

    클래스 상단에 @PropertySource 주석을 추가하십시오.

    @PropertySource(
        {
                "classpath:/application.properties",
                "classpath:/${spring.profiles.active}/application-${spring.profiles.active}.properties"
        }
    

    )

    그래도 해결되지 않으면 다음 주석을 추가하십시오.

    @EnableAutoConfiguration

    인사말

  4. from https://stackoverflow.com/questions/48158249/spring-boot-could-not-resolve-placeholder-in-string by cc-by-sa and MIT license