2015-02-03 18 views
15

Jestem całkiem nowy na wiosnę, więc przepraszam, jeśli to głupie pytanie. Podczas próby uruchomienia programu pojawia się następujący błąd: java.lang.IllegalArgumentException: Could not resolve placeholder 'appclient' in string value [${appclient}]. Błąd jest generowany, gdy następujący kod jest wykonywany:Wiosna Nie można rozwiązać zastępczyni

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; 
} 
} 

Plik właściwość o nazwie appclient.properties istnieje w folderze zasobów z informacjami dla hosta i portu. Nie jestem pewien, gdzie jest zdefiniowany "${appclient}", jeśli jest w ogóle. Może to nawet nie jest zdefiniowane i to powoduje problem. Czy muszę zmienić "${appclient}" na coś podobnego do "{classpath:/appclient.properties}" lub czy brakuje mi czegoś innego?

+0

Można odwoływać się do właściwości PropertySource przy użyciu classpath na pewno: http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/context/annotation/PropertySource.html –

+0

Tak naprawdę próbowałem uruchomić ten program, nazwij go "B" w innym programie o nazwie "A". Podobno po uruchomieniu programu B pojedynczo otrzymuje on wartość '$ {appclient}' jako argument programu; jednak tak się nie stało, gdy próbowałem uruchomić B z A i spowodowałem błąd, który otrzymywałem. – Brkk

Odpowiedz

12

Nie czytasz prawidłowo pliku właściwości. Właściwość propertySource powinna przekazać parametr jako: file:appclient.properties lub classpath:appclient.properties. Zmień adnotację do:

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

Jednak nie wiem, co zawiera plik PropertiesConfig, jak jesteś importowanie że również. Najlepiej byłoby, gdyby adnotacja @PropertySource była tam przechowywana.

8

Jeśli używasz wiosny 3.1 i wyżej, można użyć coś jak ...

@Configuration 
@PropertySource("classpath:foo.properties") 
public class PropertiesWithJavaConfig { 

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

Można też przejść przez konfigurację xml jak ...

<?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> 

We wcześniejszych wersjach .

Powiązane problemy