Ir para conteúdo
Fórum Script Brasil
  • 0

RESOLVIDO: Conexão simultânea ao Oracle (Uma página derrubando outra)


Fabio Argenton

Pergunta

Solução:

Abaixo trechos relevantes do meu código.

arquivo configOracle.js é onde tenho a string de conexão:

const oracledb = require('oracledb');

let pool; // Declare a variável do pool fora da função

async function initializePool() {
    pool = await oracledb.createPool({
        user: 'meu_user', // seu usuário
        password: 'minha_senha', // sua senha
        connectString: '//172.17.0.21:1523/SPW', // string de conexão
        poolMin: 10, // mínimo de conexões
        poolMax: 20, // máximo de conexões
        poolIncrement: 5, // número de conexões a serem criadas quando necessário
    });
    console.log('Pool de conexões criado com sucesso.');
}

const configOracle = {
    getConnectionWithRetry: async (retries = 5) => {
        for (let i = 0; i < retries; i++) {
            try {
                const connection = await pool.getConnection(); // Obtém uma conexão do pool
                return connection;
            } catch (err) {
                console.error(`Erro ao obter a conexão do Oracle (tentativa ${i + 1}/${retries}):`, err);
                if (i === retries - 1) throw err; // Lança o erro após esgotar as tentativas
                await new Promise(resolve => setTimeout(resolve, 1000)); // Aguarda 1 segundo antes da próxima tentativa
            }
        }
    },

    getConnection: async () => {
        return configOracle.getConnectionWithRetry(); // Apenas reutiliza a função de retry
    },

    closeConnection: async (connection) => {
        if (connection) {
            try {
                await connection.close(); // Fecha a conexão, retornando-a ao pool
                console.log('Conexão Oracle fechada com sucesso.');
            } catch (err) {
                console.error('Erro ao fechar a conexão Oracle:', err);
                throw err;
            }
        }
    }
};


// Chame a função de inicialização do pool
initializePool().catch(err => {
    console.error('Erro ao inicializar o pool de conexões:', err);
});

module.exports = configOracle;

Nos arquivos que renderizam as páginas tenho o seguinte (somente trecho relevantes):

// Conexão Oracle
const DBOracle = require('../listas/selectsOracle');
const configOracle = require('../../database/configOracle'); // Atualizado para o novo configOracle

const FUNCOES = require('../util/funcoes');
const moment = require('moment');

module.exports = {
    pageDASHProducao: async (req, res) => {
        const connection = await configOracle.getConnection();

        try {

            // Passar a conexão para a classe DBModelOracle
            let DBModelOracle = new DBOracle(connection);
.
.
.

e ao final quando carrega a página, fecha a conexão:

.
.
.
});
        } catch (err) {
            console.error('Erro ao conectar ao banco de dados:', err);
            res.status(500).send('Erro interno no servidor');
        } finally {
            // Fechando a conexão individual
            await configOracle.closeConnection(connection); // Fecha a conexão após o uso
        }
    },
};

 

Editado por Fabio Argenton
Resolvido
Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...