Как поделиться кросс-флинк-операторами JDBC DataSource? - PullRequest
0 голосов
/ 14 мая 2019

Мне нужно получить доступ к базе данных в нескольких операторах. Текущее решение заключается в использовании 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();
    }
}
...