can't get index from columnLabel[数据库列名]
- mybatis中自定义查询语句使用select
*
,会有几率出现该异常场景,禁止使用select*
,使用哪些列,查询指定列名
本地调试其他环境
- 开启feign调试
- feign.debug.other.env.enable=true
调试指定环境 feign.gateway.profile:dev
指定环境网关配置: api-gateway.host.map:{dev:'http://internal.dev.op-api-gateway.wonder-link.net/'}
- feign.debug.other.env.enable=true
feignclient调用三方接口时404问题
- 因feign默认实现feign.httpclient.ApacheHttpClient存在问题,使用feign.httpclient.enabled=false配置关闭,使用client default execute即可
Rabbit 使用限制及延时场景下问题
- 目前业务使用阿里云Rabbit,自建Rabbit与云Rabbit有所不同
- 阿里云RabbitMQ,消息延时入死信场景,expiration 参数最大支持24小时,涉及延时场景需要配合job补偿,处理当天需要执行的内容(保证入队时延时时间不超过24小时)
- rabbitmq重试策略:因阿里云版本如指定时间内(5分钟/十分钟/半小时,不同版本不同时间)未收到ack应答,则重试一次,累计10次,需消费逻辑务必支持幂等
- 死信逻辑不同:自建Rabbit死信消息延迟需依赖rabbitmq-delayed-message-exchange(延时插件),详情请参考https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases
- 重试逻辑不同:自建为客户端控制重试,阿里云版本超时时间客户端无法控制,超时重试企业版(5分钟),专业版(60s),铂金版(30分钟),需保证消费逻辑幂等性
- 具体限制参考 https://help.aliyun.com/document_detail/101627.htm?spm=a2c4g.299123.0.0.63941a2ei0WRUU#concept-101627-zh
apollo服务配置无法覆盖公共配置
- application.properties文件中如果apollo://application(服务应用配置)配置覆盖公共配置,需把apollo://application放于spring.config.import的value最后位置
- 例如:spring.config.import=apollo://common.nacos,apollo://common.tomcat,apollo://common.db,apollo://application(最后位置)
服务中使用主库查询的方法,用于时效性较强的逻辑,但避免所有业务都使用主库,以下为查询主库的两种方式
- Service层方法添加事务注解@Transactional(rollbackFor = Exception.class),原则上如果没有增删改操作,不允许添加事务,且事务要控制到最小单元,避免提交大事务
使用sharding jdbc 提供能力添加主库,需保证数据库连接支持主从
try(HintManager hintManager=HintManager.getInstance()) { hintManager.setWriteRouteOnly(); //或者 hintManager.setDataSourceName("gotoneUserCenterMaster"); //gotoneUserCenterMaster为spring.shardingsphere.rules.readwrite-splitting.data-sources.gotoneUserCenterMasterSlave.props.write-data-source-name=gotoneUserCenterMaster MerchantMember merchantMember =merchantMemberMapper.selectById(id); }
MYSQL Varchar与INT或者Long比较时会产生截断或者隐式转换浮点类型比较的问题,禁止在MYSQL语句中使用数字与字符串比较
SELECT "1000200000006609400" =1000200000006609441 true SELECT "10002ABC" =10002 true
线上非页面展示场景下,使用mybatis分页接口count查询慢的问题处理
非必要场景下,类似导出场景或数据处理场景下,使用nextId方式获取分页数据,例如:第一页使用id>0获取10条,第二页使用第一页第十条id作为nextId,第二页使用id>nextid获取,以此类推,直至数据行获取<=0,则数据获取完成!