2010-12-11 9 views
11

मैं प्रॉपर्टीप्लेसहोल्डर कॉन्फ़िगरर का उपयोग कर गुण फ़ाइल से जेडीबीसी कनेक्शन जानकारी जैसे एप्लिकेशन सेटिंग्स लोड कर रहा हूं। मैं अन्य सेटिंग्स जैसे डिफॉल्ट लोकेल और टाइमज़ोन को गुणों के रूप में भी रखना चाहता हूं।स्प्रिंग कॉन्फ़िगरेशन के साथ डिफ़ॉल्ट लोकेल और टाइमज़ोन प्रारंभ करें

लेकिन मुझे Locale.setDefault() और TimeZone.setDefault() निष्पादित करने के लिए सबसे अच्छी विधि से अनिश्चितता है। मैं चाहता हूं कि वे स्टार्टअप में जल्दी ही दौड़ें और केवल एक बार। क्या दूसरे कोड को निष्पादित करने से पहले वसंत में कुछ कोड निष्पादित करने का कोई उचित तरीका है? कोई सुझाव?

मुझे पता है कि मैं कमांड लाइन पर डिफ़ॉल्ट मान निर्दिष्ट कर सकता हूं, लेकिन यह एप्लिकेशन कई स्थानों पर स्थापित हो जाएगा और मैं किसी को परिभाषित करने से भूलने वाली समस्याओं से बचना चाहता हूं- Duser.timezone = UTC या जो भी हो।

उत्तर

5

मैंने ServletContextListener का उपयोग किया है। contextInitialized(..)TimeZone.setDefault(..) में कहा जाता है।

यदि आप किसी भी निर्माता या @PostConstruct/afterPropertiesSet() में टाइमज़ोन पर भरोसा करते हैं तो इसे ध्यान में नहीं रखा जाएगा।

आप इसे की जरूरत है, this question

+0

धन्यवाद, यह काम कर सकता है। हालांकि, मेरे पास एक प्रारंभिक बीन है और इसमें टाइमज़ोन की आवश्यकता हो सकती है। यदि ऐसा है, तो क्या यह मेरे 'setDefault() 'कोड को' @ PostConstruct' /' के बाद प्रॉपर्टीजसेट() 'में डाल देना समझ में आता है? क्या इन प्रारंभिक बीन्स वसंत xml फ़ाइल में परिभाषित क्रम में निष्पादित हैं? – Tauren

+0

आप बीन्स के 'ऑर्डर' विशेषता का उपयोग करने का प्रयास कर सकते हैं। या मैंने जो जवाब जोड़ा है उसे देखें। – Bozho

10

पर एक नज़र मैं contextInitialized विधि कॉल करने से पहले अन्य सेम सहित उसके डिफ़ॉल्ट सेम के कुछ वसंत लोड पाया लेते हैं, इसलिए, यहाँ एक बेहतर दृष्टिकोण "ड्राफ़्ट" कि मुझे लगता है कि कर सकते हैं

public class SystemPropertyDefaultsInitializer 
    implements WebApplicationInitializer{ 

    private static final Logger logger = Logger 
      .getLogger(SystemPropertyDefaultsInitializer.class); 

    @Override 
    public void onStartup(ServletContext servletContext) 
      throws ServletException { 
     logger.info("SystemPropertyWebApplicationInitializer onStartup called"); 

     // can be set runtime before Spring instantiates any beans 
     // TimeZone.setDefault(TimeZone.getTimeZone("GMT+00:00")); 
     TimeZone.setDefault(TimeZone.getTimeZone("UTC")); 

     // cannot override encoding in Spring at runtime as some strings have already been read 
     // however, we can assert and ensure right values are loaded here 

     // verify system property is set 
     Assert.isTrue("UTF-8".equals(System.getProperty("file.encoding"))); 

     // and actually verify it is being used 
     Charset charset = Charset.defaultCharset(); 
     Assert.isTrue(charset.equals(Charset.forName("UTF-8"))); 

     // locale 
     // set and verify language 

    } 

} 
-5

कैसे के बारे में स्टैंडअलोन वसंत बूट आवेदन: की, मुझे पता है अगर आप किसी भी चिंता का विषय है देखते हैं? जावा एप्लिकेशन इस तरह दिखता है:

@SpringBootApplication 
@EnableScheduling 
@EnableConfigurationProperties(TaskProperty.class) 
public class JobApplication { 

/* @Autowired 
    private TaskProperty taskProperty; 
*/ 
    public static void main(String[] args) { 
     SpringApplication.run(JobApplication.class, args); 
    } 
} 
+1

यह एक प्रासंगिक उत्तर नहीं है। – nixgadgets

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