跳转至

Java开发手册

本手册旨在于帮助Java开发人员快速熟悉系统技术架构与设计思想,以快速启动与运行后端服务。

软件安装

  • JDK1.8:参考官方文档安装并配置环境变量即可
  • maven:参考官方文档安装并配置环境变量即可
  • IDEA、Eclipse:参考官方文档安装即可
  • Zookeeper:参考官方文档安装即可

可选

  • MysqlRedisFastDFSMongoDBNginx

开发环境提供中间件配置使用,详见环境与配置管理

系统架构

业务生态

系统分层

  • client:终端层,目前主要是PC、APP、H5等
  • web-servercontroller层,提供rest接口,主要是对各类基本参数校验,或者不复用的业务简单处理等
  • service
  • 接口实现层,RPC服务提供者,具体的业务逻辑服务实现
  • DAO层,使用JOOQ框架与数据库产生数据交互
  • MQ消息生产者
  • api:接口层,所有的接口、实体类、公共常量在这里定义,也是其他模块服务依赖包
  • async-service
  • MQ消息消费层
  • 可以作为MQ消息生产者
  • 可以使用JOOQ框架与数据库产生数据交互

中间件

  • ZookeeperRPC服务注册中心
  • MQ:使用RabbitMQ作为消息中间件
  • Redis:系统缓存
  • FastDFS:系统文件存储
  • MongoDB:系统首页配置等场景使用的数据临时存储

配置与说明

Maven

点此下载 setting.xml

Web-server

  • FastDFSConfig:文件上传服务器
spring.fastdfs.* = xxx
  • MemberSecurityManager:单点安全认证实现类

  • RestfulConfig:校验器、参数解析器、异常处理器等配置

  • WebConfig:拦截器、过滤器、频次等校验配置

  • XxxPermissionQueryResolver:越权拦截处理器,详见越权解决方案

  • RPCClientConfig:RPC Consumer相关配置,在common-rpc包提供

dubbo.* = xxx

Service

  • RpcConfig:指定RPC服务注册扫描包

  • RPCServerConfig:注册RPC服务相关配置,在common-rpc包提供

dubbo.* = xxx
  • MessageConfig、RabbitAutoConfigurationRabbitMQ相关配置

spring.rabbitmq.* = xxx
- TransactionConfig、DataSourceAutoConfiguration: 数据库连接、JDBC事务管理器配置

spring.datasource.* = xxx
- CommonDaoConfig、schemadao与数据库schema配置

Async-service

  • MessageConfig: RabbitMQ相关配置,消费者队列绑定配置
spring.rabbitmq.* = xxx
  • 数据库相关配置:同service

  • RPCClientConfigRPC Consumer相关配置,在common-rpc包提供,同Web-server

通用

  • CacheConfig:缓存配置

spring.redis.* = xxx
spring.jedis.* = xxx
- MongoConfig: MongoDB相关配置

spring.data.mongodb.* = xxx

上述相关中间件服务配置开发环境提供给开发人员使用,详见环境与配置管理

启动工程

  1. 启动Zookeeper
  2. 启动服务

    • 用开发工具选择Maven方式导入工程

    • 运行CourseServiceMain.java启动xx-service服务,控制台看到如下信息表示启动成功

    Started XxxServiceMain in 18.411 seconds (JVM running for 22.131)
    
    • 运行CourseWebServerMain.java启动xx-web-server服务,控制台看到如下信息表示启动成功
      Started XxxWebServerMain in 19.027 seconds (JVM running for 20.428)
      

至此,后端工程已启动完成,可以使用YApi接口管理平台或者PostMan等工具进行接口测试。

MQ消息定义

  • 所有的消息都使用com.zxy.common.base.message.Message类发送与接收

  • 消息分类(type属性)

  • 所有的类型都是5位数, 从左到右定义如下,完整示例: 10101 为添加人员消息:

    • 第1位表示模块类别, 如: 人资模块为 1, 考试模块为2
    • 第2-3位表示业务类别, 如: 人员操作为 01, 部门操作为02
    • 第4-5位表示操作类别, 如: 添加人员为01, 修改人员为02
  • 消息头(headers属性)

  • headers属性是一些键值对, 键和值都是String类型
  • 一般用来存放消息相关的一些ID值

  • 消息体(payload属性)

  • payload属性可以用来传一些实体对象

  • 一般来说,这个属性是不设值的,若需要设值请在组内发起讨论,再确定是否需要设值

  • 消息定义方式

  • 每个模块的API项目中都应该有一个消息定义常量类

  • 把每个消息类型、 消息头的Key值都定义在里面,并在消息类型定义的注释里注明headerspayload

开发demo

详细开发指南请参考知学云Java开发demo