我需要一点建议。我需要关闭 DataSource,但是 FluentJdbc 一旦获得 DataSource 似乎我没有办法让它重新关闭。理想情况下,我希望将 DataSource 包装到 try() 块中,但在这种情况下,连接池会打开并立即关闭。
一种方法是将 DataSource 存储在哈希中,但似乎有点开销。
我有以下代码来存储多个连接:
public class FluentJdbcFactory {
private final static Logger logger = LoggerFactory.getLogger("Defrauder");
private final static Map<String, FluentJdbc> instances = new HashMap<>();
private static Properties get(String propertiesName) {
try (InputStream in = FluentJdbcFactory.class.getClassLoader().getResourceAsStream(propertiesName)) {
Properties p = new Properties();
p.load(in);
return p;
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public static FluentJdbc getInstance(String propertiesName) {
if (!instances.containsKey(propertiesName)) {
HikariDataSource ds = DatasourceConfig.setup(get(propertiesName));
instances.put(propertiesName, new FluentJdbcBuilder()
.connectionProvider(ds)
.defaultSqlHandler(() -> FluentJdbcFactory::isCriticalSqlException)
.build());
}
return instances.get(propertiesName);
}
public static void close() {
instances.forEach((k,v)->v.NON_EXISTANT_CLOSE_METHOD);
}
}
有什么我可以更聪明的吗?
我需要关闭
DataSource
,但FluentJdbc
一旦得到DataSource
似乎我没有办法让它重新关闭。
我不认为有一种聪明的方法可以做到这一点。FluentJdbc
API 中的假设是:
Datasource
.但愚蠢的方式是非常轻量级的。创建一个具有 DataSource 和 FluentJdbc 属性的类,并将该类的实例用作instances
地图中的值。也许 30 行简单的代码?
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句