# 控制台命令
## 介绍
0.4.1版本以上,框架支持了控制台任务支持,可以通过控制台任务完成脚本执行,配合调度器还可以实现定时任务功能。
## 使用说明
和 http 服务一样,控制台任务也有一个类似路由的方法进行任务注册。
通过 orange 脚手架创建的项目,控制台路由文件默认在 route/job.go 中声明。
控制台任务定义需要通过结构体实现 `app.JobSrv` 接口,即接口体中需要有 `func (s *Route) JobDispatch() ` 和 `func (s *Route) Register() ` 方法。
JobDispatch 方法中添加各类控制台任务的名称和具体方法的绑定,Register方法用于初始化启动自定义服务(可以共用http的Register方法),和 init 方法的区别是,Register方法在框架相关组件加载完成后再执行,避免了一些空指针的情况。
## 定义控制台任务
通过 `app.JobRun("任务名称", "绑定方法", "超时时间")` 方法对任务进行注册,具体如下:
```
func (s *Route) JobDispatch() {
// 注册一个任务
app.JobRun("showTime", controller.JobShowTime, 30*time.Second)
}
```
其中 `controller.JobShowTime` 是一个 `func(c *context.Context)error` 这样的方法,具体的业务可以放到该方法内。
## 控制台任务任务执行
定义好控制台任务后通过构建脚手架生成的 `job.go` 这个main函数带上 --jobRun 参数即可执行对应任务。
直接执行 `go run job.go --config=config/config.toml --jobRun=showTime` 即可运行注册的任务。
## 完整示例
将下面完整代码保持成 `job.go` 直接运行 `go run job.go --jobRun=showTime`
```
package main
import (
"demo9/http/controller"
"gitee.com/zhucheer/orange/app"
"time"
)
func main(){
router := &Route{}
app.AppStart(router)
}
type Route struct {
}
func (s *Route) JobDispatch() {
app.JobRun("showTime", controller.JobShowTime, 30*time.Second)
}
func (s *Route) Register() {
}
```