Мне нужно получить доступ к базе данных в нескольких операторах. Текущее решение заключается в использовании AbstractRichFunction
и управлении жизненным циклом источника данных в методах open
и close
.
Вот мой код:
public class DbRichFunction extends AbstractRichFunction {
private final DbConfig dbConfig;
private transient DataSource dataSource;
public DbRichFunction(DbConfig dbConfig) {
this.dbConfig= dbConfig;
}
@Override
public void open(Configuration parameters) throws Exception {
dataSource = dbConfig.create();
}
@Override
public void close() throws Exception {
dataSource.close();
}
}
Это сэкономило бы ресурсы, если бы я мог совместно использовать один и тот же экземпляр кросс-задач (тот же оператор или нет) в том же jvm. Я не уверен, приведет ли это к утечке памяти, если я использую статическую переменную со счетчиком ссылок.
Вот что я хочу сделать:
public class DbRichFunction extends AbstractRichFunction {
private transient DataSource dataSource;
public DbRichFunction() {
}
@Override
public void open(Configuration parameters) throws Exception {
dataSource = DbConfig.acquire();
}
@Override
public void close() throws Exception {
DbConfig.release();
}
}