Apache ServiceComb集成MyBatis使用GaussDB开源体验任务开发部署DEMO

举报
yd_283693074 发表于 2024/12/17 15:00:41 2024/12/17
【摘要】 开源For Huawei(https://developer.huaweicloud.com/programs/opensource/contributing/)通过和公司、高校、社区的开发者合作,完成鲲鹏、昇腾、欧拉、鸿蒙、高斯、云服务等与开源软件的适配开发,帮助繁荣Huawei的基础生态,同时让开源软件能够更加简单、高效的运行于华为云上。

Apache ServiceComb Fence是一个实现Open API规范的RPC框架,提供了配置管理、服务发现、动态路由、可观察性和服务治理功能,包含Java Chassis 3最佳实践的应用开发脚手架,可以帮助开发者快速构建包含微服务后端、微服务前端和基础原子服务的项目工程,Apache ServiceComb Fence项目遵循约定优于配置原则,定义了日志配置、Web配置、路由配置、代码结构等相关规范,以更加简洁的实现可观测性、过载防护等功能。

而本开源体验项目在开源For Huawei项目Open Source for Huawei(基于Apache ServiceComb Fence)
基础上进行接口开发,熟悉云原生应用的开发和部署,具体可以参考查看For Huawei项目Wiki

开源For Huawei主要由如下几个微服务组成:

  • edge-service: 微服务网关
  • authentication-server: 认证服务
  • resource-server: 资源服务
  • admin-service: 微服务管理服务
  • admin-website: 管理服务前端

开发前准备

  • 安装开发工具IDE、JDK17、MAVEN、GIT、ZOOKEEPER等(省略)、
  • Fork开源For Huawei项目Open Source for Huawei到自己仓库,并建立分支
  • 开发数据库: 本地Mysql或华为云GaussDB(推荐)

需求开发

  • 下载源码并导入:
    git clone https://gitcode.com/xxxx/OpenSourceForHuaweiDemoJava.git
    mvn clean install
    
  • 需求
    • 在resource-server中,集成MyBatis,并参考MyBatis的指南,开发一个数据库访问的示例,完成数据库的增、改、查操作;
    • 在resource-server中,开发一个REST服务,分别调用上述步骤中的增、改、查操作。
    • 项目架构如下图
      架构图
  • 执行脚本和实现需求
    • authentication-server依赖数据库,找到 src/resource/sql/user.sql,在数据库执行该初始化脚本
    • 分析需求新增T_USER_TEST表
      CREATE TABLE T_USER_TEST (
         ID SERIAL NOT NULL,
         USER_NAME VARCHAR(64) NOT NULL,
         AGE TINYINT NOT NULL,
         PRIMARY KEY (ID)
      );
      
    • 在resource-server增加依赖(可不添加mysql)
         <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.33</version>
          </dependency>
        
          <dependency>
            <groupId>org.opengauss</groupId>
            <artifactId>opengauss-jdbc</artifactId>
            <version>5.1.0-og</version>
          </dependency>
          <dependency>
              <groupId>org.projectlombok</groupId>
              <artifactId>lombok</artifactId>
              <version>1.18.22</version>
              <scope>provided</scope>
          </dependency>
      
    • resource-server\src\main\java\org\apache\servicecomb\fence\entity下创建实体User
        @Data
        public class User implements Serializable {
           private Long id;
           private String userName;
           private int age;
        }
      
    • resource-server\src\main\java\org\apache\servicecomb\fence\mapper下新建Mapper
        @Mapper
        public interface IUserMapper {
      
            @Insert("INSERT INTO T_USER_TEST(USER_NAME, AGE) VALUES (#{userName}, #{age})")
            @Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
            int save(User user);
      
            @Update("UPDATE T_USER_TEST SET USER_NAME = #{userName},age = #{age} WHERE id = #{id}")
            int update(User user);
      
            @Select("SELECT * FROM T_USER_TEST WHERE ID = #{id}")
            @Results(@Result(property = "userName", column = "USER_NAME"))
            User queryById(long id);
        }
      
    • resource-server-api\src\main\java\org\apache\servicecomb\fence\api\resource下新建UserService接口
        @RequestMapping(path = "/v1/user/method")
        public interface UserService {
      
            @RequestMapping(path = "/add", produces = MediaType.APPLICATION_JSON_VALUE)
            long addUser(@RequestParam(name = "userName") String userName, @RequestParam(name = "age") int age);
      
            @RequestMapping(path = "/update", produces = MediaType.APPLICATION_JSON_VALUE)
            boolean updateUser(@RequestParam(name = "id") long id, String userName, int age);
      
            @RequestMapping("/query/{id}")
            @ResponseBody
            String queryUser(@PathVariable long id);
        }
      
    • resource-server\src\main\java\org\apache\servicecomb\fence\resource下新建Endpoint实现
        @RestSchema(schemaId = "UserEndpoint", schemaInterface = UserService.class)
        public class UserEndpoint implements UserService {
      
        @Autowired
        IUserStoreService storeService;
      
        @Override
        public long addUser(String userName, int age) {
            User user = new User();
            user.setUserName(userName);
            user.setAge(age);
            long count = storeService.addUser(user);
            return count == 1 ? user.getId() : 0;
        }
      
        @Override
        public boolean updateUser(long id, String userName, int age) {
            User user = new User();
            user.setId(id);
            user.setUserName(userName);
            user.setAge(age);
            return storeService.updateUser(user);
        }
      
        @Override
        public String queryUser(long id) {
            User user = storeService.queryUser(id);
            return user == null ? "" : user.toString();
        }
      } 
      
    • resource-server中yaml文件中增加配置
        spring:
           datasource:
              url: ${DB_URL:jdbc:opengauss://ip:8000/数据库名称?currentSchema=Schema名称}
              username: ${DB_USERNAME:root}
              password: ${DB_PASSWORD:root}
              driver-class-name: org.opengauss.Driver
        mybatis:
           configuration:
              log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
              map-underscore-to-camel-case: true
      
  • 本地测试满足需求后提交代码仓库
    git commit -m "commit"
    git push
    

服务部署验证

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。