Table des matières
1. Pool de connexion à la base de données
. 2. Utilisez le package jar utilisé par tomcat-dbcp
3 Configurations utilisées
4. Quelques pièges rencontrés
Maison base de données tutoriel mysql Configuration du pool de connexions à la base de données Tomcat-dbcp et quelques pièges lors de son utilisation

Configuration du pool de connexions à la base de données Tomcat-dbcp et quelques pièges lors de son utilisation

Mar 02, 2017 pm 04:44 PM

1. Pool de connexion à la base de données

Lors du développement, il est souvent nécessaire d'effectuer certaines opérations sur la base de données, telles que des ajouts, suppressions, modifications et requêtes courants. les données sont petites, elles peuvent être exploitées directement, mais lorsque la quantité de données augmente, chaque connexion et libération de la base de données prendra un certain temps. À ce stade, le pool de connexions à la base de données peut être utilisé pour maintenir le lien avec la base de données. réduire la surcharge causée par la connexion à la base de données sur le programme, et cela peut réduire la pression sur la base de données, alors qu'est-ce que le pool de connexion à la base de données ? Comme son nom l'indique, il s'agit d'un étang. Ce qui est placé dans l'étang est un lien vers la base de données. Par exemple, un étang à poissons est un étang pour élever du poisson, vous pouvez le pêcher directement. Vous n'avez pas besoin d'acheter des alevins et d'élever du poisson vous-même. La base de données Le pool de connexions est utilisé pour stocker les liens vers la base de données. Lorsqu'ils sont utilisés, vous pouvez les récupérer directement. Après utilisation, vous pouvez les mettre. retour dans le pool. Puisque vous utilisez cette chose, nous n'avons pas besoin d'écrire le code nous-mêmes. Certains pools de connexion open source peuvent être utilisés directement, c3p0, dbcp et proxool. Je n'ai jamais utilisé c3p0 et proxool, c'est simple, j'ai utilisé le pool dbcp, je vais parler ici de la façon d'utiliser le pool de connexion à la base de données dbcp et de quelques pièges rencontrés lors de son utilisation

Figure 1, avant d'utiliser le pool de connexion



Figure 2 Après avoir utilisé le pool de connexion

Comme le montre la figure 1 ci-dessus, avant d'utiliser le pool de connexion, vous devez Un lien est établi avec la base de données à chaque fois et doit être libéré à tout moment. Lorsque la quantité de données est importante, la connexion à la base de données nécessite beaucoup de temps système. et l'accès et la libération fréquents de la base de données exerceront également beaucoup de pression sur la base de données. La figure 2 montre qu'après avoir utilisé le pool de connexions à la base de données, tous les liens sont placés dans le pool sans les libérer. Lorsqu'ils sont utilisés, ils sont directement extraits. le pool et remis dans le pool après utilisation. Le pool maintient des liens longs vers la base de données, si le lien est déconnecté, il se reconnectera automatiquement si la connexion n'est pas suffisante, les utilisateurs suivants devront attendre

. 2. Utilisez le package jar utilisé par tomcat-dbcp

contient tomcat-dbcp.jar Voilà, le reste sont quelques packages de base

3 Configurations utilisées

dbname.Driver=com.mysql.jdbc.Driver
dbname.Url=jdbc:mysql://<your ip>/<your dbname>?useUnicode=true&characterEncoding=UTF-8
&autoReconnect=true&failOverReadOnly=false&maxReconnects=10&autoReconnectForPools=true&zeroDateTimeBehavior=convertToNull&connectTimeout=3000
dbname.Username=<your username>
dbname.Password=<your password>
dbname.InitialSize=15
dbname.MinIdle=10
dbname.MaxIdle=20
dbname.MaxWait=5000
dbname.MaxActive=20
dbname.validationQuery=select 1
Copier après la connexion
<🎜. >Ces configurations doivent uniquement être placées dans .properties, à propos de la signification de chaque


où le pilote, l'URL, le nom d'utilisateur et le mot de passe sont des configurations de connexion à la base de données courantes


InitialSize为初始化建立的连接数
Copier après la connexion
minidle为数据库连接池中保持的最少的空闲的链接数
Copier après la connexion
maxidle数据库连接池中保持的最大的连接数
Copier après la connexion
maxwait等待数据库连接池分配连接的最长时间,超出之后报错
Copier après la connexion
maxactivite最大的活动链接数,如果是多线程可以设置为超出多线程个数个链接数
Copier après la connexion
<pre name="code" class="java">validationQuery测试是否连接是有效的sql语句
Copier après la connexion
3. Code du pool de connexion

public abstract class DB {

    private static HashMap<String, DataSource> dsTable = new HashMap<String, DataSource>();//此处记得用static
    private BasicDataSource ds;
    private PreparedStatement stmt = null;

