- 以下以 idea 为例,描述 tac 源码级别添加数据源步骤
git clone git@github.com:alibaba/tac.git
- 为了方便大家理解,demo 模块加了 demo 字样;
- 在这里我们添加天猫商品服务(当然是 mock 的)
package com.alibaba.tac.infrastracture.demo.itemcenter;
import org.springframework.stereotype.Service;
/**
*
*/
@Service
public class TmallItemService {
/**
* get a item
*
* @param id
* @return
*/
public ItemDO getItem(Long id) {
// mock data 这里可以进行PRC、HTTP 调用 和自己的业务系统交互
return new ItemDO(id, "A Song of Ice and Fire", "¥222.00");
}
}
mvn clean -Dmaven.test.skip=true package install
- 在 仍然以 tac-dev-source 为例 【注意】在新的 pom 文件中引入了刚刚打包的 jar 包 tac-custom-datasource-demo
- 实例代码
package com.alibaba.tac.biz.processor;
import com.alibaba.tac.sdk.common.TacResult;
import com.alibaba.tac.sdk.domain.Context;
import com.alibaba.tac.sdk.factory.TacInfrasFactory;
import com.alibaba.tac.sdk.handler.TacHandler;
import com.alibaba.tac.sdk.infrastracture.TacLogger;
import com.tmall.itemcenter.ItemDO;
import com.tmall.itemcenter.TmallItemService;
import java.util.HashMap;
import java.util.Map;
/**
* @author jinshuan.li
*/
public class HelloWorldTac implements TacHandler<Object> {
/**
* get the logger service
*/
private TacLogger tacLogger = TacInfrasFactory.getLogger();
private TmallItemService tmallItemService = TacInfrasFactory.getServiceBean(TmallItemService.class);
/**
* implement a class which implements TacHandler interface {@link TacHandler}
*
* @param context
* @return
* @throws Exception
*/
@Override
public TacResult<Object> execute(Context context) throws Exception {
// the code
tacLogger.info("Hello World22");
Map<String, Object> data = new HashMap<>();
data.put("name", "hellotac");
data.put("platform", "iPhone");
data.put("clientVersion", "7.0.2");
data.put("userName", "tac-userName");
ItemDO item = tmallItemService.getItem(1L);
data.put("item", item);
return TacResult.newResult(data);
}
}
- 在 tac-infrastructure 的 pom 文件中加入依赖 (理论上来说任意一个 pom 都行,保证在 classpath 里)
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>tac-custom-datasource-demo</artifactId>
<version>0.0.4-SNAPSHOT</version>
</dependency>
- 修改加载路径,让新的 bean 能改被加载
-
源码启动 console 参考
-
像打包 helloworld 一样打包新实例代码 mvn clean -Dmaven.test.skip=true package
-
正常预发布测试
- 为了实现对源码无侵入,tac 改造了 classloader 的顺序以支持从外部加载数据源的 jar 包;
- 只需将数据源 jar 包放入 extendlibs 中即可
- 运行 java -jar tac-console-0.0.4.jar --admin