我尝试在项目中使用 jooq,但出于性能原因,我想缓存查询。在性能考虑部分的用户手册中,提到了查询缓存,但没有关于如何实现它的示例。所以我尝试缓存一个查询(例如 SimpleSelectConditionStep),如下所示:
SimpleSelectConditionStep query = getFromPool();
if(query != null) {
factory.attach(query);
query.bind(1,"John");
} else {
// create query
factory.select(PERSON).where(PERSON.NAME.equal("Michael"));
}
// fetch and use query
result = query.fetchOne();
.....
putToPool(query);
我的软件是一个多线程 Web 应用程序,但可以保证两个不同的线程不能同时使用相同的查询(池在再次放入池之前不会返回相同的查询)。
我知道工厂不是线程安全对象,但我想知道在代码中使用这样的查询会导致问题吗?