    private DataSource getDataSource(String n) {
        if (dsTable.containsKey(n)) {
            return dsTable.get(n);//如果不同的数据库,多个连接池
        } else {
        	synchronized (dsTable) {
        		ds = new BasicDataSource();
                ds.setDriverClassName(DBConfig.getString("db", n.concat(".Driver")));//将<yourname>.properties的值读进来
                ds.setUrl(DBConfig.getString("db", n.concat(".Url")));
                ds.setUsername(DBConfig.getString("db", n.concat(".Username")));
                ds.setPassword(DBConfig.getString("db", n.concat(".Password")));
                ds.setInitialSize(DBConfig.getInteger("db", n.concat(".InitialSize")));
                ds.setMinIdle(DBConfig.getInteger("db", n.concat(".MinIdle")));
                ds.setMaxIdle(DBConfig.getInteger("db", n.concat(".MaxIdle")));
                ds.setMaxWait(DBConfig.getInteger("db", n.concat(".MaxWait")));
                ds.setMaxActive(DBConfig.getInteger("db", n.concat(".MaxActive")));
                ds.setValidationQuery(DBConfig.getString("db", n.concat(".validationQuery")));
                dsTable.put(n, ds);

                return ds;
			}
        }
    }

    protected Connection conn;

    public boolean open() throws SQLException {
    	BasicDataSource bds=(BasicDataSource)this.getDataSource(this.getConnectionName());
    	System.out.println("connection_number:"+bds.getNumActive()+"dsTable:"+dsTable);
        this.conn = this.getDataSource(this.getConnectionName()).getConnection();
        return true;
    }

    public void close() throws SQLException {
    	
        if (this.conn != null)
            this.conn.close();
    }

    protected abstract String getConnectionName();//此函数可以根据自己的需求,将数据库的名字传进来即可

    public void prepareStatement(String sql) throws SQLException {
        this.stmt = this.conn.prepareStatement(sql);
    }

    public void setObject(int index, Object value, int type) throws SQLException {
        this.stmt.setObject(index, value, type);
    }

    public void setObject(int index, Object value) throws SQLException {
        this.stmt.setObject(index, value);
    }

    public int execute() throws SQLException {
        return this.stmt.executeUpdate();
    }
}
Copier après la connexion
Ce qui précède est le code utilisé lors de l'utilisation du pool de threads. Il ne donne qu'une manière approximative de l'écrire, la partie DBDAO spécifique doit être implémentée par vous-même en fonction de vos propres besoins, telles que le traitement par lots, les requêtes, la mise à jour et d'autres fonctions. modifié en fonction de vos besoins personnels Alors comment juger si le lien que vous créez est ce que vous souhaitez ? Il existe deux façons de vérifier

1. Créer une base de données vide et vérifier le nombre de liens

2. Vérifier le nombre de liens sous Linux

et obtenir l'identifiant du processus

. 🎜>
ps aux|grep <your java name>
Copier après la connexion

Afficher les liens vers la base de données de liens

netstat -apn|grep <your processid>
Copier après la connexion

Vous pouvez voir le nombre spécifique de liens pour vérifier si votre pool de liens est correct


4. Quelques pièges rencontrés

Comme il est utilisé sous forme multithread, le piège le plus important rencontré est l'utilisation du statique, car je ne le connais pas trop, ne pas utiliser static, chaque thread établissait un pool de connexions à la base de données et une erreur « trop de fichiers ouverts » s'est produite en raison de la non-utilisation de static dans le pool de threads.

Ce qui précède est la configuration du pool de connexion à la base de données Tomcat-dbcp et quelques pièges lors de son utilisation. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !


Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment le langage Go implémente-t-il les opérations d'ajout, de suppression, de modification et de requête de la base de données ? Comment le langage Go implémente-t-il les opérations d'ajout, de suppression, de modification et de requête de la base de données ? Mar 27, 2024 pm 09:39 PM

Le langage Go est un langage de programmation efficace, concis et facile à apprendre. Il est privilégié par les développeurs en raison de ses avantages en programmation simultanée et en programmation réseau. Dans le développement réel, les opérations de base de données font partie intégrante. Cet article explique comment utiliser le langage Go pour implémenter les opérations d'ajout, de suppression, de modification et de requête de base de données. Dans le langage Go, nous utilisons généralement des bibliothèques tierces pour faire fonctionner les bases de données, telles que les packages SQL couramment utilisés, gorm, etc. Ici, nous prenons le package SQL comme exemple pour présenter comment implémenter les opérations d'ajout, de suppression, de modification et de requête de la base de données. Supposons que nous utilisons une base de données MySQL.

iOS 18 ajoute une nouvelle fonction d'album 'Récupéré' pour récupérer les photos perdues ou endommagées iOS 18 ajoute une nouvelle fonction d'album 'Récupéré' pour récupérer les photos perdues ou endommagées Jul 18, 2024 am 05:48 AM

