java - Spring JPA没有从数据库中获取最新记录
问题描述
我有一个用用户的参考号更新数据库的方法,然后我有一个 Spring 重试机制来重试并检查用户的记录是否用参考号更新。但是重试调用不会从数据库中获取最新记录。我没有更新记录的问题,但只有获取,它没有获取最新的更新记录。
用户重试模板
@Component
public class UserRetryTemplate {
@Value("${retry.max.attempts:5}")
private int maxAttempts;
@Value("${response.waiting.time.in.seconds:60}")
private long maxDelay;
@Autowired
private UserRepository userRepository;
private static final long INITIAL_INTERVAL = 2000L;
public RetryTemplate retryTemplate() {
// Max timeout in milliseconds
long maxTimeout = maxDelay*1000;
//double multiplier = (maxTimeout - INITIAL_INTERVAL)/((maxAttempts-2)*6000);
SimpleRetryPolicy retryPolicy = new SimpleRetryPolicy();
retryPolicy.setMaxAttempts(maxAttempts);
FixedBackOffPolicy backOffPolicy = new FixedBackOffPolicy();
backOffPolicy.setBackOffPeriod(maxTimeout/(maxAttempts-1));
RetryTemplate template = new RetryTemplate();
template.setRetryPolicy(retryPolicy);
template.setBackOffPolicy(backOffPolicy);
return template;
}
public boolean doUserReferenceRetry(String userId) {
boolean isUserReferenceValid = true;
try {
boolean isValidUser = retryTemplate().execute(context -> {
logger.info("Attempted {} times", context.getRetryCount());
User user = userRepository.findByUserName(userId);
logger.info("User Retry :" + user);
if (user.getResponseDateItem() == null || user.getReferenceNumber == null) {
logger.info("response not yet received");
throw new IllegalStateException("User Response not yet received");
}
if (user.getReferenceNumber != null)) {
return true;
}
throw new IllegalStateException("Response not yet received");
});
return isUserReferenceValid ;
} catch (IllegalArgumentException e) {
}
return true;
}
}
用户存储库.java
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
User findByUserName(String userName);
}
UserManagerImpl
public void updateReference(String userId, String referenceNumber) {
User user = userRepository.findById(userId);
if (user != null) {
user.setReference(referenceNumber);
user.setResponseDate(DateHelper.createXMLGregorianCalendar());
userRepository.saveAndFlush(user);
}
}
队列在处理响应时更新数据库中用户的参考编号(工作正常)
用户队列客户端:
@Component
public class UserQueueClient {
@JmsListener(id = "#{T(java.util.UUID).nameUUIDFromBytes('${in.res}",
destination = "${in.res}", containerFactory = "containerFactory")
public void receive(Message message, UserEnvelopeV1_0 envelope) throws{
try {
String userId = envelope.getHeader().getMessageIdentification().getUserId();
ApplicationInformationStructure applicationInformation = envelope.getBody().getApplicationInformation();
if(CollectionUtils.isNotEmpty(applicationInformation.getApplicationInformationResult())) {
String referenceNumber = applicationInformation.getApplicationInformationResult().getRefNumber();
userManager.updateReference(userId, referenceNumber);
}
} catch (Exception e) {
//
}
}
}
所以还有其他更新参考号的过程,它工作正常,它用值更新数据库。但是读取(来自重试模板)不会获取更新的记录。
解决方案
推荐阅读
- sql - 在 BigQuery 中获取在同一天安装和卸载应用程序的用户以及卸载时间
- amazon-web-services - Fargate 服务的启动类型与容量提供者策略
- spring - 使用 spring-data-jdbc 和 spring-session-redis
- reactjs - 会话字段为无
- conditional-statements - 电力自动化向已在公司工作一个月的客户发送调查问卷?
- python - 层序的输入 0 与层不兼容:
- php - 在sql中显示类别
- java - 需要程序找到空间并将变量提取到空间的左侧和右侧并打印出来。我该怎么做?
- php - Wordpress - 从 apply_filters() 获取参数
- python - 正则表达式:无法在 jupyter notebook 中复制在另一个站点中完成的预期输出