play框架的基本应用#1. 概述
目前kmdm项目中有java写的rest服务,今后不再扩展,将迁移到elemental中scala的play服务。
目前我觉得play框架有以下优点
1. 省代码:scala天然的便利性
2. 容易测试:测试用例很容易写
3. 容易部署: 热部署
2. 使用
2.1 配置文件
/conf/routes应用入口路由文件,所有的HTTP请求将通过该文件转发到指定的Scala对象处理。
/conf/application.conf 应用配置文件。
2.2 Filter
/app/Filter 用户认证、记录日志等过滤操作
2.3 控制层
/app/…/..controller 接收/conf/routes中的action请求,g并根据业务返回结果
2.4 启动项
/app/…/..server 可以debug启动,run启动需要删掉RUNNING_PID
2.5 测试用例
play框架测试用例非常简便,有三四行代码就可以完成一个简单的测试用例
class TestControllerSpec extends AbstractSpec {
"testController" should {
"POST /testPlus/2" in {
val request = FakeRequest(method = "POST", path = "/testPlus/2").withHeaders(("Accept", "*/*")).withFormUrlEncodedBody(("b", "3"))
implicit val timeout = Timeout(30, TimeUnit.SECONDS)
val resp = contentAsString(route(app, request).get)(timeout)
println(resp)
Json.parse(resp).as[JsObject].value.get("rst").get.as[Int] mustBe 5
}
}
2.6 部署
sbt projectName/dist 项目在/target/universal中,为zip格式
上传到服务器,参考z022.kmtongji.com/home/kmop/kmdm/elemental下的deloy.sh 和restart.sh重写脚本即可
deloy.sh
#!/bin/sh
time=`date +%Y%m%d-%H%M%S`
rm -rf elemental-datacenter-0.1.0-SNAPSHOT
mv lib.* Jar-Backup/
mv lib lib.$time
mv logs/log.log logs/log.log.$time
unzip elemental-authority-0.1.0-SNAPSHOT.zip
mkdir lib
cp elemental-authority-0.1.0-SNAPSHOT/lib/* lib/
cp elemental-authority-0.1.0-SNAPSHOT/conf/routes conf/
cp elemental-authority-0.1.0-SNAPSHOT/bin/* ./bin/
sh restart.sh
restart.sh
#!/bin/sh
#time=`date +%Y%m%d-%H%M%S`
#mv logs/log.log logs/log.log.$time
kill `cat RUNNING_PID`
nohup bin/elemental-authority &