2017-09-24 294 views
0

我試圖在Spring引導環境中設置clamav病毒掃描程序。所以我想在一個屬性文件clamav.properties中設置主機和端口,這個文件位於我的resources目錄以及application.properties文件中。它看起來像這樣:未設置彈簧引導配置屬性

clamav.host=localhost 
clamav.port=3310 
clamav.timeout=1000 

我有這個類:

@ConfigurationProperties("clamav.properties") 
public class ClamAvClient { 

static final Logger logger = LoggerFactory.getLogger(ClamAvClient.class); 

@Value("${clamav.host}") 
private String clamHost; 

@Value("${clamav.port}") 
private int clamPort; 

@Value("${clamav.timeout}") 
private int clamTimeout; 

public boolean ping() throws IOException { 
    logger.debug("Host:"+clamHost+" Port:"+clamPort); 
    blah..... 
} 

private static byte[] asBytes(String s) { 
    return s.getBytes(StandardCharsets.US_ASCII); 
} 

public String getClamHost() { 
    return clamHost; 
} 

public void setClamHost(String clamHost) { 
    this.clamHost = clamHost; 
} 

public int getClamPort() { 
    return clamPort; 
} 

public void setClamPort(int clamPort) { 
    this.clamPort = clamPort; 
} 

public int getClamTimeout() { 
    return clamTimeout; 
} 

public void setClamTimeout(int clamTimeout) { 
    this.clamTimeout = clamTimeout; 
} 

} 

它不連接,並在日誌中我得到這個:

2017-09-23 20:39:45.947 DEBUG 28857 --- [http-nio-8080-exec-2] xxx.ClamAvClient : Host:null Port:0 

所以這些值顯然沒有得到設置。我究竟做錯了什麼?我正在使用spring-boot-starter-web的託管版本,我的Eclipse的說法是1.4.3-RELEASE

任何想法?

+0

以及你如何使用ping?你使用'@ Autowired'版本還是像'new ClamAvClient()。ping()'? – varren

+0

DOH !!!我正在使用新的ClamAvClient()這可能是問題。 – mmaceachran

+0

是啊,你應該使用帶'applicationContext.getBean();'或'@ Autowired'註解的自動裝版。剛剛測試過您提供的代碼,並且它工作正常 – varren

回答

1

使用@ConfigurationProperties可以使用配置處理器將屬性組映射到類。

@ConfigurationProperties內部使用@Value看起來不正確。

所有你需要你的屬性對應的類是:

@Configuration 
@ConfigurationProperties(prefix="clamav") 
public class ClamAvClient { 

static final Logger logger = LoggerFactory.getLogger(ClamAvClient.class); 


private String host; 


private int port; 


private int timeout; 

//getters and setters 

} 

prefix ="clamav"符合您的屬性前綴文件。

host,port,timeout匹配該類的屬性。

+0

我不得不將clamav.properties中的屬性添加到application.properties中,但是它的工作原理。 – mmaceachran

+0

你仍然可以使用@PropertySource分開它來加載你的外部屬性 – Barath

+1

感謝兄弟,迄今爲止沒有遇到這個問題,但有一個新的方法來讀取值:) GB –