私はSpringにはかなり新しいですし、Spring Initializrを使って新しいプロジェクトを作成しました。私は構成.XMLsまたは同様の構成ファイルを持っていません。私はこのことを追い求めるためにtutorialを追跡しました。Spring MVCでモデルの属性を動的に更新する方法は?
私のコントローラクラスは、基本的には次のようになります。
@Controller
@Configuration
@EnableScheduling
public class IndexController {
@GetMapping("/")
public String index(Model m) {
m.addAttribute("Title", "New Website");
m.addAttribute("MenuOne", InformationProvider.getMenuOneLink());
m.addAttribute("MenuTwo", InformationProvider.getMenuTwoLink());
m.addAttribute("StaffNumber", InformationProvider.getNumberOfStaff());
m.addAttribute("Birthdays", InformationProvider.getBirthdaysOfToday());
return "dashboard";
}
}
これは正常に動作し、すべてのものは、することになっているものをやっています。残念ながら、InformationProviderクラスによってデータを取得している属性は、実行時に更新する必要があります。 InformationProviderはウェブ上のさまざまなAPIに近づいています。私の考えは、たとえば、10時間ごとにこれらのAPIからデータを取得したり、サイトの更新時に再度データを取得したりすることでした。
私の理解から、誰かがURL localhost:8080 /を入力するたびに私のメソッドが呼び出されるはずです。私の最初の考えは基本的に10時間後にサイトをリフレッシュすることでした。このメソッドは、サイトがリフレッシュされ、毎回 "ダッシュボード"を返しているときに呼び出されますが、値は更新されません。私の属性を更新するには、アプリケーションを再起動する必要があります。私は@予定された注釈を見ていましたが、戻り時間として無効であり、オブジェクトパラメータを持たないメソッドに対してのみ働いているので、これは本当に役に立ちません。だから、私のメソッドインデックスのスケジューリングはうまくいかず、とにかく行くのが間違った方法でしょう。
私はこのトピックに関して多くの問題を抱えていましたが、コントローラーメソッドのパラメーターとしてモデルを持ち、後でそれを更新したいというこの特定の問題の解決策を実際に見つけることはできませんでした。
この問題に最適なアプローチは何ですか?私はモデルクラスのJavaDocをチェックしていましたが、削除メソッドまたは更新メソッドは含まれていません。モデルの背後にあるHashMapに直接アプローチし、属性を更新するために既存のキーで属性を上書きする必要がありますか?
編集:
InformationProviderクラスについてより具体的には、それは基本的には、Javaから呼び出されcURLの方法で受信した文字列を返しています。これ以上何もない。あなたはこの正確な方法をスケジュールしようとした場合、事前
アプリケーションで静的メソッドを使用することを控えてください。Springは、Springコンテナの依存性解決に基づいてアプリケーションを動作させるツールを豊富に用意しています。 –