使用feign请求外部接口出现feign.FeignException: status 450 reading Idenauthen FeignClient

项目使用阿里身份证实名认证查询接口,采用Feign请求外部接口。请求时出现feign.FeignException: status 450错误,网上无此类错误记录。查看Feign打印日志,发现是传参问题,重新请求后问题解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目用到阿里的身份证接口:   身份证实名认证查询接口

我喜欢使用feign来请求项目外部的接口, 定义feign接口, feign设置headers的教程请参考(Spring 使用 feign时设置header信息):

@FeignClient(url = "${identity.host}",
        name="identity",
        fallbackFactory = IdenFallbackFactory.class,
        configuration = {FeignLogConfigurer.class}
)
public interface IdenauthenFeignClient {


    @RequestMapping(value = "/idenAuthentication",
            method = RequestMethod.POST,
            headers = {"Content-Type=application/x-www-form-urlencoded",
                    "charset=UTF-8",
                    "Authorization=APPCODE ${identity.appcode}"
    })
    String getIden(@RequestParam(value = "memberIdNo") String idNo, @RequestParam(value = "memberRealName") String name) throws Exception;
}

请求的时候就报了feign.FeignException: status 450 reading Idenauthen FeignClient错误, 网上没有这类错误出现, 我仔细看了一下feign打印日志:

x-ca-error-message: Required argument idNo : expect [type: String]

 发现传参问题有问题

@FeignClient(url = "${identity.host}",
        name="identity",
        fallbackFactory = IdenFallbackFactory.class,
        configuration = {FeignLogConfigurer.class}
)
public interface IdenauthenFeignClient {


    @RequestMapping(value = "/idenAuthentication",
            method = RequestMethod.POST,
            headers = {"Content-Type=application/x-www-form-urlencoded",
                    "charset=UTF-8",
                    "Authorization=APPCODE ${identity.appcode}"
    })
    String getIden(@RequestParam(value = "idNo") String idNo, @RequestParam(value = "name") String name) throws Exception;
}

