芋道快速开发平台学习笔记

1.接口文档配置

基础知识:SpringDoc注解的使用,它是基于OpenAPI 3和Swagger 3的现代化解决方案,相较于旧版的Swagger2即SpringFox,SpringDoc提供了更简洁、更直观的注解方式。

详见springboot集成springdoc-openapi(模拟前端请求)_springdoc-openapi-ui-优快云博客

doc文档配置类

修改公共参数

    /**
     * 构建 Tenant 租户编号请求头参数
     *
     * @return 多租户参数
     */
    private static Parameter buildTenantHeaderParameter() {
        return new Parameter()
                .name(HEADER_TENANT_ID) // header 名
                .description("租户编号") // 描述
                .in(String.valueOf(SecurityScheme.In.HEADER)) // 请求 header
                .schema(new IntegerSchema()._default(1L).name(HEADER_TENANT_ID).description("租户编号")); // 默认:使用租户编号为 1
    }

有个不算bug的buffer,浏览器不会默认勾选http请求头参数tenant-id,需要手动勾选,如果项目不需要,可以在配置中设置忽略该请求,application.yaml

tenant: # 多租户相关配置项 
   ignore-urls

统一参数在TenantSecurityWebFilter.java类拦截,

修改文档名称

配置信息在appplication.yaml 147行170行

可修改title,显示自己的文档名称

文档增加group的选项值

配置文档类中重点是下面这个代码,代码参考InfraWebConfiguration.java,复制一下改个名称就可以了

    /**
     * 所有模块的 API 分组
     */
    @Bean
    public GroupedOpenApi allGroupedOpenApi() {
        return buildGroupedOpenApi("all", "");
    }

2.Controller增加统一url前缀

WebProperties.java类实现,只要符合**.conroller.app.**的包路径就为/app-api

接口文档

对应代码中的tag

3.编写自己的逻辑

