2017-11-14 12 views
0

少し助言が必要です。私はDataSourceを終了する必要がありますが、FluentJdbcは一度DataSourceを取得すると、私はそれを閉じるための方法がないようです。理想的には、私はtry()ブロックにDataSourceをラップするのが大好きですが、その場合は接続プールが開かれ、すぐに閉じられます。Jdbcクラスにデータソースが提供されている場合は閉じる

ハッシュ内に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); 
    } 
} 

何でもそう賢く:

私は複数の接続を保存するためのコードを次がありますか?

答えて

0

私はDataSourceを閉じる必要がありますに来るが、FluentJdbcは一度DataSourceを取得し、私は閉じるために、それを取り戻すための方法を持っていないようです。

私はこれを行うにはスマートな方法はないと思います。それは、接続のライフサイクルの世話をする文とあなたがDatasourceのライフサイクルの世話をセット

  • を引き起こす

    • FluentJdbc APIでの仮定があることです。

    しかし、ダムの方法はかなり軽量です。 DataSourceとFluentJdbcの属性を持つクラスを作成し、そのクラスのインスタンスをinstancesマップの値として使用します。たぶん30行の単純なコードですか?

  • 関連する問題