Conexao nao fecha - POSTGRES

Boa tarde galera,

to com um problema aqui que esta me deixando louco!!!

tenho um programa que verifica se existe dados novos em um banco e atualiza o outro.

segue minha classe de conexao com os dois bancos…

BANCO 1

public class Conexao{
    private Connection conexao;
    Configuracao config = new Configuracao();
    public Conexao(){
        try{
            Class.forName("org.postgresql.Driver");
            String url = "jdbc:postgresql://"+config.getEndereco()+":"+config.getPorta()+"/";
            url += config.getBanco();
            conexao = DriverManager.getConnection(url,config.getUsuario(),config.getSenha());
        }catch(Exception erro){
            new log().grava("ERRO: Conexao() -> "+erro.getMessage());
        }
    }

    public Connection getConexao(){
        return conexao;
    }
}

e
BANCO 2

public class Conexao2 extends Conexao{
    private Connection conexao;
    public Conexao2(){
        try{
            Class.forName("org.postgresql.Driver");
            String url = "jdbc:postgresql://"+config.getEndereco2()+":"+config.getPorta2()+"/";
            url += config.getBanco2();
            conexao = DriverManager.getConnection(url,config.getUsuario2(),config.getSenha2());
        }catch(Exception erro){
            new log().grava("ERRO: Conexao() -> "+erro.getMessage());
        }
    }
    @Override
    public Connection getConexao(){
        return conexao;
    }

}

a questão é …
sempre que vou executar alguma instrução no banco, seja delete, update ou select, eu coloco sempre no try catch e no finally eu fecho a conexao…

exemplo:

    public void FuncaoDML(String sql,String posto) throws SQLException, Exception
    {
        Conexao con;
        if(posto.equals("MC 1"))
            con = new Conexao();
        else
            con = new Conexao2();
        try {
            PreparedStatement com = con.getConexao().prepareStatement(sql);
            com.executeUpdate();
        } catch (Exception e) {
            throw e;
        }
        finally
        {
            con.getConexao().close();
        }
    }

mas eu reparei que no servidor 2, ele abre e fecha a conexao perfeitamente. porem no servidor 1, algumas conexoes nao estao sendo fechadas e começam a se acumular até dar um
"FATAL: sorry, too many clients already". Rodando no debug, eu vi que as vezes ele passa pelo con.getConexao().close() mas nao fecha a conexao.

Alguem sabe o porque??

aguardo respostas…

Jean Gabriel

Feche o statement antes de fechar a conexão.

con.close();
con = null;

tentei as duas dicas e nenhuma resolveu!
pelo contrario, esta cada vez fechando menos as conexões.