基础环境要求
系统:MacOS/Linux
基础软件: JDK8,Conda(Python 3.6+),MySQL (5.6)
发型包: app_runtime
可以通过如下方式下载:
wget http://download.mlsql.tech/app-runtime-1.0.0/app-runtime_2.11-1.0.0.jar
该发型包大概200M,需要点耐心。下载完后,配置下环境变量:
export APP_RUNTIME_JAR=/app-runtime_2.11-1.0.0.jar
首先,安装工具集:
pip install watchdog requests click uuid sfcli
接着新建项目,假设名字叫hello-wp
sfcli create --name hello-wp
如果需要web ui界面,则添加`--include_ui` 即可。这里我们不需要开发ui,所以没有配置。
使用idea/code IDE打开项目,比如:
idea hello-wp/
项目结构是这个样子的:
打开`tech.mlsql.app_runtime.example.action.ExampleAction`,你会发现已经有一个最简单的例子了。我们添加一个新的参数:
object ExampleAction {
object Params {
val ECHO = Input("echo", "")
val USER_NAME = Input("userName", "")
}
接着修改Action内容:
override def _run(params: Map[String, String]): String = {
JSONTool.toJsonStr(List(Map("value" -> s"Hello ${params(ExampleAction.Params.USER_NAME.name)}: ${params(ExampleAction.Params.ECHO.name)}")))
}
ExampleAction默认在`tech.mlsql.app_runtime.plugin.PluginDesc` 注册上了。现在我们可以测试下,在项目主目录开启编译:
sfcli compile --mvn mvn --dev
编译完成后可以在新窗口启动项目:
sfcli run --dev --mvn mvn
现在可以访问我们的接口了:
我们也可以web化我们的接口,安装插件:
sfcli plugin --add ar_runtime_web_console:1.0.0 --token c2b9e9ca-2308-4599-a395-1661f99a92ba
现在可以访问web页面了:
http://127.0.0.1:9007/ar_runtime_web_console/
进入我们的example 接口:
可以看到结果:
我们的第一个web应用就开发好了。
现在,我们希望添加数据库支持。web-platform需要你先在配置文件(config/application.yml)里配置一个元数据库,假设数据库名字叫basic_app_runtime,表结构如下:
CREATE TABLE `dict_store` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(256) DEFAULT NULL,
`value` text,
`dict_type` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8;
修改后的配置文件大概是这样的:
development:
datasources:
mysql:
host: 127.0.0.1
port: 3306
database: basic_app_runtime
username: xxxx
password: xxxxx
initialSize: 8
disable: false
removeAbandoned: true
testWhileIdle: true
removeAbandonedTimeout: 30
maxWait: 100
filters: stat,log4j
mongodb:
disable: true
redis:
disable: true
disable要设置为false,然后修改账号和密码。在终端重启我们的应用:
sfcli run --dev --mvn mvn
现在我们在数据库app_runtime_full(你可以随意取名字)创建一个表:
CREATE TABLE `example` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`echo` text,
`user_name` text,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
然后重新添加如下两个插件:
sfcli plugin --add app_runtime_with_db:1.0.0 --token c2b9e9ca-2308-4599-a395-1661f99a92ba
sfcli plugin --add ar_runtime_web_console:1.0.0 --token c2b9e9ca-2308-4599-a395-1661f99a92ba
然后通过web界面添加下数据库信息:
这样,我们的应用需要的数据库信息就被记录在元数据库里。
现在我们继续修改我们的代码,可以在 `package tech.mlsql.app_runtime.example.quill_model` 里添加一个case class,
case class Example(id:Int,echo:String,userName:String)
新增两行Import语句在ExampleAction中:
import tech.mlsql.app_runtime.example.PluginDB.ctx
import tech.mlsql.app_runtime.example.PluginDB.ctx._
然后可以使用ctx操作数据库了:
override def _run(params: Map[String, String]): String = {
val userName = params(ExampleAction.Params.USER_NAME.name)
val echo = params(ExampleAction.Params.ECHO.name)
ctx.run(ctx.query[Example].insert(_.userName -> lift(userName), _.echo -> lift(echo)))
JSONTool.toJsonStr(List(Map("value" -> s"Hello : ${params(ExampleAction.Params.ECHO.name)}")))
}
因为你修改了代码,系统会自动重启项目。你需要再重新执行下插件添加的动作:
sfcli plugin --add app_runtime_with_db:1.0.0 --token c2b9e9ca-2308-4599-a395-1661f99a92ba
sfcli plugin --add ar_runtime_web_console:1.0.0 --token c2b9e9ca-2308-4599-a395-1661f99a92ba
然后打开界面填写:
查看数据库:
已经正常入库了。