पहुँच प्ले! 2.0 कॉन्फ़िगरेशन वैरिएबल Application.conf में?


81

इससे पहले प्ले में! v1 विन्यास चर को परिभाषित करना application.confऔर फिर उन्हें इस तरह एक्सेस करना वास्तव में आसान था :

play.configuration("db.driver")

हालाँकि अब मुझे v2 या उचित विकल्प में समान उपयोग के लिए प्रलेखन में कुछ भी नहीं मिल रहा है। ऐसा करने की विधि क्या है?


1
नए आगंतुकों के लिए, यह सवाल केवल प्ले 2.0 तक सीमित नहीं है। नीचे दिए गए अन्य प्ले संस्करणों के लिए कई अन्य उत्तर दिए गए हैं।
सूर्याभाइट्स

जवाबों:


36

प्ले 2.5 के रूप में, play.api.Play.currentपदावनत किया जाता है। आपको निर्भरता इंजेक्शन का उपयोग करना चाहिए Environmentया इंजेक्शन का उपयोग करना चाहिए Configurationऔर कॉन्फ़िगरेशन मान पढ़ने के लिए:

class HomeController @Inject() (configuration: play.api.Configuration) extends Controller {
  def config = Action {
    Ok(configuration.underlying.getString("db.driver"))
  }
}

अधिक विस्तृत चर्चा के लिए Play प्रलेखन चेकआउट करें ।


5
अद्यतन उत्तर देने के लिए धन्यवाद। मैं इसे Play के भावी उपयोगकर्ताओं के लिए सही उत्तर के रूप में चिह्नित करूंगा! 2.x
crockpotveggies

1
धन्यवाद, यह तब तक बढ़िया काम करना चाहिए जब तक कि प्ले को फिर से बदल न दिया जाए।
कार्लथ

तो टेस्ट क्लास में यह काम कैसे करें? Eg Sp2
अचेत

115

इसके बराबर प्ले 2.0 स्काला होगा:

Play.current.configuration.getString("db.driver")

आपको भी आवश्यकता होगी import play.api.Play

इसके लिए पूर्ण डॉक्स यहां हैं


बहुत धन्यवाद और मैं लिंक की सराहना करता हूं। उम्मीद है कि हम एपीआई एक्सप्लोरर के बाहर स्काला होम में अधिक डॉक्स देखें :)
क्रॉकपॉटवेजीज

15
ध्यान दें कि मामले के आधार पर आप यह अनुमान नहीं लगा सकते हैं कि आवेदन अभी तक शुरू नहीं हुआ है या आपको कोड के इस हिस्से तक आवेदन की आवश्यकता नहीं है; आप उपयोग कर सकते हैंplay.api.Play.maybeApplication.map(_.configuration.getString("db.driver"))
एंडी पेट्रेला

6
यह अब प्ले 2.5 में पदावनत हो गया है। माइग्रेशन गाइड
Breavyn

57

2.0 Play पर लागू होता है - जावा कंट्रोलर में आप निम्न का उपयोग कर सकते हैं:

String optionValue = Play.application().configuration().getString("db.driver");

देखने के लिए चर का उपयोग करें:

@play.Play.application().configuration().getString("db.driver")

1
मैं इसे जावास्क्रिप्ट में कैसे उपयोग कर सकता हूं?
प्रेमराज

1
@premraj एक अदृश्य div के HTML5 डेटा विशेषता के रूप में इसे साझा करें।

22

में खेलने 2.3.2 जावा के लिए आप उपयोग कर सकते हैं com.typesafe.config.ConfigFactoryविकल्प:

Config conf = ConfigFactory.load();
String myFooBarConfiguration = conf.getString("foo.bar");

तेजी से बढ़ रहा है एपीआई!


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

यह समाधान Play संस्करण से स्वतंत्र है। यह स्काला में भी काम करता है। HOCON संस्करण पर निर्भर हो सकता है अगर वे कभी उस एक्सेस प्वाइंट को बदलना चाहते थे।
पैट्रिक साउट्स

6

Play 2.3 [.8] / Java में परीक्षण की गई एक और विधि application.conf से मानों को एक्सेस करने के लिए:

Play संस्करण की जांच करने के लिए, फ़ाइल प्रोजेक्ट / प्लगइन्स की जांच करें। "Sbt-plugin" वाली लाइन में "2.3.8" जैसा संस्करण विनिर्देश होना चाहिए।

यदि, उदाहरण के लिए, application.conf में लाइनें हैं

myConfigStringValue=abc
myConfigBooleanValue=true

एक जावा फ़ाइल / वर्ग जैसे मानों को क्वेरी कर सकता है

import play.Configuration;
...
String myString = Configuration.root().getString("myConfigStringValue");
Boolean myBoolean = Configuration.root().getBoolean("myConfigBooleanValue");

प्राप्त करें ... विधियाँ शून्य हो जाती हैं यदि मान नहीं मिलता है, तो भी प्राप्त होते हैं ... विधियाँ जो मान के रूप में डिफ़ॉल्ट मान लेती हैं।

