স্প্রিং ched.০ এক্সপ্রেশন ভাষার সাথে @ নির্ধারিত (ফিক্সডেলি) কীভাবে পরামিতি করবেন?


125

কোনও নির্ধারিত টাস্কটি বর্ননা করার জন্য স্প্রিং 3.0.০ সক্ষমতা ব্যবহার করার সময়, আমি fixedDelayআমার কনফিগারেশন ফাইল থেকে প্যারামিটারটি সেট করতে চাই , বর্তমানের মতো এটি আমার টাস্ক ক্লাসে হার্ড-ওয়্যারিংয়ের পরিবর্তে ...

@Scheduled(fixedDelay = 5000)
public void readLog() {
        ...
}

দুর্ভাগ্যক্রমে মনে হয় যে স্প্রিং এক্সপ্রেশন ল্যাঙ্গুয়েজ (স্পেল) এর সাহায্যে @Valueএকটি স্ট্রিং অবজেক্ট ফেরত দেয় যা fixedDelayপ্যারামিটারের দ্বারা প্রয়োজনীয় হিসাবে দীর্ঘমেয়াদীতে স্বয়ংক্রিয়ভাবে বাক্সে সক্ষম হয় না ।

উত্তর:


26

আমার ধারণা, @Scheduledটীকাটি প্রশ্নবিদ্ধ। সুতরাং আপনার জন্য একটি সমাধান হতে পারে task-scheduledএক্সএমএল কনফিগারেশন ব্যবহার করা। আসুন এই উদাহরণটি বিবেচনা করুন ( স্প্রিং ডক থেকে অনুলিপি করা ):

<task:scheduled-tasks scheduler="myScheduler">
    <task:scheduled ref="someObject" method="readLog" 
               fixed-rate="#{YourConfigurationBean.stringValue}"/>
</task:scheduled-tasks>

... বা স্ট্রিং থেকে লং পর্যন্ত theালাই যদি কাজ না করে, তবে এরকম কিছু হবে:

<task:scheduled-tasks scheduler="myScheduler">
    <task:scheduled ref="someObject" method="readLog"
            fixed-rate="#{T(java.lang.Long).valueOf(YourConfigurationBean.stringValue)}"/>
</task:scheduled-tasks>

আবার, আমি এইগুলির কোনও সেটআপ চেষ্টা করিনি, তবে আমি আশা করি এটি আপনাকে কিছুটা সহায়তা করতে পারে।


ধন্যবাদ, এক্সএমএল কনফিগারেশনটি কৌশলটি করেছে। আমি কিছুটা অবাক হয়েছি যে টীকাটি স্ট্রিং মানগুলির সাথে আবদ্ধ বলে মনে হচ্ছে, যাইহোক, আমি পুরানো-স্কুল পথে
চলেছি

1
উপরের কনফিগারেশনের জন্য জাভা সমতুল্য কি নেই?
amique

@ গ্রজেগোর্জ ওলেডজকি <টাস্ক: নির্ধারিত> ট্যাগের আওতায় "সামোবজেক্ট" এর মান কত হবে। যদি নিয়ামকের একাধিক পদ্ধতি থাকে যার জন্য স্থির দেরি এবং প্রাথমিক বিলম্ব প্রয়োজন তবে তা কীভাবে পরিচালিত হবে?
মোহিত সিং

422

স্প্রিং v3.2.2 এটিকে পরিচালনা করতে স্ট্রিং প্যারামিটারগুলি মূল 3 দীর্ঘ পরামিতিগুলিতে যুক্ত করেছে। fixedDelayString, fixedRateStringএবং initialDelayStringএখন পাওয়া যায়।

@Scheduled(fixedDelayString = "${my.fixed.delay.prop}")
public void readLog() {
        ...
}

3
@ অভি এই উত্তরটি ওপি-র প্রশ্নের তিন বছর পরে আসে। প্রশ্নের (এবং স্বীকৃত উত্তর) সময়ে এই বৈশিষ্ট্যটি ছিল না।
medveshonok117

@ medveshonok117 বুঝতে পেরেছি। ধন্যবাদ
আভি

51

আপনি @Scheduledটীকাটি ব্যবহার করতে পারেন তবে cronকেবলমাত্র প্যারামিটারের সাথে :

@Scheduled(cron = "${yourConfiguration.cronExpression}")

আপনার 5 সেকেন্ড অন্তর হিসাবে হিসাবে প্রকাশ করা যেতে পারে "*/5 * * * * *"। তবে আমি যেমন বুঝতে পেরেছি আপনি 1 সেকেন্ডেরও কম নির্ভুলতা সরবরাহ করতে পারবেন না।


9
আপনি যে ক্রোন এক্সপ্রেশন দেখিয়েছেন তা ফিক্সেটরেটের সমতুল্য, যা ফিক্সডেলি

4

স্প্রিং বুট 2 এ, আমরা @Scheduledটীকা বিশিষ্ট বৈশিষ্ট্যের জন্য স্প্রিং এক্সপ্রেশন ল্যাঙ্গুয়েজ (স্পিপিএল) ব্যবহার করতে পারি :

@Scheduled(fixedRateString = "${fixed-rate.in.milliseconds}")
public void fixedRate() {
    // do something here
}

@Scheduled(fixedDelayString = "${fixed-delay.in.milliseconds}")
public void fixedDelay() {
    // do something here
}

@Scheduled(cron = "${cron.expression}")
public void cronExpression() {
    // do something here
}

application.propertiesফাইল ভালো চেহারা হবে:

fixed-rate.in.milliseconds=5000
fixed-delay.in.milliseconds=4000
cron.expression=0 15 5 * * FRI

এটাই. এখানে একটি নিবন্ধ যা কার্যের সময়সূচী সম্পর্কে বিশদভাবে ব্যাখ্যা করে।


1

আমার ধারণা আপনি একটি শিমের সংজ্ঞা দিয়ে আপনি মানটি রূপান্তর করতে পারেন। আমি এটি চেষ্টা করি নি , তবে আমি অনুমান করি যে নিম্নলিখিত পদ্ধতির অনুরূপটি আপনার পক্ষে কার্যকর হতে পারে:

<bean id="FixedDelayLongValue" class="java.lang.Long"
      factory-method="valueOf">
    <constructor-arg value="#{YourConfigurationBean.stringValue}"/>
</bean>

কোথায়:

<bean id="YourConfigurationBean" class="...">
         <property name="stringValue" value="5000"/>
</bean>

ধন্যবাদ, শব্দ এক উপায় মত, কিন্তু সৎ আমি হতে যে আরো একটি মার্জিত ( "springish") সমাধান :-) জন্য প্রত্যাশী হয়
ngeek

2
দুর্ভাগ্যক্রমে এটি কাজ করবে না, যেহেতু @ নির্ধারিত এনোটেশন অ্যাট্রিবিউট ফিক্সডলেটির জন্য একটি (দীর্ঘ) ধ্রুবক বরাদ্দ থাকা দরকার।
ngeek

আহ, ঠিক আছে। সুতরাং আমি অনুমান করি আপনি @Scheduledতখন টীকা দিয়ে এটি করতে পারবেন না ।
গ্রজেগোর্জ ওলেডজকি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.