小编Dan*_*aty的帖子

异步WS调用和控制器外的await()

有没有办法在控制器外部使用await()机制?

我不希望代码在控制器中进行异步调用,而是将该代码放在可由多个控制器重用的服务类中,但是,由于该方法受到保护,因此无法在控制器外调用等待.

例如在控制器中:

   ServiceClass service = new My ServiceClass();
   MyObject myObject= service.getMeAnObject();
   render(myObject);
Run Code Online (Sandbox Code Playgroud)

和服务类:

   public class ServiceClass
   {
      ...
      public MyObject getMeAnObject()
      {
         String url = "http://...";
         Promise<HttpResponse> promise = url(url).getAsync();

         // do something here similar to await in a controller
         // that suspends the code waiting for the response
         // to be retrieved

         HttpResponse response = promise.get();
         return buildMyObjectFromResponse(reponse);
      }
      ...
   }
Run Code Online (Sandbox Code Playgroud)

有没有办法实现这样的目标?

谢谢你的帮助.


编辑:我遵循Pere的建议,并使服务类实现Controller,但是它有效,必须增强使用它的控制器.我发现完成这项工作的唯一方法是至少在调用控制器类中调用await方法().

但是,我仍然没有验证代码实际上是暂停的.


编辑2:我从google小组获得的一个建议是我应该尝试在控制器中进行等待,所以也许更好的解决方案是让服务返回Promise并让控制器等待这个然后就没有了我的方式是todo吗?

例如在控制器中:

  ServiceClass service = new My ServiceClass(); 
  Promise<MyObject> promise = …
Run Code Online (Sandbox Code Playgroud)

playframework

8
推荐指数
1
解决办法
2242
查看次数

在测试中使用dev/prod和H2中​​的Mysql

使用play framework 2.1,我正在尝试找到两种不同数据库配置的最佳方法:

  • 一个基于mysql运行我的应用程序
  • 一个基于H2测试我的应用程序

虽然很容易做到这一点,但当我尝试两者时,我遇到了以下问题:

  1. 我不能拥有相同的数据库演变,因为即使在mysql模式下,也有一些特定于mysql的命令不能用于H2:这意味着两组演进和两个独立的数据库名称
  2. 我不确定如何覆盖主要的application.conf文件,另一个保留在测试模式下进行测试.我尝试(从命令行传递文件名或覆盖键)似乎是保留给prod模式.

我的问题:任何人都可以推荐一个好的方法来做两个(一直是mysql,只测试H2),而不会过度复杂地运行应用程序?谷歌没有帮助我.

谢谢你的帮助.

mysql playframework-2.0

5
推荐指数
2
解决办法
1362
查看次数

标签 统计

mysql ×1

playframework ×1

playframework-2.0 ×1