我需要在多个操作员中访问数据库。当前的解决方案是使用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();
}
}