增加包扫描,修改YudaoServerApplication.java类@SpringbootApplication(scanBasePackages ...

增加数据库扫描

@MapperScan("cn.xxx.xxx.module.domestic.biz.dao")
@Configuration
public class MybatisPlusConfig 

4.Uni-app登录逻辑

本地短信登录debug发送验证码为9999,登录后前端将返回的值保存在header里的参数Authorization

必须登录则在controller上加入注解@PreAuthenticated,注解的实现类为PreAuthenticatedAspect.java。登录是将用户对象转换成string,使用key-value方式保存到redis中。

5.城市地区信息

城市地区信息保存在area.csv文件,启动时加载到内存,使用AreaUtils.java获取城市信息。AppAreaController

6.文件上传

/admin-api/infra/file/upload  

AppFileController

        6.1文件下载

                FileController

                在管理界面修改存储主配置

7.站内信息

NotifyMessageController

8.maven编译打包项目

如果打包不了,一定是maven版本不对,maven版本不能低于3.5.4,所以安装3.8版本的maven就可以了,具体安装方式如下:

(真保姆级)Mac系统Maven下载,配置环境变量,配置本地仓库、阿里云镜像_maven阿里云镜像-优快云博客

其次检查最外层的pom文件modules的引用是否正确,少引用了mavne会首先从本地服务器查找,本地缺失就会从服务器下载,下载不到就编译报错。

9.定时任务启用

① 导入 sql 目录下,对应数据库的 quartz.sql 文件,初始化 Quartz 表结构。

② 在 application-local.yaml (opens new window) 配置文件中,通过 spring.quartz 配置项,设置 Quartz 使用 MySQL 实现集群。考虑到 local 本地和 dev 测试环境使用相同的数据库,如果 local 也跑定时任务,可能会影响 dev 测试环境的执行。所以默认配置下,local 禁用了定时任务。

重要!!!如果你要开启 local 的定时任务,可以删除 - org.springframework.boot.autoconfigure.quartz.QuartzAutoConfiguration 那一行即可开启。

③ 启动项目后,调用 JobController 提供的 #syncJob() 接口,将 infra_job 表的任务同步到 Quartz 中。

SchedulerManager
YudaoQuartzAutoConfiguration

10多租户问题

url无需Header 必须带上 tenant-id,通过 yudao.tenant.ignore-urls 配置项,可以设置哪些 URL 无需带该请求头。

表无须添加多租户字段,需要添加表名到 yudao.tenant.ignore-tables 配置项目。

redis的多租户隔离方案:例如说,假设 Redis Key 是 user:%d,示例是 user:1024;对应到多租户 1 的 Redis Key 是 user:t1:1024

11websocket的使用

使用客户端连接 websocket在线测试  本地默认url ws://127.0.0.1:8080/ws?token=xxx

判断是否进行了连接请求,在OAuth2TokenServiceImpl.getAccessToken()方法上打断点,

未能连接可能错误:nginx未配置

发送消息处理类JsonWebSocketMessageHandler.handleTextMessage()

消息文本为{"type":"demo-message-send","content":"{\"toUserId\":null,\"text\":\"fsdfsd\"}"}

实现原理:基于Spring WebSocket实现

WebSocket 建立时,通过 QueryString 的 token 参数,进行认证。例如说:ws://127.0.0.1:48080/ws?token=xxx

认证完成后获取用户信息,使用WebSocketFrameworkUtils.getLoginUser();

会话WebSocketSession 的管理,由 WebSocketSessionManager (opens new window) 定义接口,由 WebSocketSessionManagerImpl (opens new window) 具体实现。

// 添加和移除 Session
void addSession(WebSocketSession session);
void removeSession(WebSocketSession session);

// 获得 Session,多种维度
WebSocketSession getSession(String id); // Session 编号
Collection<WebSocketSession> getSessionList(Integer userType); // 用户类型
Collection<WebSocketSession> getSessionList(Integer userType, Long userId); // 用户编号

Message .消息推送

① 项目的 WebSocketMessageSender (opens new window) 接口,定义了给 Session 发送消息的方法。如下所示:

// WebSocketMessageSender.java

// ① 发送消息给指定用户
void send(Integer userType, Long userId, String messageType, String messageContent);
default void sendObject(Integer userType, Long userId, String messageType, Object messageContent) {
    send(userType, userId, messageType, JsonUtils.toJsonString(messageContent));
}

// ② 发送消息给指定用户类型
void send(Integer userType, String messageType, String messageContent);
default void sendObject(Integer userType, String messageType, Object messageContent) {
    send(userType, messageType, JsonUtils.toJsonString(messageContent));
}

// ③ 发送消息给指定 Session
void send(String sessionId, String messageType, String messageContent);
default void sendObject(String sessionId, String messageType, Object messageContent) {
    send(sessionId, messageType, JsonUtils.toJsonString(messageContent));
}

前端代码 对应 /views/infra/websocket/index.vue

12.缺少数据库脚本

需要购买或自己根据类进行反向工程,有真需要的直接留言我发你反向好的。

13.微服务调用,feign调用

以保存文件为例,在调用的工程中找到RpcCofiguration类,添加FileApi.class

@Configuration(proxyBeanMethods = false)
@EnableFeignClients(clients = {FileApi.class}) // 如有多个可用,隔开添加 {FileApi.class,xxx.class}
public class RpcConfiguration {

}

然后在需要调用的类中添加以下代码

@Resource
    private FileApi fileApi;

这样就可以调用fileApi类的方法了。新增被调用的微服务,参考FileApi的写法。

14.支付回调

一般回调url为/trade/order/update-paid

15.一些小bug

A.充值不了,需要修改PayWalletRechargeServiceImpl.java类中的appid

B.订单创建报错,注释掉运费模板报错的代码

C.无法加载除基础模块外的其它模块,访问的时候出现404,修改二个pom,最外层的和youdao-server的pom

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值