2015-02-03 2 views
15

Я довольно новичок в весне, поэтому извините меня, если это глупый вопрос. Когда я пытаюсь запустить программу, я получаю следующую ошибку: java.lang.IllegalArgumentException: Could not resolve placeholder 'appclient' in string value [${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}" или я что-то пропустил?

+0

Вы можете ссылаться на PropertySource, используя путь к классам: http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/context/annotation/PropertySource.html –

+0

Я действительно пытался запустить эту программу, назовите ее «B» в другой программе с именем «A». По-видимому, когда вы выполняете программу B индивидуально, она получает значение '$ {appclient}' как аргумент программы; однако этого не произошло, когда я пытаюсь запустить B из A и вызвал ошибку, которую я получал. – Brkk

ответ

12

Вы не прочитали файл свойств правильно. Свойство PropertySource должно передать параметр как: file:appclient.properties или classpath:appclient.properties. Изменение аннотации:

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

Однако я не знаю, что содержит файл PropertiesConfig, так как вы импортируете, что также. В идеале аннотация должна была содержаться там.

8

Если вы используете 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> 

В более ранних версиях ,

Смежные вопросы