再次请求一下, 搞定 

 

Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 数据库“Supcon”的事务日志已满,原因为“LOG_BACKUP”。 ; uncategorized SQLException; SQL state [S0002]; error code [9002]; 数据库“Supcon”的事务日志已满,原因为“LOG_BACKUP”。; nested exception is com.microsoft.sqlserver.jdbc.SQLServerException: 数据库“Supcon”的事务日志已满,原因为“LOG_BACKUP”。 at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:89) at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81) at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81) at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:88) Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: 数据库“Supcon”的事务日志已满,原因为“LOG_BACKUP”。 at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:262) feign.FeignException: status 400 reading TokenClient#refreshToken(String,Map) at feign.FeignException.errorStatus(FeignException.java:78) at com.supcon.supfusion.framework.cloud.rpc.feign.FeignExceptionErrorDecoder.decode(FeignExceptionErrorDecoder.java:34) feign.FeignException: status 400 reading TokenClient#refreshToken(String,Map) at feign.FeignException.errorStatus(FeignException.java:78) at com.supcon.supfusion.framework.cloud.rpc.feign.FeignExceptionErrorDecoder.decode(FeignExceptionErrorDecoder.java:34) feign.FeignException: status 400 reading TokenClient#refreshToken(String,Map) at feign.FeignException.errorStatus(FeignException.java:78) at com.supcon.supfusion.framework.cloud.rpc.feign.FeignExceptionErrorDecoder.decode(FeignExceptionErrorDecoder.java:34) feign.FeignException: status 400 reading TokenClient#refreshToken(String,Map) at feign.FeignException.errorStatus(FeignException.java:78) at com.supcon.supfusion.framework.cloud.rpc.feign.FeignExceptionErrorDecoder.decode(FeignExceptionErrorDecoder.java:34) feign.FeignException: status 400 reading TokenClient#refreshToken(String,Map) at feign.FeignException.errorStatus(FeignException.java:78) at com.supcon.supfusion.framework.cloud.rpc.feign.FeignExceptionErrorDecoder.decode(FeignExceptionErrorDecoder.java:34) feign.FeignException: status 400 reading TokenClient#refreshToken(String,Map) at feign.FeignException.errorStatus(FeignException.java:78) at com.supcon.supfusion.framework.cloud.rpc.feign.FeignExceptionErrorDecoder.decode(FeignExceptionErrorDecoder.java:34) feign.FeignException: status 400 reading TokenClient#refreshToken(String,Map) at feign.FeignException.errorStatus(FeignException.java:78) at com.supcon.supfusion.framework.cloud.rpc.feign.FeignExceptionErrorDecoder.decode(FeignExceptionErrorDecoder.java:34) feign.FeignException: status 400 reading TokenClient#refreshToken(String,Map) at feign.FeignException.errorStatus(FeignException.java:78) at com.supcon.supfusion.framework.cloud.rpc.feign.FeignExceptionErrorDecoder.decode(FeignExceptionErrorDecoder.java:34) feign.FeignException: status 400 reading TokenClient#refreshToken(String,Map) at feign.FeignException.errorStatus(FeignException.java:78) at com.supcon.supfusion.framework.cloud.rpc.feign.FeignExceptionErrorDecoder.decode(FeignExceptionErrorDecoder.java:34) feign.FeignException: status 400 reading TokenClient#refreshToken(String,Map) at feign.FeignException.errorStatus(FeignException.java:78) at com.supcon.supfusion.framework.cloud.rpc.feign.FeignExceptionErrorDecoder.decode(FeignExceptionErrorDecoder.java:34) feign.FeignException: status 400 reading TokenClient#refreshToken(String,Map) at feign.FeignException.errorStatus(FeignException.java:78) at com.supcon.supfusion.framework.cloud.rpc.feign.FeignExceptionErrorDecoder.decode(FeignExceptionErrorDecoder.java:34) feign.FeignException: status 400 reading TokenClient#refreshToken(String,Map) at feign.FeignException.errorStatus(FeignException.java:78) at com.supcon.supfusion.framework.cloud.rpc.feign.FeignExceptionErrorDecoder.decode(FeignExceptionErrorDecoder.java:34) feign.FeignException: status 400 reading TokenClient#refreshToken(String,Map) at feign.FeignException.errorStatus(FeignException.java:78) at com.supcon.supfusion.framework.cloud.rpc.feign.FeignExceptionErrorDecoder.decode(FeignExceptionErrorDecoder.java:34)
05-13
<think>好的,我现在需要帮助用户解决SQL Server数据库事务日志已满的问题,错误代码9002,原因是LOG_BACKUP。首先,我需要回忆一下之前提供的引用内容。引用[1]中提到,事务日志满可能是因为日志文件太多导致空间不足,解决方法是切换到简单恢复模式并收缩数据库。不过用户现在的情况是LOG_BACKUP,这可能和备份设置有关。 首先,LOG_BACKUP作为log_reuse_wait_desc的值,意味着日志备份尚未完成,导致日志无法重用。这可能是因为数据库处于完整或大容量日志恢复模式下,而事务日志备份没有被定期执行,导致日志累积。因此,解决方案需要围绕日志备份展开。 用户可能已经设置了完整恢复模式,但没有定期备份日志,导致日志文件不断增长。这时候,应该建议用户立即执行事务日志备份,以释放可重用的空间。如果用户不需要时间点恢复,可以考虑切换恢复模式到简单模式,这样SQL Server会自动截断日志,但会失去部分恢复能力。 另外,如果执行日志备份后问题依旧,可能需要检查是否有长时间运行的事务阻止日志截断。使用DBCC OPENTRAN查看是否有未提交的事务,或者是否有复制、镜像等操作导致日志保留。 还有可能需要手动收缩日志文件,但收缩前应先备份日志,否则可能无法有效释放空间。同时,需要注意频繁收缩可能导致性能问题,建议在必要时进行,并适当设置日志文件的初始大小和增长参数,避免频繁自动增长。 用户提到的数据库名称是Supcon,可能和应用相关,需确认是否有应用程序依赖特定的恢复模式。切换恢复模式可能影响备份策略,需要用户权衡数据恢复需求。 总结步骤应该是:1. 立即执行事务日志备份;2. 检查并处理长时间运行的事务;3. 考虑调整恢复模式并收缩日志;4. 定期维护备份策略。需要详细说明每个步骤的具体操作,并警告潜在影响,比如切换恢复模式会破坏日志链,需后续完整备份。</think>分步解决方案: 1. **立即执行事务日志备份** ```sql BACKUP LOG Supcon TO DISK = 'D:\Backup\Supcon_Log.bak' ``` 此时会释放可重用的日志空间[^1]。注意备份路径需有足够空间,建议使用SSMS的"备份日志"向导验证路径权限 2. **检查备份保留策略** 通过SSMS右键数据库 > 属性 > 事务日志传送,确认是否配置了日志传送但未正常执行。若使用第三方备份工具,需检查作业状态 3. **调整恢复模式(可选)** ```sql ALTER DATABASE Supcon SET RECOVERY SIMPLE ``` 这会自动截断日志,但会失去时间点恢复能力[^1]。适用于开发/测试环境,生产环境需谨慎 4. **收缩日志文件** ```sql DBCC SHRINKFILE(Supcon_log, 2048) -- 目标大小(MB) ``` 建议先执行步骤1再收缩。收缩后通过属性窗口重置日志文件的自动增长设置,推荐设置为每次增长256MB 5. **配置定期维护计划** - 创建每日完整备份作业 - 设置每小时事务日志备份(完整恢复模式下) - 启用SQL Server维护计划的"收缩数据库"任务 **补充说明:** - 若存在AlwaysOn可用性组,需检查同步状态:`SELECT synchronization_state_desc FROM sys.dm_hadr_database_replica_states` - 长时间事务检查:`DBCC OPENTRAN` 查看最早的活动事务 - 日志空间监控:`DBCC SQLPERF(LOGSPACE)`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值