問題タブ [spring-scheduled]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
spring-mvc - スケジュールされている関数内でリクエストを初期化しようとしていますが、リクエストの初期化が機能していませんか?
スケジュールされている関数内で HttpServletRequest を初期化し、cron ジョブに従ってアクションを実行しようとしています。しかし、リクエストを初期化した後に機能が停止しました。私は今どうすればいい ?私は春の mvc に取り組んでいます。この私のコード:
出力には hello 1 が出力されますが、 hello 2 は出力されません。HttpServletRequest を初期化した後に関数が停止しました。私は今どうすればいい 。
java - 春にスケジュールされたタスクのエラー処理
spring-scheduler.xml :
次のコードを使用して構成をロードしています。
タスクがスケジュールされているかどうかを確認する方法はありますか? XMLに欠落しているスケジュールまたはスケジュールされたタスクがない場合にエラーをスローする方法はありますか?
spring - WRONG_DOCUMENT_ERR: ノードが別のドキュメントで使用されています - エラーは、スケジューラを追加した後にのみ表示されます
基本的に、候補ファイルを検索するフォルダーを読み取るためのカスタム itemreader、ファイルを読み取って別のファイルに変換するためのカスタム itemprocessor、およびファイルを削除するためのカスタム itemwriter を備えた Spring Batch に基づくアプリケーションを作成しました。スケジューラを追加するまで、エラーなしで期待どおりに動作します。スケジューラを追加した後、質問のトピックに貼り付けられたエラーが表示されます。同様の問題であるが、コンテキストが非常に異なるいくつかの質問を見つけました。奇妙な点は、実際には、コンソールにそのようなエラーが表示されていても、機能していることです。つまり、フォルダが読み込まれ(itemreader)、ファイルが変換され(itemprocessor)、入力ファイルが削除されます(itemwriter)。私は非常に混乱しています。スケジューラなしでエラーを再現できれば、次に、一部のノードに焦点を当てるか、スケジューラを導入した後に結果が得られなかったため、スケジューラ構成で発生する可能性のあるエラーに焦点を当てることができましたが、どちらもそうではありません. どんな提案も高く評価されます。
次の段落は 1 月 10 日に追加されました。詳細な調査の結果、このようなエラーはメイン スレッドで 1 回だけ発生することがわかりました。つまり、アプリケーションを開始したときに候補者ファイルがあると、WRONG_DOCUMENT_ERR が返されます。たとえば、CustomItemReader で見つけられるファイルがない状態でアプリケーションを開始し、メイン スレッドが終了するまで待ってから、CustomItemReader で見つけられる候補ファイルを配置すると、エラーはまったく発生しません。つまり、CustomItemReader が pool-2-thread-1 によってトリガーされ、ファイルを見つけると、正しく機能します。一方、CustomItemReader がメイン スレッドによってトリガーされ、アプリケーションの起動時にのみ発生するファイルを見つけると、問題が発生します。JConsole を使用して、メイン スレッドが終了し、pool-2-thread-1 が稼働していることを確認できます。それで、入力フォルダーにファイルを追加すると、CustomItemReader は null ではなく文字列を返し、エラーは発生しません。確かに、Spring Scheduller と Spring Batch を一緒に使用することについて、特定の概念がありませんでした。明らかに、アプリケーションを起動してすぐに初期化されたファイルを見つけた場合に、アプリケーションでエラーが発生しないようにしたいと考えています。メインスレッドでのみ発生するのに、Spring Scheduller を取り出した場合、一度は期待どおりに動作するのはなぜですか? 同期パラメータが不足していますか? メインスレッドでのみ発生するのに、Spring Scheduller を取り出した場合、一度は期待どおりに動作するのはなぜですか? 同期パラメータが不足していますか? メインスレッドでのみ発生するのに、Spring Scheduller を取り出した場合、一度は期待どおりに動作するのはなぜですか? 同期パラメータが不足していますか?
次の段落は 1 月 11 日に追加されました。大きなスニペットでエラーが発生するクラスのみを更新しました。他のすべては同じままです。
//----
//-----
//----
//----
//----
//----
:: スプリング ブート :: (v1.3.1.RELEASE)
2016-01-08 14:51:44.783 INFO 7716 --- [main] com.example.DemoApplication : PID 7716 の GH-VDIKCISV252 で DemoApplication を開始しています (C:\STS\wsRestTemplate\demo\target\classes で e049447 によって開始されましたC:\STS\wsRestTemplate\demo)
2016-01-08 14:51:44.788 INFO 7716 --- [メイン] com.example.DemoApplication: アクティブなプロファイルが設定されていないため、デフォルトのプロファイルにフォールバックします: デフォルト
2016-01-08 14:51:44.955 INFO 7716 --- [main] scaAnnotationConfigApplicationContext : org.springframework.context.annotation.AnnotationConfigApplicationContext@6e2c9341 の更新: 起動日 [Fri Jan 08 14:51:44 CST 2016]; コンテキスト階層のルート
2016-01-08 14:51:50.882 WARN 7716 --- [ main] oscaConfigurationClassEnhancer : @Bean メソッド ScopeConfiguration.stepScope は非静的であり、Spring の BeanFactoryPostProcessor インターフェースに割り当て可能なオブジェクトを返します。これにより、@Autowired、@Resource、および @PostConstruct などのアノテーションを、メソッドの @Configuration クラスを宣言する内で処理できなくなります。これらのコンテナーのライフサイクルの問題を回避するには、このメソッドに「静的」修飾子を追加します。詳細については、@Bean javadoc を参照してください。
2016-01-08 14:51:51.030 WARN 7716 --- [ main] oscaConfigurationClassEnhancer : @Bean メソッド ScopeConfiguration.jobScope は非静的であり、Spring の BeanFactoryPostProcessor インターフェースに割り当て可能なオブジェクトを返します。これにより、@Autowired、@Resource、および @PostConstruct などのアノテーションを、メソッドの @Configuration クラスを宣言する内で処理できなくなります。これらのコンテナーのライフサイクルの問題を回避するには、このメソッドに「静的」修飾子を追加します。詳細については、@Bean javadoc を参照してください。
2016-01-08 14:51:51.386 INFO 7716 --- [main] osjdeEmbeddedDatabaseFactory: 組み込みデータベースを開始しています: url='jdbc:hsqldb:mem:testdb', username='sa'
2016-01-08 14:51:52.503 WARN 7716 --- [メイン] osbclAbstractListenerFactoryBean : org.springframework.batch.item.ItemReader はインターフェースです。実装クラスは、アノテーション ベースのリスナー構成についてクエリされません。@Bean メソッドで @StepScope を使用する場合は、必ず実装クラスを返して、リスナー アノテーションを使用できるようにしてください。
2016-01-08 14:51:53.572 INFO 7716 --- [main] osjdbc.datasource.init.ScriptUtils : クラスパスリソースから SQL スクリプトを実行 [org/springframework/batch/core/schema-hsqldb.sql]
2016-01-08 14:51:53.667 INFO 7716 --- [main] osjdbc.datasource.init.ScriptUtils : 94 でクラスパス リソース [org/springframework/batch/core/schema-hsqldb.sql] から SQL スクリプトを実行しましたMS。
2016-01-08 14:51:54.506 INFO 7716 --- [メイン] osjeaAnnotationMBeanExporter: 起動時に JMX 公開用の Bean を登録しています
2016-01-08 14:51:54.617 INFO 7716 --- [pool-2-thread-1] osbcrsJobRepositoryFactoryBean: データベース タイプが設定されていません。次を示すメタ データを使用: HSQL
2016-01-08 14:51:54.744 INFO 7716 --- [main] osbabJobLauncherCommandLineRunner: デフォルトのコマンドラインを実行中: []
2016-01-08 14:51:54.745 INFO 7716 --- [main] osbcrsJobRepositoryFactoryBean: データベース タイプが設定されていません。次を示すメタ データを使用: HSQL
2016-01-08 14:51:54.912 INFO 7716 --- [pool-2-thread-1] osbclsupport.SimpleJobLauncher: TaskExecutor が設定されておらず、デフォルトで同期エグゼキューターに設定されています。
2016-01-08 14:51:54.961 INFO 7716 --- [main] osbclsupport.SimpleJobLauncher: TaskExecutor が設定されていません。デフォルトで同期エグゼキューターになります。
2016-01-08 14:51:55.044 INFO 7716 --- [pool-2-thread-1] osbclsupport.SimpleJobLauncher: ジョブ: [SimpleJob: [name=job1]] が次のパラメーターで起動されました: [{}]
2016-01-08 14:51:55.088 INFO 7716 --- [pool-2-thread-1] osbatch.core.job.SimpleStepHandler : 実行中のステップ: [step1]
2016-01-08 14:51:55.095 INFO 7716 --- [main] osbclsupport.SimpleJobLauncher: ジョブ: [SimpleJob: [name=job1]] が次のパラメーターで起動されました: [{run.id=1}]
2016-01-08 14:51:55.176 INFO 7716 --- [main] osbatch.core.job.SimpleStepHandler: 実行ステップ: [step1]
2016-01-08 14:51:55.245 INFO 7716 --- [メイン] com.example.CustomItemReader: メソッドの読み取り - 出力ファイル名の収集
2016-01-08 14:51:55.314 INFO 7716 --- [pool-2-thread-1] com.example.CustomItemReader: メソッドの読み取り - 出力ファイル名の収集
2016-01-08 14:51:55.440 INFO 7716 --- [pool-2-thread-1] com.example.CustomItemReader: メソッドの読み取り - ファイルが見つかりました
2016-01-08 14:51:55.443 INFO 7716 --- [pool-2-thread-1] com.example.CustomItemProcessor: プロセス メソッド:
2016-01-08 14:51:55.461 INFO 7716 --- [メイン] com.example.CustomItemReader: メソッドの読み取り - ファイルが見つかりました
2016-01-08 14:51:55.462 INFO 7716 --- [メイン] com.example.CustomItemProcessor: プロセス メソッド:
2016-01-08 14:51:57.088 ERROR 7716 --- [pool-2-thread-1] osbatch.core.step.AbstractStep : ジョブ job1 でステップ step1 を実行中にエラーが発生しました
org.w3c.dom.DOMException: WRONG_DOCUMENT_ERR: ノードを作成したドキュメントとは別のドキュメントでノードが使用されています。
2016-01-08 14:51:57.104 INFO 7716 --- [pool-2-thread-1] osbclsupport.SimpleJobLauncher: ジョブ: [SimpleJob: [name=job1]] が次のパラメーターで完了しました: [{}] および次のステータス: [FAILED]
2016-01-08 14:51:57.754 INFO 7716 --- [メイン] com.example.CustomItemWriter : 書き込み方法: [C:\myApp\from\0000000571900000999674MHlog.txt.out]
2016-01-08 14:51:57.761 INFO 7716 --- [メイン] com.example.CustomItemReader: メソッドの読み取り - 出力ファイル名の収集
2016-01-08 14:51:57.762 INFO 7716 --- [メイン] com.example.CustomItemReader: 読み取り方法 - ファイルが見つかりません
2016-01-08 14:51:57.783 INFO 7716 --- [main] osbclsupport.SimpleJobLauncher: ジョブ: [SimpleJob: [name=job1]] が次のパラメータで完了しました: [{run.id=1}] および次のステータス: [完了]
2016-01-08 14:51:57.786 INFO 7716 --- [ main] com.example.DemoApplication : DemoApplication を 13.693 秒で開始しました (JVM は 14.853 秒間実行されています)
2016-01-08 14:52:54.724 INFO 7716 --- [pool-2-thread-1] osbclsupport.SimpleJobLauncher: ジョブ: [SimpleJob: [name=job1]] が次のパラメーターで起動されました: [{}]
2016-01-08 14:52:54.750 INFO 7716 --- [pool-2-thread-1] osbatch.core.job.SimpleStepHandler: 実行中のステップ: [step1]
2016-01-08 14:52:54.755 INFO 7716 --- [pool-2-thread-1] com.example.CustomItemReader: メソッドの読み取り - 出力ファイル名の収集
2016-01-08 14:52:54.756 INFO 7716 --- [pool-2-thread-1] com.example.CustomItemReader: メソッドの読み取り - ファイルが見つかりません
2016-01-08 14:52:54.775 INFO 7716 --- [pool-2-thread-1] osbclsupport.SimpleJobLauncher: ジョブ: [SimpleJob: [name=job1]] が次のパラメーターで完了しました: [{}] および次のステータス: [完了]
spring - Spring で 10 個の JMX URI をポーリングして DB に格納するアプリケーションを作成する方法
50 個の JMX URI をポーリングし、mbeans を DB に格納するアプリケーションを作成する方法。jmx サーバーに接続して mbeans 値を取得するクラスを作成しました。私の質問は、作成したクラスとメソッドをトリガーしてポーリングを続行する方法です。さらに、このポーリングをいつでも開始および停止するには、2 つの関数が必要です。
何を使用できますか-Spring Scheduler、Spring Integration、およびスレッドと無限ループを持つ別のクラスを作成する方法または作成する必要があります。
spring - 単一のタスクレットでジョブを定期的に呼び出すように Spring Schedulling を作成する方法
アノテーション@Scheduled(fixedRate = 600000)
を使用して、ジョブをトリガーし、その結果、タスクレットも 10 分 (600000 ミリ秒 = 600 秒 = 10 分) ごとにトリガーすることを期待していました。まず、return RepeatStatus.FINISHED
春のスケジューラが10分ごとに独立したスレッドをトリガーすることを理解していたので、使用してみました。実際、私が使用する場合return RepeatStatus.FINISHED
、プログラムをまったく終了します。つまり、春のスケジューラはジョブを再度呼び出しません。Spring Scheduler で何か間違った設定をしたのか、それともタスクレットについて間違った概念を持っているのかわかりません。経験則として、私が最近散りばめたものに基づいて、リーダーとライターの方法が必要ない場合、タスクレットが可能な代替手段であると考えています。あるフォルダーから別のフォルダーに 10 分ごとにファイルを移動するだけのバッチ プロセスを作成したいと考えています。ファイル処理はありません。TestScheduller.runJob
コンソール ログから、を実行したときに が 1 回呼び出されたことがわかりCommandLineJobRunner
ます。それから、私の最初の調査テストとして、私はに変更しましたreturn RepeatStatus.CONTINUABLE
その後、タスクレットが無限に実行されたことに気付きましたが、10 分ではなく、1 秒ごととしましょう。確かに、これは正しくありません。さらに、仕事はまったく終わりませんでした。だから、私の質問は次のとおりです。spring.schedulling で 10 分ごとに以下のジョブを呼び出すにはどうすればよいですか?
タスクレットを 10 分ごとにトリガーするために作成されたスケジューラー:
Java 構成クラス
Tasklet: public class HelloWorldTasklet は Tasklet を実装します {
コンソール ログ:
spring - フローに 2 つのステップがある Spring Batch。2 番目のステップが実行されず、最初のステップが無限ループにある理由
私の要件: バッチを定期的に呼び出すスケジューラを作成し、バッチ内で 2 つの手順が必要です。StepA が実行を開始し、結果に応じて StepB が呼び出されます。コンソール ログを見ると、stepA が数回、たとえばまったく同じタイミングで呼び出されていることがわかります。@Scheduled(fixedRate=60000) によると、1 分ごとに 1 つの呼び出しだけが必要です。スケジューリングを削除し、同様の問題に直面したため、この問題は Scheduller とは関係がないと思います。その他の関連する問題は、StepB が呼び出されないことです。customDecider ("...next(customDecider()") を作成し、JobExecutionDecider を返すプライベート メソッドを作成しようとしました。どちらもまったく効果がないようです。プール スレッドが原因であると推測されます。私がしなかったので、StepAのいくつかの「無限ループ」
BatchConfig.java
CustomDecider.java
CustomItemReaderB と CustomItemReaderB は Custom...A と同じで、log.info と return の間に A から B の文字に変わるだけです
コンソール ログ
スケジューラー
java - @Scheduled(cron ="Some String") で文字列を割り当てる
JSON/Zookeeper から取得するプロパティを指定するプロパティ ファイルがあります。
例:
SampleApp.properties 内で指定します
プロパティ ファイルを使用して @Scheduled アノテーション内でプロパティを割り当てる方法の例は多数あります。
しかし、このシナリオでは、
いくつかの Java クラスを使用してプロパティを読み取り (Name isなどConfig
) String cronExp=Config.get("CRONEXPRESSION") ;
、その cron を内部に配置する必要があり@Scheduled(cron = cronExp)
ます..これは可能ですか?
CRONEXPRESSION プロパティをプロパティ ファイルに直接移動することはできないことに注意してください。プロパティ ファイル内で json について説明します。コード内でその json を読み取り、そこからプロパティを選択します。
java - @Scheduled アノテーション/xml 構成のない Spring Schwduler
@Scheduled アノテーション /xml 構成を使用せずに、Spring スケジューラを使用してタスクをスケジュールする方法はありますか?
java - Spring の @Scheduled アノテーションをカスタム構成プロバイダーで使用できますか?
Spring の @Scheduled アノテーションの cron 構文機能を使用したいと考えています。ただし、Spring の PropertyPlaceholder 以外の構成プロバイダーから cron スケジュールをロードする必要があります。スケジューラが利用できるプロパティのカスタム プロバイダを使用することは可能ですか?
java - Spring @Scheduled がジョブをキューに入れないようにする方法
@Scheduled アノテーションを使用して、2 分ごとにコードを実行しています。ただし、私たちの仕事は長時間実行される傾向があります。私が理解しているように、 @Scheduled アノテーションは新しいジョブをキューに入れ、最初のジョブが完了するとすぐにそれらを実行します。私はこれが起こることを望んでいません。実行中のジョブのインスタンスを 1 つだけにして、キューに入れられたインスタンスをなくしたい。これどうやってするの?