簡體   English   中英

如果提供給Jdbc類,則關閉數據源

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM