在每次调用中都会创建preparedstatement,因此会因负载而影响性能。因此,我需要确保preparedstatement应该在singleton类中准备一次,然后再次重用。如何做到这一点?有人能给我一个代码示例吗?
k5ifujac1#
最简单的情况是:
public class PrepStatementCache { private static ConcurrentHashMap<String, PreparedStatement> cache = new ConcurrentHashMap<>(); static PreparedStatement getStatement(Session session, final String query) { return cache.computeIfAbsent(query, q -> session.prepare(query)); } }
但由于map在计算过程中可能会被阻塞,因此实现该函数可能会更好 getStatement 具体如下:
getStatement
static PreparedStatement getStatement(Session session, final String query) { PreparedStatement preparedStatement = cache.get(query); if (preparedStatement == null) { preparedStatement = session.prepare(query); if (preparedStatement != null) { PreparedStatement p2 = cache.putIfAbsent(query, preparedStatement); preparedStatement = p2 == null ? preparedStatement : p2; } } return preparedStatement; }
但是要考虑到,对于java驱动程序4,这是自动完成的,因此如果您要启动新项目,那么最好使用它,因为它包含更多的功能。
1条答案
按热度按时间k5ifujac1#
最简单的情况是:
但由于map在计算过程中可能会被阻塞,因此实现该函数可能会更好
getStatement
具体如下:但是要考虑到,对于java驱动程序4,这是自动完成的,因此如果您要启动新项目,那么最好使用它,因为它包含更多的功能。