【问题标题】:Play framework and small app播放框架和小应用程序
【发布时间】:2015-12-17 02:50:01
【问题描述】:

我在 Scala 中有一个 Play 框架应用程序。它使用数据库,我需要在第一个应用程序启动之前将数据加载到数据库中。我想我可以在应用程序中添加一个带有主类的类,然后像play -main loadDataClass 一样启动它。它似乎正在工作,但一旦我访问Play.current.configuration,我需要它来访问数据库凭据。我收到此错误:

线程“main”java.lang.RuntimeException 中的异常:没有启动的应用程序

请建议如何实施。我应该以某种方式启动应用程序吗?

【问题讨论】:

    标签: scala playframework load main


    【解决方案1】:

    您需要创建一个模块来在启动时加载数据。在生产模式(activator start)它会在应用程序启动后运行,在开发模式(activator run)它会在第一次请求服务器后运行。

    创建模块

    app/modules/PrepareDatabaseModule.scala:
    

    在这个模块中

    package modules
    
    import com.google.inject.AbstractModule
    
    trait PrepareDatabase {}
    
    class PrepareDatabaseClass extends PrepareDatabase {
      initialize() 
      def initialize() = {
        // Load your data here
      }
    }
    
    class PrepareDatabaseModule extends AbstractModule {
      def configure() = {
        bind(classOf[PrepareDatabase])
          .to(classOf[PrepareDatabaseClass]).asEagerSingleton
      }
    }
    

    conf/application.conf中:

    play.modules.enabled += "modules.PrepareDatabaseModule"
    

    【讨论】:

    • 我想在使用我的应用程序之前调用代码。我想从命令行运行它。 Play 可以做到这一点,还是我应该为此制作一个单独的应用程序?
    • 你的场景对我来说听起来很奇怪。我会为此创建一个特殊的简单 java 应用程序,就像你描述的那样,使用 main 方法,并从 shell 脚本运行它,然后运行 ​​play。我仍然相信你的任务可以通过 play 插件解决。
    猜你喜欢
    • 2016-06-12
    • 1970-01-01
    • 2014-07-16
    • 2019-03-23
    • 1970-01-01
    • 1970-01-01
    • 2012-12-10
    • 2014-10-16
    • 1970-01-01
    相关资源
    最近更新 更多