由于CP没找到Cloud Foundry下NetCore的HANA连接方式,现在需要开发一个中间件来完成数据交互.看了官网的一些资料最终选择了Golang来开发
资料查阅
- SAP云平台入口
- HANA as a Service入门
- SAP HANA的介绍
- Go (golang) Application Programming
- HANA W3CSchool 教程
- Manifest.yml
提前准备
编写一个Hello World
package main
import (
"fmt"
)
func main() {
fmt.Println("Hello World!!")
}
直接推送go项目
# 登录CF
cf login -a https://xxx.xxx.com
Email:xxxx@xxx
Password: ????????
#服务器反馈
Authenticating...
OK
# 推送应用
cf push
#服务器反馈
...
Waiting for app to start..
...
state since cpu memory disk details
#0 running 2020-04-22T03:22:46Z 0.0% 4.1M of 1G 19M of 1G
SAP CP上应用程序后台日志如果可以看到Hello World!!的输出,就说明部署完成了
推送go打包的应用
需要创建一个Procfile
与 manifest.yml
与应用同目录
Procfile
web: ./Demo.out
manifest.yml
---
applications:
- name: gohana
memory: 1024M
instances: 1
path: .
command: ./Demo.out
再push就可以了
有兴趣的同学可以研究下 https://docs.cloudfoundry.org/buildpacks/
绑定HANA服务
开通一个 Schema计划的HANA服务 并且完成绑定实例
注意:如果开通hdi-shared服务,则会没有创建表权限.但是搭配WebIDE可以提高数据库的安全级别 WebIDE的入口在使用账号登陆后的首页
使用Go连接HANA
package sap
import (
"crypto/tls"
"database/sql"
"fmt"
"github.com/SAP/go-hdb/driver"
"log"
)
const (
HOST = "HOST"
PORT = "PORT"
USERNAME = "USERNAME"
PASSWORD = "PASSWORD"
SCHEMA = "SCHEMA"
)
func init() {
//SAP HANA 必须要求SSL连接数据库, 所以在地址后面要加上"?TLSInsecureSkipVerify"
db, err := sql.Open(driver.DriverName, fmt.Sprintf("%s://%s:%s@%s:%s", driver.DriverName, USERNAME, PASSWORD, HOST, PORT) + "?TLSInsecureSkipVerify")
if err != nil {
log.Fatal(err)
}
if err := db.Ping(); err != nil {
log.Fatal(err)
}
fmt.Println("SAP HANA 连接成功!")
//数据库和表关系
schema := driver.Identifier(SCHEMA)
table := driver.Identifier("accounts")
query := fmt.Sprintf("drop table %s.%s", schema, table)
if _, err := db.Exec(query); err != nil {
fmt.Println(query, "
", err)
}
query = fmt.Sprintf("CREATE TABLE %s.%s (ID INTEGER PRIMARY KEY, USERNAME VARCHAR(50))", schema, table)
if _, err := db.Exec(query); err != nil {
log.Fatal(query, "
", err)
}
query = fmt.Sprintf("INSERT INTO %s.%s values(1,'MR.XCHAN')", schema, table)
if _, err := db.Exec(query); err != nil {
log.Fatal(query, "
", err)
}
var id int
var username string
res := db.QueryRow(fmt.Sprintf("SELECT * FROM %s.%s LIMIT 1", schema, table))
res.Scan(&id, &username)
fmt.Println("id:", id, "username:", username)
}
之后就可以参考Demo打包发布到SAP CP平台上 :)