2015-02-17 16 views
14

Bir Spring Boot web uygulamasını kullanarak, statik kaynağımı projemin dışındaki bir dosya sistemi klasöründen sunmaya çalışıyorum. Bir 404.Statik kaynakları dosya sisteminden sunma | Spring Boot Web

nasıl üzere ResourceHandlerRegistry yapılandırmaları gerekir

@SpringBootApplication 
public class DemoStaticresourceApplication extends WebMvcConfigurerAdapter { 

    public static void main(String[] args) { 
     SpringApplication.run(DemoStaticresourceApplication.class, args); 
    } 

    @Override 
    public void addResourceHandlers(ResourceHandlerRegistry registry) { 
     registry.addResourceHandler("/test/**").addResourceLocations("file:///./ext-resources/") 
       .setCachePeriod(0); 
    } 
} 

tarayıcımda 'http://localhost:9999/test/test.js' vurmak geri verir: -

  src 
      main 
       java 
       resources 
      test 
       java 
       resources 
      pom.xml 
      ext-resources (I want to keep my static resources here) 
       test.js 

Bahar Yapılandırma -:

Klasör yapısı benziyor Yukarıda belirtilen 'öz kaynaklar' klasöründen statik kaynaklar sunabilir mi?

Dev/prod ortamı için önbelleği açıp kapatabilirim.

Teşekkür

GÜNCELLEME 1

mutlak dosya yolu verilmesi çalışır: -
@Override 
    public void addResourceHandlers(ResourceHandlerRegistry registry) { 
     registry.addResourceHandler("/test/**") 
       .addResourceLocations(
         "file:///C:/Sambhav/Installations/workspace/demo-staticresource/ext-resources/") 
       .setCachePeriod(0); 
} 

nasıl göreli konum sağlayabilir? Mutlak yol, & derleme işlemi sırasında hayatımı zorlaştıracak.

+0

mutlak yolu denediniz mi? (ve belki de URL'nizde sadece bir tane daha '' '' var :) – sodik

+0

Mutlak yol çalışması. Güncellenmiş soruya bakın. Göreli yol sağlamanın bir yolu var mı? –

+0

yapılandırarak ör. File ("ext-resource"). GetAbsoluteFile(). ToURI ... uygun sözdizimi için javadoc'u kontrol edin – sodik

cevap

17

file:/// nedenle file:///./ext-resources/ Bahar Boot kök ext-resources adlı bir dizinde kaynaklar arıyor demektir, dosya sisteminin köküne işaret bir mutlak URL ve.

Yapılandırmanızı, URL olarak file:ext-resources/ gibi bir şey kullanmak üzere güncelleyin.

+0

Bu işe yaradı! –

3

Yay önyükleme yapılandırması yönetimi, burada birden fazla stratejiye izin verir (see Boot reference documentation).

Statik, tam bir yol kullanıldığında, bu stratejiyi kullanmamanızı öneririz; çünkü ekibinizdeki her geliştirici aynı çalışma alanı düzenini paylaşmayacak.

that example project'da seçilen bazı stratejileri kullanabilir ve bu yolu bir yapılandırma özelliği haline getirebilirsiniz.

bu bir özelliktir kez, bunu ayarlamak için resources.projectroot, çeşitli yollar diyelim:

  • Her geliştirici el onu application.yml veya application.properties dosyasında bu değeri ayarlar
  • kullanım env değişkenleri RESOURCES_PROJECTROOT=/home/user/demo/ ./gradlew bootRun gibi projeyi çalışan (burada, gradle + unix) veya set RESOURCES_PROJECTROOT=%cd%mvn spring-boot:run (burada, maven + pencereler)

muhtemelen ot birçok bulacaksınız Oluşturma aracınıza, seçtiğiniz işletim sisteminize ve Önyükleme'nin sağladığı tüm yapılandırma stratejilerine bakarak ihtiyaçlarınıza uyan çözümler.

+1

Yani bu, göreceli yolların mümkün olmadığı anlamına mı geliyor? .properties dosyasındaki bu mutlak yolun taşınması iyidir, ancak yalnızca ilgili bir konum sağlayamıyor muyuz? –

+0

Hem göreli hem de mutlak yolları kullanabilirsiniz. dosya: // (iki eğik çizgi fark), yalnızca tip dosya kaynakları için bir işaretleyicidir. Bundan sonra yolunu verirsin. Belirtilen yol bir eğik çizgi ile başlarsa, dosya sisteminin kökünden başlayan bir yol olarak yorumlanır. Eğik çizgiyle başlamıyorsa, Yay Çizme'nin çalışma dizininden göreceli bir yoldur. file: // bir Spring icadı değil, önceki kısım: // şema denir. URI sınıfı için javadoc'u kontrol edin - https://docs.oracle.com/javase/8/docs/api/java/net/URI.html – joensson

0

Bu benim addResourceHandlers yöntemi içinde, WebConfig sınıfta ne yaptığını geçerli:

boolean devMode = this.env.acceptsProfiles("development"); 
String location; 
if (devMode) { 
    String currentPath = new File(".").getAbsolutePath(); 
    location = "file:///" + currentPath + "/client/src/"; 
} else { 
    location = "classpath:static/"; 
} 
1

Bahar Boot Maven'in Eklenti Sınıfyoluna ekstra dizinleri ekleyebilirsiniz. Durumunda bunu pompanıza dahil edebilirsin.

<plugin> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-maven-plugin</artifactId> 
    <version>${spring.boot.version}</version> 
    <configuration> 
     <folders> 
      <folder>${project.build.directory}/../ext-resources</folder> 
     </folders> 

     ... 
    </configuration> 
</plugin> 

Böylece, sınıflarınızda herhangi bir sabit kodu kullanmanıza gerek kalmaz. Sadece web sunucunuza