2015-02-17 11 views
14

एक स्प्रिंग बूट वेब एप्लिकेशन का उपयोग करके मैं अपने प्रोजेक्ट के बाहर एक फाइल सिस्टम फ़ोल्डर से अपने स्थिर संसाधन की सेवा करने की कोशिश कर रहा हूं।फाइल सिस्टम से स्टेटिक संसाधनों की सेवा | स्प्रिंग बूट वेब

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

स्प्रिंग विन्यास: - -:

@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); 
    } 
} 

साधते 'http://localhost:9999/test/test.js' अपने ब्राउज़र में वापस देता है एक 404.

मैं कैसे करने के लिए ResourceHandlerRegistry कॉन्फ़िगर करना चाहिए

फ़ोल्डर संरचना की तरह दिखता है उपर्युक्त 'एक्सटी-संसाधन' फ़ोल्डर से स्थिर संसाधनों की सेवा करें?

मैं देव/प्रोड पर्यावरण के लिए कैश चालू/बंद स्विच करने में सक्षम होना चाहिए।

धन्यवाद

अद्यतन 1

पूर्ण फ़ाइल पथ देते काम करता है: -

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

मैं कैसे सापेक्ष स्थान प्रदान कर सकते हैं? पूर्ण पथ & तैनाती प्रक्रिया के निर्माण के दौरान मेरे जीवन को कठिन बना देगा।

+0

के साथ अपना वेबपैप शुरू करें क्या आपने पूर्ण पथ की कोशिश की है? (और शायद आपके यूआरएल में सिर्फ एक '/' अधिक है :)) – sodik

+0

पूर्ण पथ काम करता है। अद्यतन प्रश्न देखें। क्या सापेक्ष पथ प्रदान करने का कोई तरीका है? –

+0

इसे बनाएं :) उदा। फ़ाइल ("ext-resource")। GetAbsoluteFile()। ToURI ... उचित वाक्यविन्यास के लिए javadoc जांचें – sodik

उत्तर

17

file:/// फाइल सिस्टम के रूट की ओर इशारा करते एक पूर्ण यूआरएल इसलिए file:///./ext-resources/ मतलब यह है कि वसंत बूट जड़ में ext-resources नाम के एक निर्देशिका में संसाधनों की तलाश में है और,।

यूआरएल के रूप में file:ext-resources/ जैसे कुछ का उपयोग करने के लिए अपनी कॉन्फ़िगरेशन अपडेट करें।

+0

यह काम करता है !!! –

3

वसंत बूट कॉन्फ़िगरेशन प्रबंधन यहां कई रणनीतियों की अनुमति देता है (see Boot reference documentation)।

एक स्थैतिक, पूर्ण पथ का उपयोग करते समय यहां, मैं आपको सलाह देता हूं कि आप उस रणनीति का उपयोग न करें क्योंकि आपकी टीम में प्रत्येक डेवलपर एक ही वर्कस्पेस लेआउट साझा नहीं करेगा।

आप that example project में चुनी गई कुछ रणनीतियों का उपयोग कर सकते हैं और इस पथ को कॉन्फ़िगरेशन प्रॉपर्टी बना सकते हैं।

एक बार यह एक संपत्ति है, मान लें कि यह स्थापित करने के लिए resources.projectroot, कई तरीके हैं:

  • हर डेवलपर मैन्युअल रूप से उसके application.yml या application.properties फ़ाइल में इस मूल्य सेट
  • उपयोग env चर जब RESOURCES_PROJECTROOT=/home/user/demo/ ./gradlew bootRun तरह परियोजना चल (यहाँ, Gradle + यूनिक्स) या set RESOURCES_PROJECTROOT=%cd%mvn spring-boot:run (यहाँ, Maven + खिड़कियों)

आप शायद कई OT मिल जाएगा उसके समाधान जो आपके निर्माण उपकरण को देखते हुए, आपकी पसंद की ऑपरेटिंग सिस्टम और बूट प्रदान करने वाली सभी कॉन्फ़िगरेशन रणनीतियों को देखकर आपकी आवश्यकताओं को पूरा करते हैं।

+1

तो क्या इसका मतलब यह है कि सापेक्ष पथ संभव नहीं हैं? .properties फ़ाइल में उस पूर्ण पथ को स्थानांतरित करना ठीक है, लेकिन क्या हम केवल एक सापेक्ष स्थान प्रदान नहीं कर सकते हैं (जैसा कि प्रश्न में उल्लिखित है)? –

+0

आप दोनों सापेक्ष और पूर्ण पथ का उपयोग कर सकते हैं। फ़ाइल: // (दो स्लैश नोटिस) प्रकार फ़ाइल के संसाधनों के लिए सिर्फ एक मार्कर है। उसके बाद आप अपना रास्ता प्रदान करते हैं। यदि निर्दिष्ट पथ स्लैश के साथ शुरू होता है तो इसे फ़ाइल सिस्टम की रूट से शुरू होने वाले पथ के रूप में व्याख्या किया जाता है। यदि यह स्लैश से शुरू नहीं होता है तो यह स्प्रिंग बूट की कार्यशील निर्देशिका से एक सापेक्ष पथ है। फ़ाइल: // वसंत आविष्कार नहीं है, पहले भाग: // को योजना कहा जाता है। यूआरआई कक्षा के लिए जावाडोक देखें - https://docs.oracle.com/javase/8/docs/api/java/net/URI.html – joensson

0

यह है कि मैं क्या WebConfig कक्षा में था, addResourceHandlers विधि के अंदर है:

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

स्प्रिंग बूट Maven प्लगइन classpath करने के लिए अतिरिक्त निर्देशिका जोड़ सकते हैं। आपके मामले में आप इसे अपने पोम में शामिल कर सकते हैं।

<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> 

तो इस तरह आपको अपनी कक्षाओं में किसी भी हार्ड-कोड को शामिल करने की आवश्यकता नहीं है। बस

mvn spring-boot:run 
संबंधित मुद्दे