私は、@Scheduled
アノテーションを使用して、Springでcronスタイルのpattenrsを持つスケジュールされたジョブを定義しています。Springでスケジュールされたジョブを条件付きで有効または無効にする方法は?
cronパターンは、設定プロパティファイルに格納されます。実際には、1つのデフォルト設定と、環境に依存する1つのプロファイル設定(例えば、dev、test、prod customer 1、prod customer 2など)の2つのプロパティファイルがあり、デフォルト値のいくつかが上書きされます。
私は、私のプロパティーファイルから値をインポートするために、${}
スタイルプレースホルダーを使用できる私の春のコンテキストでプロパティープレースホルダーBeanを構成しました。
ジョブBeanは、次のようになります。私のコンテキストXMLの
@Component
public class ImagesPurgeJob implements Job {
private Logger logger = Logger.getLogger(this.getClass());
@Override
@Transactional(readOnly=true)
@Scheduled(cron = "${jobs.mediafiles.imagesPurgeJob.schedule}")
public void execute() {
//Do something
//can use DAO or other autowired beans here
}
}
関連部品:私は本当にこのような
<!-- Enable configuration of scheduled tasks via annotations -->
<task:annotation-driven/>
<!-- Load configuration files and allow '${}' style placeholders -->
<bean class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:config/default-config.properties</value>
<value>classpath:config/environment-config.properties</value>
</list>
</property>
<property name="ignoreUnresolvablePlaceholders" value="true"/>
<property name="ignoreResourceNotFound" value="false"/>
</bean>
。最小限のXMLで非常にシンプルできれいです。
しかし、もう1つの要件があります。これらのジョブの一部は、場合によっては完全に無効にすることができます。だから、
、私はそれらを管理するために春を使用する前に、私はそれらを手動で作成し、設定ファイル内のcronパラメータと一緒にブール・パラメータがあり、ジョブを有効にする必要がありかどうかを指定するには:
jobs.mediafiles.imagesPurgeJob.enable=true or false
jobs.mediafiles.imagesPurgeJob.schedule=0 0 0/12 * * ?
この設定パラメータに応じて、このパラメータをSpringで条件付きで作成するか、まったく無視するにはどうすればよいですか?
明白な回避策は、決して評価されないcronパターンを定義することです。そのため、ジョブは決して実行されません。しかし、Beanはまだ作成されており、設定は少し不明なので、よりよい解決策が必要であると感じています。
あなたは今まで、このための答えを見つけましたか? – Chaos
@Chaos:いいえ、まだこれに余分なブール値プロパティを使用しています。 –
"これは決して評価されないcronパターン"が動作しない場合、スプリングスケジューラコードは有効な "次の実行日"を必要とします。それ以外の場合は例外がスローされます。 (すべてのバージョンで真実ではないかもしれません) –