Les dernières versions d'Apple des systèmes iOS18, iPadOS18 et macOS Sequoia ont ajouté une fonctionnalité importante à l'application Photos, conçue pour aider les utilisateurs à récupérer facilement des photos et des vidéos perdues ou endommagées pour diverses raisons. La nouvelle fonctionnalité introduit un album appelé "Récupéré" dans la section Outils de l'application Photos qui apparaîtra automatiquement lorsqu'un utilisateur a des photos ou des vidéos sur son appareil qui ne font pas partie de sa photothèque. L'émergence de l'album « Récupéré » offre une solution aux photos et vidéos perdues en raison d'une corruption de la base de données, d'une application d'appareil photo qui n'enregistre pas correctement dans la photothèque ou d'une application tierce gérant la photothèque. Les utilisateurs n'ont besoin que de quelques étapes simples

Comment Hibernate implémente-t-il le mappage polymorphe ? Comment Hibernate implémente-t-il le mappage polymorphe ? Apr 17, 2024 pm 12:09 PM

Le mappage polymorphe Hibernate peut mapper les classes héritées à la base de données et fournit les types de mappage suivants : join-subclass : crée une table séparée pour la sous-classe, incluant toutes les colonnes de la classe parent. table par classe : créez une table distincte pour les sous-classes, contenant uniquement des colonnes spécifiques aux sous-classes. union-subclass : similaire à join-subclass, mais la table de classe parent réunit toutes les colonnes de la sous-classe.

Tutoriel détaillé sur l'établissement d'une connexion à une base de données à l'aide de MySQLi en PHP Tutoriel détaillé sur l'établissement d'une connexion à une base de données à l'aide de MySQLi en PHP Jun 04, 2024 pm 01:42 PM

Comment utiliser MySQLi pour établir une connexion à une base de données en PHP : Inclure l'extension MySQLi (require_once) Créer une fonction de connexion (functionconnect_to_db) Appeler la fonction de connexion ($conn=connect_to_db()) Exécuter une requête ($result=$conn->query()) Fermer connexion ( $conn->close())

Une analyse approfondie de la façon dont HTML lit la base de données Une analyse approfondie de la façon dont HTML lit la base de données Apr 09, 2024 pm 12:36 PM

HTML ne peut pas lire directement la base de données, mais cela peut être réalisé via JavaScript et AJAX. Les étapes comprennent l'établissement d'une connexion à la base de données, l'envoi d'une requête, le traitement de la réponse et la mise à jour de la page. Cet article fournit un exemple pratique d'utilisation de JavaScript, AJAX et PHP pour lire les données d'une base de données MySQL, montrant comment afficher dynamiquement les résultats d'une requête dans une page HTML. Cet exemple utilise XMLHttpRequest pour établir une connexion à la base de données, envoyer une requête et traiter la réponse, remplissant ainsi les données dans les éléments de la page et réalisant la fonction de lecture HTML de la base de données.

Comment gérer les erreurs de connexion à la base de données en PHP Comment gérer les erreurs de connexion à la base de données en PHP Jun 05, 2024 pm 02:16 PM

Pour gérer les erreurs de connexion à la base de données en PHP, vous pouvez utiliser les étapes suivantes : Utilisez mysqli_connect_errno() pour obtenir le code d'erreur. Utilisez mysqli_connect_error() pour obtenir le message d'erreur. En capturant et en enregistrant ces messages d'erreur, les problèmes de connexion à la base de données peuvent être facilement identifiés et résolus, garantissant ainsi le bon fonctionnement de votre application.

Conseils et pratiques pour gérer les caractères chinois tronqués dans les bases de données avec PHP Conseils et pratiques pour gérer les caractères chinois tronqués dans les bases de données avec PHP Mar 27, 2024 pm 05:21 PM

PHP est un langage de programmation back-end largement utilisé dans le développement de sites Web. Il possède de puissantes fonctions d'exploitation de bases de données et est souvent utilisé pour interagir avec des bases de données telles que MySQL. Cependant, en raison de la complexité du codage des caractères chinois, des problèmes surviennent souvent lorsqu'il s'agit de caractères chinois tronqués dans la base de données. Cet article présentera les compétences et les pratiques de PHP dans la gestion des caractères chinois tronqués dans les bases de données, y compris les causes courantes des caractères tronqués, les solutions et des exemples de code spécifiques. Les raisons courantes pour lesquelles les caractères sont tronqués sont des paramètres de jeu de caractères incorrects dans la base de données : le jeu de caractères correct doit être sélectionné lors de la création de la base de données, comme utf8 ou u.

Comment se connecter à une base de données distante à l'aide de Golang ? Comment se connecter à une base de données distante à l'aide de Golang ? Jun 01, 2024 pm 08:31 PM

Grâce au package base de données/sql de la bibliothèque standard Go, vous pouvez vous connecter à des bases de données distantes telles que MySQL, PostgreSQL ou SQLite : créez une chaîne de connexion contenant les informations de connexion à la base de données. Utilisez la fonction sql.Open() pour ouvrir une connexion à la base de données. Effectuez des opérations de base de données telles que des requêtes SQL et des opérations d'insertion. Utilisez defer pour fermer la connexion à la base de données afin de libérer des ressources.

See all articles