我正在使用SpringBoot和SpringData与MongoDB。
这是一个带有@RestController
注释的REST服务。它调用另一个组件ChuckNorrisCommand
:
@Component
public class ChuckNorrisCommand extends AbstractCommand {
/**
* command name.
*/
private static final String CHUCK_COMMAND_NAME = "chuck";
/**
* repository to retrieve data form DB.
*/
@Autowired
private ChuckNorrisRepository chuckNorrisRepository;
/**
* repository to access gif from db.
*/
@Autowired
private ChuckNorrisGifRepository gifRepository;
/**
* main method for the command.
* @param request the request object that triggered the command
* @return a quote
*/
@Override
public final ResponseToSlack executeCommand(final SlackRequest request) {
final ChuckNorrisQuote chuckQuote = this.chuckNorrisRepository.findFirstByLastDisplayedDateIsNullOrderByRankAsc();
chuckQuote.setLastDisplayedDate(new Date());
this.chuckNorrisRepository.save(chuckQuote);
final List<ChuckNorrisGif> all = this.gifRepository.findAll();
final int randomIndex = (int)(Math.random() * (((all.size() - 1)) + 1));
final StringBuilder out = new StringBuilder();
out.append(chuckQuote.getQuote()).append(" <").append(all.get(randomIndex).getUrl()).append('>');
return new ResponseToSlack(ResponseTypeEnum.IN_CHANNEL, out.toString());
}
/**
* Command name.
* @return command name.
*/
@Override
public final String getName() {
return CHUCK_COMMAND_NAME;
}
/**
* Command description.
* @return command description.
*/
@Override
public final String getDescription() {
return "Get a very nice Chuck Norris quote and a gif to go with it.";
}
}
这是ChuckNorrisRepository
:
public interface ChuckNorrisRepository extends MongoRepository<ChuckNorrisQuote, ObjectId> {
ChuckNorrisQuote findFirstByLastDisplayedDateIsNullOrderByRankAsc();
}
我遇到的问题是ChuckNorrisRepository
。当我在本地测试时,每次调用服务都有预期的行为:我从MongoDB集合中获取一个新文档。
但是当在我的“生产”环境中部署时,需要2次调用该服务才能获得不同的文档。这是可重现的,它需要2次调用来获取新文档。
我激活了MongoDB连接器日志,我确实看到每个服务调用都执行了请求。由于文档已更新,我还能够检查集合是否已正确更新,因此对我而言,问题出在数据检索和数据呈现之间。
我注意到两个环境之间的主要区别(坦率地说,我不知道它为什么会这样)当我在计算机上启动SpringBoot可执行jar时,我最终得到一个只有一个的tomcat线程,但在生产中我有34个线程运行SpringBoot应用程序。
我真的处在一个我不知道在互联网上寻找什么以及测试什么的地方,以便更多地了解正在发生的事情。
感谢您的时间和智慧!
编辑:解决方法
我改变机制使用计数器而不是日期,现在它可以正常工作。 我可能应该把它报告给春天,因为我真的不知道发生了什么。