2017-03-31 27 views
0

在我的Java服務,我試圖讀取屬性文件,如下錯誤嘗試讀取性能從WEB-INF目錄下的文件在Spring

@Configuration 
@ComponentScan(basePackages = { "com.site.xxx.*" }) 
@PropertySource("classpath:application.properties") 
@Service("someService") 
public class SomeService { 
    @Autowired 
    private Environment env; 
    ... 
} 

然後在我的方法之一,我做

String closeDate = env.getProperty("close.date"); 

這裏有兩個問題,我可以使用這兩個問題作爲解決方案。

1>如果我的application.properties文件位於類路徑中,它將以某種方式讀取文件。我把它放在src/main/resources下面,然後在部署更改後讀取文件BUT,如果我更改了此屬性文件中的日期,它仍然顯示編譯代碼時輸入的第一個日期。所以閱讀部分的工作原理,但當我改變文件內容時它不會改變。

2>如果我更改以下行

@PropertySource("classpath:WEB-INF/application.properties") 

的內容,如果我把文件我的WEB-INF目錄下,即使該文件存在,它說找不到文件。我會非常喜歡#2的工作,但如果沒有辦法,它可以工作(我不認爲),我可以使用#1,只要它的行爲像一個屬性文件。

+0

使用選項(1),如果您更改屬性並重新啓動服務器,它工作正常嗎? – developer

+0

我還沒試過。不確定服務器是否會覆蓋該值? – p0tta

+0

不,它不覆蓋 – developer

回答

1

在容器啓動期間彈簧加載屬性文件,因此無論何時更改application.properties中的屬性,都需要重新啓動服務器。所以,這可能是你選擇(1)不起作用的原因。

如果你想與選項的工作(2),可以配置PropertySourcefile:(不classpath:)如下圖所示,你需要設置myproject.home(或您選擇的任何其他名稱)的環境(OS)或系統變量。

@PropertySource("file:${myproject.home}/WEB-INF/application.properties") 

不要屬性文件變化通常保證服務器重啓?

是的,他們需要一個容器重啓。

+0

我試了一下。重啓不會覆蓋文件,所以我應該很好。 – p0tta

+0

有沒有辦法實現#2而不觸及任何系統或環境變量?我認爲它應該是相當直接的,以獲得與此文件相同的上下文中的WEB-INF的位置? – p0tta

+0

你可以通過命令行參數,同時啓動Springboot – developer

相關問題