🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

1回答

3387閲覧

Spring @Scheduledが2回実行される。

goligoli

総合スコア6

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

0クリップ

投稿2019/10/25 02:06

前提・実現したいこと

Springのスケジューリング機能で定期実行を行いたいです。

発生している問題・エラーメッセージ

現在、@Scheduledを付与したメソッドが動くと処理内容が2回実行されます。

該当のソースコード

定期実行させるクラス

Java

1 2public class MyBean { 3 4 /// スネークケースをキャメルケースに変換お願いします。 5 /// javadocの記入で説明をお願いします。 6 //「秒 分 時 日 月 曜日 年」の順番で記述 7 @Scheduled(cron = "0 */1 * * * ? ") 8 public String test() { 9     //処理内容 1011

Java

1import org.springframework.context.annotation.Bean; 2import org.springframework.context.annotation.Configuration; 3import org.springframework.scheduling.annotation.EnableScheduling; 4 5import com.mvc.test.service.MyBean; 6 7@Configuration 8@EnableScheduling 9public class AppConfig { 10 11 @Bean 12 public MyBean bean() { 13 return new MyBean(); 14 } 15}

Java

1import org.springframework.context.annotation.AnnotationConfigApplicationContext; 2import org.springframework.context.support.AbstractApplicationContext; 3 4import com.mvc.test.config.AppConfig; 5 6///javadocの記入にて説明をお願いします。 7public class AppMain { 8 9 public void rel(){ 10 AbstractApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class); 11 } 12 13}

試したこと

処理内容にfor文が含まれているため、処理内容がおかしいと思い試しにfor文を消してSystem.out.println("タスクスタート!");で処理内容を変えたところ、for文がないのに2つ「タスクスタート!」が表示されたので、やはり@Scheduledがおかしいと思われます。

補足情報(FW/ツールのバージョンなど)

eclipse-Oxygen
Spring 4.3.21.RELEASE

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

通常のSpringの構成であれば2重に動作しません。

ところで、

java

1public void rel() { 2 AbstractApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class); 3}

と、

java

1@Configuration 2@EnableScheduling 3public class AppConfig { 4 5}

でSpringのコンテキストを重複して登録しているようなので、2重に動作しているのではないでしょうか?

以下で実装したところ2重では動作しませんので、アプリケーションの構成を再確認されては。

java

1import org.springframework.boot.SpringApplication; 2import org.springframework.boot.autoconfigure.SpringBootApplication; 3 4@SpringBootApplication 5public class SpringStandaloneAppApplication { 6 7 public static void main(String[] args) { 8 SpringApplication.run(SpringStandaloneAppApplication.class, args); 9 } 10 11}

java

1import org.springframework.context.annotation.Bean; 2import org.springframework.context.annotation.Configuration; 3import org.springframework.scheduling.annotation.EnableScheduling; 4 5import com.github.apz.model.MyBean; 6 7@Configuration 8@EnableScheduling 9public class ApplicationConfig { 10 @Bean 11 public MyBean bean() { 12 return new MyBean(); 13 } 14} 15
import org.springframework.scheduling.annotation.Scheduled; import lombok.extern.log4j.Log4j2; @Log4j2 public class MyBean { @Scheduled(cron = "0 */1 * * * ? ") public String test() { log.info("job started"); return "test"; } }

実行ログ

2019-10-25 11:36:00.003 INFO 22652 --- [ scheduling-1] com.github.apz.model.MyBean : job started 2019-10-25 11:37:00.001 INFO 22652 --- [ scheduling-1] com.github.apz.model.MyBean : job started 2019-10-25 11:38:00.001 INFO 22652 --- [ scheduling-1] com.github.apz.model.MyBean : job started 2019-10-25 11:39:00.001 INFO 22652 --- [ scheduling-1] com.github.apz.model.MyBean : job started 2019-10-25 11:40:00.002 INFO 22652 --- [ scheduling-1] com.github.apz.model.MyBean : job started 2019-10-25 11:41:00.000 INFO 22652 --- [ scheduling-1] com.github.apz.model.MyBean : job started 2019-10-25 11:42:00.002 INFO 22652 --- [ scheduling-1] com.github.apz.model.MyBean : job started 2019-10-25 11:43:00.002 INFO 22652 --- [ scheduling-1] com.github.apz.model.MyBean : job started

投稿2019/10/25 02:44

A-pZ

総合スコア12011

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問