복붙노트

[SPRING] Spring이 자리 표시자를 해결할 수 없음

SPRING

Spring이 자리 표시자를 해결할 수 없음

나는 봄에 상당히 새롭다. 그래서 이것이 바보 같은 질문이라면 나를 용서해 라. 프로그램을 시작하려고하면 다음 오류가 발생합니다. java.lang.IllegalArgumentException : 문자열 값 [$ {appclient}]에서 'appclient'라는 자리 표시자를 확인할 수 없습니다. 다음 코드가 실행될 때 오류가 발생합니다.

package ca.virology.lib2.common.config.spring.properties;
import ca.virology.lib2.config.spring.PropertiesConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.PropertySource;

@Configuration
@Import({PropertiesConfig.class})
@PropertySource("${appclient}")
public class AppClientProperties {
private static final Logger log = LoggerFactory.getLogger(AppClientProperties.class);
{
    //this initializer block will execute when an instance of this class is created by Spring
    log.info("Loading AppClientProperties");
}
@Value("${appclient.port:}")
private int appClientPort;

@Value("${appclient.host:}")
private String appClientHost;

public int getAppClientPort() {
    return appClientPort;
}

public String getAppClientHost() {
    return appClientHost;
}
}

호스트 및 포트에 대한 정보가있는 자원 폴더에 appclient.properties라는 등록 정보 파일이 있습니다. "$ {appclient}"가 정의 된 곳이 어디인지는 확실하지 않습니다. 어쩌면 그것은 정의되지도 않았고 그것이 문제를 일으키는 것일 수도 있습니다. "$ {appclient}"를 "{classpath : /appclient.properties}"와 같은 것으로 변경해야합니까, 아니면 다른 것을 놓치고 있습니까?

해결법

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

    1.속성 파일을 올바르게 읽지 않습니다. propertySource는 매개 변수를 file : appclient.properties 또는 classpath : appclient.properties로 전달해야합니다. 주석을 다음으로 변경하십시오.

    속성 파일을 올바르게 읽지 않습니다. propertySource는 매개 변수를 file : appclient.properties 또는 classpath : appclient.properties로 전달해야합니다. 주석을 다음으로 변경하십시오.

    @PropertySource(value={"classpath:appclient.properties"})
    

    그러나 PropertiesConfig 파일에 포함 된 내용을 알지 못합니다. 가져 오기도 마찬가지입니다. 이상적으로 @PropertySource 주석이 거기에 보관되어 있어야합니다.

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

    2.Spring 3.1 이상을 사용한다면, 다음과 같은 것을 사용할 수있다.

    Spring 3.1 이상을 사용한다면, 다음과 같은 것을 사용할 수있다.

    @Configuration
    @PropertySource("classpath:foo.properties")
    public class PropertiesWithJavaConfig {
    
    @Bean
    public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
      return new PropertySourcesPlaceholderConfigurer();
    }
    }
    

    당신은 또한 같은 XML 구성으로 갈 수 ...

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
      http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
      http://www.springframework.org/schema/context 
      http://www.springframework.org/schema/context/spring-context-3.2.xsd">
    
      <context:property-placeholder location="classpath:foo.properties" />
    
      </beans>
    

    이전 버전.

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

    3.WAR 외부에서 관리해야하는 속성의 경우 :

    WAR 외부에서 관리해야하는 속성의 경우 :

    <context:property-placeholder location="file:///C:/application.yml"/>
    

    예를 들어, application.yml 내부가 name과 id 인 경우

    그럼 당신은 XML 봄 안에 런타임에 콩을 만들 수 있습니다

    <bean id="id1" class="my.class.Item">
        <property name="name" value="${name}"/>
        <property name="id" value="${id}"/>
    </bean>
    
  4. ==============================

    4.구성 파일이 classpath와 다른 경로에 있으면 구성 파일 경로를 시스템 등록 정보로 추가 할 수 있습니다.

    구성 파일이 classpath와 다른 경로에 있으면 구성 파일 경로를 시스템 등록 정보로 추가 할 수 있습니다.

    java -Dapp.config.path=path_to_config_file -jar your.jar
    
  5. from https://stackoverflow.com/questions/28307237/spring-could-not-resolve-placeholder by cc-by-sa and MIT license