2016-02-09 119 views
1

我想動態地添加一些資源(意味着在Jar應用程序運行時),但具有挑戰性的部分是:我無法在運行時更改Jar內容,所以我需要創建一些其他空間作爲資源目錄並嘗試從那裏獲取。 (這是最好的做法,如果沒有,那麼請提供解決方案?)添加文件系統目錄作爲資源目錄在SpringBoot應用程序

例子: 我的春天啓動應用程序的JAR駐留在文件系統位置:

/home/my_spring_project/target/myproject.jar 

運行java -jar /home/my_spring_project/target/myproject.jar

和我已經保持運行時上傳圖片資源

/home/my_spring_project/uploads/user1_image.jpg 

但我不能夠使/home/my_spring_project/uploads目錄資源目錄

這裏是我的Spring應用程序,在這裏我想指定單獨的資源目錄的代碼:

@Configuration 
public class StaticResourceConfiguration extends WebMvcConfigurerAdapter 
{ 

private static final String[] RESOURCE_LOCATIONS = { "classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/" }; 

private static final String UPLOAD_DIR = "/uploads"; //currently application is mapping to base_dir of project i.e. /home/my_spring_project 

@Override 
public void addResourceHandlers(ResourceHandlerRegistry registry) 
{ 
    if (!registry.hasMappingForPattern("/**")) 
    { 
     registry.addResourceHandler("/**").addResourceLocations(RESOURCE_LOCATIONS); 
    } 
    registry.addResourceHandler("/uploads/**").addResourceLocations(UPLOAD_DIR); 
} 

}

我還需要spring應用程序選擇的bydefault資源目錄,因爲我將保留前端模塊。

我只是想添加一個目錄,除了JAR,我可以在運行時上傳任何文件。這樣我就不需要改變JAR包裝的內容。

由於提前

+0

您可以嘗試映射上傳位置:「file:/// home/my_spring_project/uploads /」?你能確保運行你的應用程序的Unix用戶有權閱讀該文件夾嗎? –

+0

是的它的工作,當我提供了目錄的絕對路徑 – virsha

+0

但是如果我想提供相對路徑 – virsha

回答

0

它工作時,我提供了絕對路徑,那麼解決的辦法是,我們可以在運行參數傳遞給我們的應用程序:

@Configuration 
public class StaticResourceConfiguration extends WebMvcConfigurerAdapter 
{ 

@Value("${upload.location}") 
private String uploadLocation; 

private static final String[] RESOURCE_LOCATIONS = { "classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/" }; 

    @Override 
    public void addResourceHandlers(ResourceHandlerRegistry registry) 
    { 
    if (!registry.hasMappingForPattern("/**")) 
    { 
     registry.addResourceHandler("/**").addResourceLocations(RESOURCE_LOCATIONS); 
    } 
    registry.addResourceHandler("/uploads/**").addResourceLocations(uploadLocation); 
    } 
} 

所以在運行應用程序,我們需要提供參數值是這樣的:

java -jar /home/my_spring_project/target/myproject.jar --upload.location=file:/home/my_spring_project/uploads 

感謝@布賴恩Clozel

相關問題