के आधार पर एक विशिष्ट समय पर दैनिक कार्रवाई करें मेरे जावा एप्लिकेशन को प्रति दिन एक बार सभी उपयोगकर्ताओं को ईमेल भेजने की आवश्यकता है। मैं इसे प्रत्येक उपयोगकर्ता के स्थानीय समय के आधार पर लगभग 2AM पर वितरित करना चाहता हूं। तो न्यूयॉर्क में एक उपयोगकर्ता को 2AM अमेरिका/न्यू_यॉर्क समय पर संदेश मिलेगा। लॉस एंजिल्स में एक उपयोगकर्ता को 2AM अमेरिका/लॉस_एंजेलस समय पर संदेश मिलेगा। मेरी मेलिंग प्रक्रिया दिन के प्रत्येक घंटे में एक बार चलती है।उपयोगकर्ता के स्थानीय समय क्षेत्र
मैं साइन-अप के दौरान प्रत्येक उपयोगकर्ता के समय क्षेत्र को स्वचालित रूप से निर्धारित करने के लिए HTML5 भू-स्थान सुविधाओं या आईपी पते भू-पता लगाने का उपयोग करने की योजना बना रहा हूं। बेशक, उपयोगकर्ता मानदंड मैन्युअल रूप से संशोधित कर सकते हैं यदि ये मान गलत हैं। मैं टाइम ऑब्जेक्ट स्ट्रिंग, जैसे कि "अमेरिका/न्यू_यॉर्क" के रूप में उपयोगकर्ता ऑब्जेक्ट में चयनित टाइमज़ोन को स्टोर करना चाहता हूं। यह एक स्ट्रिंग के रूप में डेटाबेस के लिए जारी रहेगा, लेकिन यदि आवश्यक हो तो यह बदला जा सकता है।
विचारणीय बातें:
- मैं, डेलाइट सेविंग टाइम के लिए खाते में करने की जरूरत है ताकि उपयोगकर्ता हमेशा 2:00 के आसपास ईमेल प्राप्त करता है। इसका मतलब है कि मैं उपयोगकर्ता ऑब्जेक्ट में जीएमटी -8 या इसी तरह के यूटीसी ऑफ़सेट स्टोर नहीं कर सकता। लॉस एंजिल्स का हिस्सा जीएमटी -7 में है, और अन्य हिस्सों में यह जीएमटी -8 में है।
- Another SO question में ऐसे जवाब हैं जो ऑफ़सेट जानकारी संग्रहीत करने का सुझाव देते हैं, लेकिन मुझे नहीं लगता कि यह कैसे काम करेगा, क्योंकि विभिन्न स्थानों में समय पूरे वर्ष बदल सकता है। जब भी दुनिया में कहीं भी टाइमज़ोन परिवर्तन घटना होती है तो मैं अपने सभी उपयोगकर्ता ऑब्जेक्ट टाइमज़ोन को अपडेट नहीं कर रहा हूं।
- मैं अपने आवेदन में जोडाटाइम का उपयोग कर रहा हूं, इसलिए यदि इससे मदद मिलेगी तो मैं इसका लाभ उठा सकता हूं।
- मैं डेटाबेस क्वेरीज के लिए हाइबरनेट का उपयोग कर रहा हूं और जावा में सैकड़ों हजारों उपयोगकर्ता रिकॉर्ड को संसाधित करने की आवश्यकता के बिना एक हाइबरनेट क्वेरी में संभाला जा सकता है जो समाधान ढूंढना चाहता हूं।
मैं वसंत शेड्यूलिंग क्रॉन सुविधाओं (क्वार्ट्ज के माध्यम से) का उपयोग कर रहा हूं ताकि दिन के हर घंटे घंटे में 2 मिनट की दूरी पर एक विधि चल सके। अभी मेरे अधिकांश उपयोगकर्ता अमेरिका/लॉस_एंजेलस में हैं, इसलिए मैं मैन्युअल रूप से सभी मेल को 2:02 पूर्वाह्न प्रशांत समय पर भेजने के लिए मजबूर कर रहा हूं। निम्नलिखित विधि हर घंटे चलती है: 02 घंटे प्रति घंटे, लेकिन यह मैन्युअल रूप से समय की जांच करता है और केवल लॉस एंजिल्स में वर्तमान समय 2:00 घंटे में होता है। इसका मतलब है कि अन्य स्थानों के उपयोगकर्ताओं को 2AM से अलग समय पर ईमेल प्राप्त होगा।
@Scheduled(cron="0 2 * * * *")
public void sendDailyReportEmail() {
DateTime now = new DateTime(DateTimeZone.forID("America/Los_Angeles"));
if (now.getHourOfDay() != 2) {
log.info("Not 2AM pacific, so skipping email reports");
return;
}
// send email reports
}
तो, मैं क्या जरूरत है एक डेटाबेस क्वेरी मुझे 2:00 पूर्वाह्न घंटे में एक स्थानीय समय है कि सभी उपयोगकर्ताओं को अपने उपयोगकर्ता वस्तु में समय क्षेत्र के आधार दे देंगे कि प्रदर्शन करने के लिए है। इसे पूरा करने के तरीके पर कोई विचार?