विवरण के लिए https://www.playframework.com/documentation/2.3.x/api/java/index.html देखें

और कक्षा के नाटक का निरीक्षण करें।



4

प्ले 2.0.1 जावा में, आपको यह करने की आवश्यकता है:

import play.Application.*;
...
String optionValue = play.Play.application().configuration().getString("my.config");


3

जावा में प्ले> 2.5.X के साथ आप कॉन्फिगरेशन हेल्पर के माध्यम से कॉन्फ़िगरेशन मान पढ़ सकते हैं:

ConfigFactory.load().getString("redis.url")

या

ConfigFactory.load().getInt("redis.port")

ऑब्जेक्ट कॉन्फिगरेशन परम को सही प्रकार में बदल देगा। यह किसी भी जावा प्रकार (getDouble, getLong, आदि, आदि) को संभालने के तरीकों को उजागर करता है

Doc: https://www.playframework.com/documentation/2.5.0/api/java/play/Configin.html


2

यदि आप Play Scala का उपयोग कर रहे हैं , तो मैंने कुछ सर्वोत्तम प्रथाओं की खोज करने के बाद इस दृष्टिकोण को सबसे उपयुक्त पाया। ऐसा करने के लिए, मैंने कॉन्फ़िगरेशन को इंजेक्ट किया और फिर इस तरह मेरी कॉन्फ़िगरेशन कुंजी को एक्सेस किया:

import play.api.Configuration

class myClass @Inject()(
  config: Configuration
) {
  val configValue: String = config.underlying.getString("configKey")
}

इस तरह, आपको विकल्प नहीं मिलता है, लेकिन स्ट्रिंग। यदि यह उपलब्ध नहीं है, तो यह एक अपवाद फेंकता है:

Error injecting constructor, com.typesafe.config.ConfigException$Missing: No configuration setting found for key 'configKey'

मुख्य लक्ष्य शुद्ध getसमाधान से बचने के लिए था जो @peoplemerge पहले से ही उल्लेख किया गया है, जबकि कोई अपवाद नहीं है।


2

@Injectयहां सभी उत्तरों में एक छोटे से योगदान / सुधार के रूप में , आपको कॉल करने की आवश्यकता नहीं हैconfig.underlying कार्यान्वयन । आप सीधे उपयोग कर सकते हैंconfig.getString

उदाहरण:

@Singleton
class RESTSessionChecker @Inject()(
    implicit override val conf: Configuration)
    extends Filter {

   val MAX_CONCURRENT_REQUESTS = conf.getString("MAX_CONCURRENT_REQUESTS").
         getOrElse("100").toInt
   ...

1

Scala का उपयोग करके Play में कॉन्फ़िगरेशन तक पहुंचने के कई तरीके हैं

निम्नलिखित प्ले 2.7.x पर काम करता है

विकल्प 1: DI के साथ

import play.api.Configuration
.... other imports ...

class MyActor @Inject()(config: Configuration) extends Actor  {
 println(config.get[String]("akka_actor_custom_dispatcher"))
 println(config.get[String]("akka_actor_custom_dispatcher")) // w/o optional
 println(config.getOptional[Int]("value_1").getOrElse(2))    // with optional 
 .....
 }

विकल्प 2: w / o DI

import play.api.Configuration
.... other imports ...

class MyActor() extends Actor {
 val config = new Configuration(ConfigFactory.load("application.conf")) // application.conf is optional 
 println(config.get[String]("akka_actor_custom_dispatcher"))
 println(config.get[String]("akka_actor_custom_dispatcher")) // w/o optional
 println(config.getOptional[Int]("value_1").getOrElse(2))    // with optional 
 .....
 }

@Inject()टेस्ट क्लास में कैसे ?
अचेत

@rapt मैं playframework.com/documentation/2.8.x/… पर एक नज़र डालने का सुझाव दूंगा । असल में, आपको प्ले एप्लिकेशन को ओवरराइड करना होगा जो एक परीक्षण के दौरान उपयोग किया जाता है। जब आप ऐसा करते हैं, तो GuiceApplicationBuilderआपको डिफ़ॉल्ट बाइंडिंग को ओवरराइड करने का मौका मिलता है। इसके अलावा, आपके मौजूदा प्ले घटकों की अपेक्षा के अनुसार त्वरित किया जाएगा।
निक जैकब्स

0

जैसा कि दूसरों ने उल्लेख किया है, आपको play.api.Play.current आयात करना होगा। यदि आप दौड़ते हैं तो:

current.configuration.getString("db.driver")

2.3.x / scala 10 पर आपको मिलेगा

type mismatch; 
found   : Option[String]
required: String

यदि यह अनिवार्य है, तो यह काम करेगा:

url = current.configuration.getString("db.driver").get

किसी को भी एक बेहतर जवाब का सुझाव?


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.