[英]Closing DataSource if supplied to Jdbc class
我需要一點建議。 我需要關閉DataSource,但是FluentJdbc一旦獲得DataSource,似乎我沒有辦法將其恢復為關閉狀態。 理想情況下,我希望將DataSource包裝到try()塊中,但是在那種情況下,連接池是打開的並且立即關閉。
一種方法是將數據源存儲在哈希中,但似乎有些開銷。
我有以下代碼來存儲多個連接:
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條簡單的代碼行?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.