programing

Spring @Value가 속성 파일의 값으로 확인되지 않습니다.

lastmoon 2023. 4. 2. 11:50
반응형

Spring @Value가 속성 파일의 값으로 확인되지 않습니다.

전에 다른 프로젝트에서 작업한 적이 있는데, 같은 작업을 다시 하고 있을 뿐인데 무슨 이유에서인지 작동이 안 돼요.더 스프링@Value속성 파일에서 읽는 것이 아니라 문자 그대로 값을 가져갑니다.

AppConfig.java

@Component
public class AppConfig
{
    @Value("${key.value1}")
    private String value;

    public String getValue()
    {
        return value;
    }
}

application Context.xml:

<context:component-scan
    base-package="com.test.config" />
<context:annotation-config />

<bean id="appConfigProperties"
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location" value="classpath:appconfig.properties" />
</bean>

appconfig.properties

key.value1=test value 1

컨트롤러에 다음 기능이 있습니다.

@Autowired
private AppConfig appConfig;

응용 프로그램은 정상적으로 시작되지만, 실행되면

appConfig.getValue()

그것은 되돌아온다

${key.value1}

속성 파일 내의 값으로 해결되지 않습니다.

생각?

나도 이유를 찾았다.@value동작하지 않았습니다.@value필요.PropertySourcesPlaceholderConfigurer대신PropertyPlaceholderConfigurer같은 변경을 실시해, 효과가 있었습니다만, 봄 4.0.3 릴리스를 사용하고 있습니다.설정 파일의 다음 코드를 사용하여 설정했습니다.

@Bean 
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}

이 문제는 application Context.xml과 spring-servlet.xml의 문제로 인해 발생합니다.이것은 콩 사이의 범위 설정 문제입니다.

pedjaradenkovic은 친절하게도 기존 리소스를 가리켜 주었다: @Controller 클래스의 Spring @Value 주석이 내부 속성 파일에 대한 값으로 평가되지 않으며 Spring 3.0.5는 속성에서 @Value 주석을 평가하지 않습니다.

저 같은 경우에는 교정기가 빠져있었어요.나는 가지고 있었다@Value("foo.bar") String value올바른 형식 대신@Value("${foo.bar}") String value

Sprig-boot 사용자의 경우 PropertyPlaceholderConfigr 및 새로운 PropertySourcesPlaceholderConfigr이 모두 Spring 3.1에 추가되었으므로 속성 파일에 쉽게 액세스할 수 있습니다.그냥 주사하다

주의: 자산이 다음과 같이 되어서는 안 됩니다.Static

@Value("${key.value1}")
private String value;

저는 스프링 부츠를 사용하고 있었습니다만, 제 경우 버전 업그레이드는1.4.0.RELEASE로.1.5.6.RELEASE이 문제를 해결했습니다.

@값 해결에 하루에서 반나절이 걸릴 수 있습니다. ; )

제가 한 일은 다음과 같습니다.

  1. 속성 또는 YAML 파일에 속성 추가

  2. 메인 클래스에 @Enable로 주석이 붙어 있는지 확인합니다.자동 설정 또는 @Spring Boot Application

  3. @Value를 사용할 수 있는 AppConfig 생성

    @Value("${PROPERTY}") 개인 문자열 URL;

클래스 레벨에서 @Configuration을 사용하여 이 AppConfig에 주석 달기

  1. 지금까지 셋업 완료.어디서나 AppConfig 자동 접속으로 원하는 장소에서 셋업 가능

예: SOME SERVICE @Autowired private AppConfig에서는 appConfig.getUrl()을 호출하여 속성 파일에서 속성 URL 값을 가져옵니다.

주의: 서비스 컨스트럭터에서 가치를 얻으려고 하지 마십시오.그것은 무효가 됩니다.

저 같은 경우에는 롬복 @AllArgsConstructor를 먹었는데, 그 물건도 가져갔어요.이 주석을 삭제하면 문제가 해결되었습니다.

pedjaradenkovic의 코멘트를 읽어보세요.

하지 않는 는, 「 」가 「 」입니다.@Value에 「」가 합니다.PropertySourcesPlaceholderConfigurerPropertyPlaceholderConfigurer.

는 잘못 되었다.dependency했습니다.서서수수 수다다다다다lombok"import org.springframework.beans.factory.annotation.Value;"되었습니다.

Intelij IDEA에서 자원 폴더가 "자원 루트"로 표시되지 않았기 때문입니다.리소스 디렉토리 -> "디렉토리를 마킹" -> "리소스 루트" 를 오른쪽 클릭합니다.

Property Placeholder Configurer 콩 인스턴스가 2개(대규모 스프링 구성) 설정되어 있었기 때문입니다.그리고 한 번 셋업되면 다른 하나는 전혀 쓸모가 없습니다.그것은 아마도 매우 당연한 일이지만, 나에게는 그렇지 않았다.PropertyPlaceholderConfigr의 두 번째 인스턴스가 생성 시(이미 다른 인스턴스가 있는 경우) 예외를 발생시키지 않는 이유를 이해할 수 없습니다.두 번째 인스턴스를 묵살하는 대신이렇게 의미있는 오류가 발생할 수 있습니다.

그것이 누구에게나 도움이 되기를 바랍니다. :)

프로젝트 루트 폴더를 이동했기 때문입니다.합니다..settings,.mvn,target,.project이클립스로 프로젝트를 재수입하는 게 제겐 효과가 있었습니다.

저 같은 경우에는 이 값이 어디에 사용되는지 신경 안 썼어요!컨스트럭터에서 사용하는 경우 구성 요소의 로드 순서에 주의하십시오!

언급URL : https://stackoverflow.com/questions/15937592/spring-value-is-not-resolving-to-value-from-property-file

반응형