Jump to content
Fórum Script Brasil
  • 0

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


Fabio Argenton

Question

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
        }
    },
};

 

Edited by Fabio Argenton
Resolvido
Link to comment
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...