2017-04-21 59 views
0

据我所知,使用bootstrap.groovy和控制器的标准方法是创建数据并将它们保存到引导程序init()中的数据库() 控制器可以读取数据,所以两者之间的“中间人”就是数据库。grails从bootstrap.groovy填充控制器模型没有数据库支持

但是,如果我想在bootstrap.groovy中创建数据而不将它们保存到数据库中(假设这些数据不需要保存),如何将数据注入控制器以便它们可以用于视图渲染?

让我们与域类Book一个简单的例子。只需在引导我只想克里特岛的100本书的虚拟目录:

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的。 我该怎么做?我无法找到一个简单的方法或答案这个

回答

0

服务的任何地方都是单身的Grails默认情况下,所以你可以存储在服务数据。但是你必须小心,因为服务可以同时使用。

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

+0

这听起来像一个可能的解决方案,但后来我将承担服务实例可用(已初始化)控制器内,而不是BootStrap.groovy中。这可能是确定的,如果您需要调用服务中的轻量级方法,但如果我需要,做I/O操作(读在这种情况下JSON文件)服务中调用一个方法,我觉得像引导的地方。 groovy是最好的地方(在应用程序启动时),一旦数据被缓存,服务和控制器就可以开始使用它们 –

+0

解决你的问题有很多正确的方法,当然这取决于你。这取决于你如何去做,至少对我而言都是正确的。你也可以检查的服务,如果该数据已经被加载(需求),如果没有加载数据,并将其保存在内存中。 – quindimildev

0

为了推广我已经发布了上述问题(阅读答案之后,从quindimildev)一般每隔框架应具有执行初始化操作...如文件或数据库或初始化缓存的方式第三方服务。由当时的应用程序已启动这些数据在内存中准备由控制器一起使用,等等

的典型应用/例子我已经看到了Grails的不考虑到这一点,他们认为你的数据库通过控制器动作来填充和读取。这是适用于大多数应用程序,但我会很惊讶,如果Grails的不提供一种机制来建立在启动时高速缓存(一次性操作,可能需要几秒钟),可以提供给所有控制器,一旦应用程序已启动。

我希望这个澄清我试图解决