質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.50%
Java

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

Spring

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

Q&A

1回答

1217閲覧

Javaで、環境変数を定数に代入したい

ky_iw

総合スコア0

Java

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

Spring

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

0グッド

0クリップ

投稿2022/04/13 01:06

Javaで、Spring フレームワークの@Retryableを使用して、リトライ処理を行おうとしています。

@Retryableはオプションで最大試行回数や、リトライ間隔を設定できますが、
それらは定数でなければなりません。

この、定数である最大試行回数やリトライ間隔を環境変数から取得したいのですが、
@Valueを使っても、定数に代入できませんでした。
(そもそも変数を定数に代入、という表現がおかしい気がしますが)

この場合、どう処理を書くのがよいでしょうか?
よろしくお願いいたします。

application.yml

1retryable: 2 max-attempt: 1 3 backoff: 5000

Java

1class Retry{ 2 3 // Retryableに指定するmaxAttemptは定数でなければならない 4 //→1が代入されない 5 @Value("${retryable.$max-attempt}") 6 private final maxAttempt = 5; 7 8 // Retryableに指定するbackoffは定数でなければならない 9 //→5000が代入されない 10 @Value("${retryable.backoff}") 11 private final maxAttempt = 1000; 12 13 // これらのオプションは定数である必要 14 @Retryable(value = {Exception.class}, 15 maxAttempts = MAX_ATTEMPT, 16 backoff = @Backoff(delay = BACKOFF)) 17 public void doRetry() { 18 //処理 19 } 20}

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

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

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

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

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

guest

回答1

0

初期値を設定してしまうとそちらが真になりそうに思います。
Autowiredするときと同じく、自前で初期値は入れません。

投稿2022/04/13 01:33

m.ts10806

総合スコア80765

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

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

ky_iw

2022/04/13 01:49

ご回答ありがとうございます。 ですが、定数なので、初期値を代入しなければならないのです。 (final修飾子がついた状態で初期値を設定しないとエラーになります。)
m.ts10806

2022/04/13 02:29 編集

final外すしかないですね。
Luice

2022/04/13 04:14 編集

valueアノテーションを使用する際に、デフォルト値を設定する場合は 以下のように記載できます。 @Value("${retryable.backoff:1000}") private maxAttempt ;
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問