Current implementation of JDBCOutputFormat has two potential problems:
1. The Connection was established when JDBCOutputFormat is opened, and will be used all the time. But if this connection lies idle for a long time, the database will force close the connection, thus errors may occur.
2. The flush() method is called when batchCount exceeds the threshold, but it is also called while snapshotting state. So two threads may modify upload and batchCount, but without synchronization.
We need fix these two problems to make JDBCOutputFormat more reliable.