2017-08-29 12 views
0

私は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の方法で受信した文字列を返しています。これ以上何もない。あなたはこの正確な方法をスケジュールしようとした場合、事前

+1

アプリケーションで静的メソッドを使用することを控えてください。Springは、Springコンテナの依存性解決に基づいてアプリケーションを動作させるツールを豊富に用意しています。 –

答えて

0

この問題の解決策は非常に単純でした。私はちょうどjavascriptなどのページを更新する必要がありました。スケジューリングによってこれを行うことも可能かもしれません。

0

InformationProviderクラスで

おかげで、原因InformationProviderクラスに静的なクラスであることに、その可能性、実行時間

で更新することが必要最初に初期化されたときにデータを処理します。そのクラスで何が起こっているかを見ることなく、伝えるのは難しいです。私はむしろ、このオブジェクト、またはむしろキャッシュされたデータを読むことができるストレージからデータを読み込むサービスを@Scheduleします。

実際の問題については、さまざまなソースから取得してください。 @Scheduleはジョブの実行には適していますが、サーバーにデータをキャッシュする必要がない場合は避けてください。それが可能であれば、生きていて、いつも新鮮なデータにすることができます。

一般的に問題がある。 私はデータを取り出すことができます(キャッシュは速度が重要です)。スケジュールできるサービスがありますが、他のコントロールがあります。別のエンドポイントから強制的にリフレッシュし、サーバー側で変換し、モデルを介してページにストリームします。基本的な流れでなければなりません。

関連する問題