2017-04-21 12 views
0

bootstrap.groovyとコントローラを使用する標準的な方法は、ブートストラップinit()のデータを作成してDBに保存することです。コントローラは、データ、したがって、2人の間の "中間の男"はデータベースです。grailsはデータベースをサポートしていないbootstrap.groovyのコントローラモデルを作成します

しかし、bootstrap.groovyでデータを作成し、データベースに保存しない場合(これらのデータは保存する必要はないものと仮定します)、データをコントローラに注入するにはどうすればよいですかビューのレンダリングに使用できますか?

ドメインクラスのブックで簡単な例を考えてみましょう。

class BootStrap { 

    def grailsApplication 

    def List<Book> books 

    def init = { servletContext -> 
     books = new ArrayList<>() 

     for (int i=0; i<100; i++) { 
      books.add(new Book(numPages: 20)) 
     } 

    } 

    def destroy = { 
    } 
} 

目標は/公開BookControllerへの本の彼のリストを注入することになりましたです:単にブートストラップに私はクレタ島に100冊のダミーリストをしたいです。 どうすればいいですか?私は簡単な方法や答えをどこにも見つけることができませんでした。

答えて

0

サービスはデフォルトでGrailsのシングルトンなので、そのデータをサービスに保存することができました。しかし、サービスは同時に使用できるので、注意する必要があります。

https://docs.grails.org/latest/guide/services.html

+0

に対処しようとしているシナリオを明確に願っていたが、その後私は、コントローラ内(既に初期化)サービスインスタンスが利用可能であると仮定し、bootstrap.groovyないでしょう。サービス内で軽量メソッドを呼び出す必要があればOKですが、I/O操作(この場合はjsonファイルの読み込み)を行うサービス内でメソッドを呼び出す必要がある場合、私はブートストラップのような場所を考えるでしょう。 Groovyはアプリケーション起動時に最適な場所であり、データがキャッシュされていればコントローラはそのサービスを使い始めることができます –

+0

あなたの問題を解決するための多くの正しい方法がありますが、もちろんあなた次第です。それはあなたのやり方です。少なくとも私にとってはすべて正しいです。また、データがロードされていれば(オンデマンドで)、データをロードせずにメモリに保存しておけば、サービスをチェックすることもできます。 – quindimildev

0

そのようなファイルやデータベースからキャッシュを初期化すると...私は一般的に、すべてのフレームワークは、初期化操作を実行する方法を持っている必要があります(quindimildevから答えを読んだ後)上記の投稿した問題を一般化しますか、サードパーティサービス。アプリケーションが起動した時点で、それらのデータはコントローラなどで使用できるようにメモリに格納されています。

私がgrailsで見た典型的なアプリケーション/例は、これを考慮に入れておらず、コントローラーアクションを介して読み込まれます。これはほとんどのアプリケーションでうまくいきますが、起動時にgrailsがキャッシュを構築するメカニズムを提供していない場合(1回の操作で数秒かかる可能性があります)、アプリケーションの起動後にすべてのコントローラが利用できるようになります。

は、私はこれは私が可能な解決策のように聞こえる

関連する問題