大灾变前暴风城地图:Play framework 技巧记录 二(原创)

来源:百度文库 编辑:偶看新闻 时间:2024/04/28 01:52:44

Play framework 技巧记录 二(原创)  

2011-05-04 18:21:20|  分类: 程序、电脑 |  标签:play  framework  cron  conf   |字号 订阅

  • Play 中使用in做查询或删除等操作时,可采用如下方式(注意参数(?1),没1会报错,呵呵……):

    List ids = new ArrayList();
    ids.add(3L);
    ids.add(2L);
    List companys = Company.find("id in (?1)", ids).fetch();

  • 打包编译成war发布的命令:play war AppName --exclude app/controller:app/models -o e:/temp/app.war --zip
  • 使用play-scala,数据库文件为db/evolutions/1.sql, 2.sql...,奇怪为什么必须使用这样的文件名称,否则将无法创建数据库。
    • 原因Guillaume Bort 给出了回答:In my idea it's better to keep predictable file names for evolution and to add comments directly inside the sql script. Why? Because if 2 developers create both 2.sql scripts, it will force one developer to
      merge both during the 'git merge'. Then the merged 2.sql script will be detected as different by the evolutions engine, and it will apply OLD 2 DOWNS and NEW 2 UPS.
    • 大概意思是说使用预先设定好的文件名比较好些,因为如果两个程序员都创建了2.sql脚本的话,那么就需要合并两个文件,合并后的脚本将被evolutions的程序发现,并且加上“OLD 2 DOWNS and NEW 2 UPS”的语句。
  • 升级1.2.1后,定义计划执行的任务Jobs,如果配置在application.conf中,此时cron的语法出错的话,会出现Internal Error (check logs)的白屏页面,控制台也不报错,所以如果不知道的可能会很奇怪问题出在哪儿,仔细检查你的cron语法吧!
  • 如果你想某些任务在开发环境下不自动执行,而仅在发布环境下执行,可以参考以下写法:

    @Every("1h")
    public class MyJob extends Job {
    @Override
    public void doJob() {
    if (Play.mode == Play.Mode.DEV) return;
    // do your stuff here ...
    }
    }

    或者可以设置在application.conf中

    @Every("cron.myjob.period")
    public class MyJob extends Job {...}

    in conf/application.conf, you do
    cron.myjob.period=1000000d # default to run every one million days (practically never run it)
    %prod.cron.myjob.period=1h # in prod mode run every one hour