2015-09-15 6 views
13

मैं आवेदन शुरू करने पर कंसोल करने के लिए "हैलो" प्रिंट करने की कोशिश कर रहा हूं। क्या आप समझा सकते हैं कि इसे कैसे करें?Play में स्टार्टअप पर कोड कैसे चलाएं! ढांचा 2.4

क्या मैं अपने आप की कोशिश की:

app/modules/HelloModule.scala:

package modules 

import com.google.inject.AbstractModule 

trait Hello {} 

class MyHelloClass extends Hello { 
    initialize() // running initialization in constructor 
    def initialize() = { 
    println("Hello") 
    } 
} 

class HelloModule extends AbstractModule { 
    def configure() = { 
    bind(classOf[Hello]) 
     .to(classOf[MyHelloClass]).asEagerSingleton 
    } 
} 

conf/application.conf में मैं कहा:

play.modules.enabled += "modules.HelloModule" 

और "हैलो" मुद्रित नहीं है जब मैं चलाने activator run

+0

"हैलो" जब पहली अनुरोध प्राप्त होता है प्रदर्शित किया जाता है में? देव मोड में, पहले अनुरोध आने तक आलसी शुरू करें। बीटीडब्ल्यू आप बस 'बाइंड (क्लासऑफ [माईहेलो ​​क्लास]) लिख सकते हैं। AsEagerSingleton'। –

+1

'एक्टिवेटर रन' के बाद मैं स्थानीयहोस्ट का अनुरोध करता हूं: 9 000/किताबें (यह सरल-आराम-स्कैला एक्टिवेटर टेम्पलेट है) और "हैलो" प्रदर्शित नहीं होता – dziablo

+0

यह https://stackoverflow.com/questions/36453955/how-do-i देखें -पर-ए-एक्शन-ऑन-सर्वर-स्टार्टअप-इन-द-स्कैला-प्ले-फ्रेमवर्क – Programmer

उत्तर

5

आप Global object, और ओवी का उपयोग करने की आवश्यकता है गलती "ऑनस्टार्ट" विधि:

आपकी परियोजना में एक वैश्विक वस्तु को परिभाषित करने से आप अपने आवेदन के लिए वैश्विक सेटिंग को संभाल सकते हैं। इस ऑब्जेक्ट को डिफ़ॉल्ट (खाली) पैकेज में परिभाषित किया जाना चाहिए और ग्लोबल सेटिंग्स को विस्तारित करना होगा।

import play.api._ 

object Global extends GlobalSettings { 

    override def onStart(app: Application) { 
    Logger.info("Application has started") 
    } 

    override def onStop(app: Application) { 
    Logger.info("Application shutdown...") 
    } 

} 

तुम भी application.global विन्यास कुंजी का उपयोग कर एक कस्टम GlobalSettings कार्यान्वयन वर्ग के नाम निर्दिष्ट कर सकते हैं।

अद्यतन:

सही तरीका निर्भरता इंजेक्शन का उपयोग करने के बिल्कुल जैसे कि यह प्रश्न में वर्णित है, होगा। GlobalSettings could be removed later

प्रश्न में कोड के साथ कोई समस्या नहीं है। मैंने इसे अपने स्थानीय सेटअप पर सत्यापित किया। विकास मोड "एक्टिवेटर रन" में पहले अनुरोध के बाद कोड "हैलो" लिखें और एप्लिकेशन मोड "एक्टिवेटर स्टार्ट" में शुरू होने के बाद।

Btw, जैसे, लॉग में स्ट्रिंग को खोजने के लिए कुछ और आसान उपयोग करने का प्रयास

"-------- एपीपी DZIABLO शुरू कर दिया गया --------"

यह इतना तुम सिर्फ "हैलो" याद किया जा सकता है लॉग (मैं शुरू से ही यह नहीं पहचाना)

enter image description here

+0

यह काम करता है, धन्यवाद, लेकिन ग्लोबल ऑब्जेक्ट्स के बजाय निर्भरता इंजेक्शन का उपयोग करने के तरीके के दौरान ग्लोबलसेटिंग का उपयोग करना चाहिए? [लिंक] (https://www.playframework.com/documentation/2.4.x/GlobalSettings) मेरा मतलब है, क्या इसे भविष्य में ढांचे से हटाया या हटाया नहीं जाएगा? – dziablo

+0

निश्चित रूप से आपको DI का उपयोग करने की आवश्यकता है, ग्लोबलसेटिंग एप्लिकेशन प्रारंभ पर कंसोल करने के लिए "हैलो" प्रिंट करने का सबसे आसान तरीका है " –

+0

@dziablo - कृपया मेरे अपडेट को देखें। मुझे आपके कोड के साथ कोई समस्या नहीं दिख रही है।मैंने अपने स्थानीय प्रोजेक्ट पर सत्यापन किया –

संबंधित मुद्दे