si une connexion db être un singleton?
Quelle est la meilleure façon en Java pour créer un singleton?
Si une connexion DB être un singleton (soit un singleton, il est automatiquement thread-safe)? Parce que théoriques de la DB ne peut pas être consulté par de nombreux utilisateurs en même temps.
- Qui vous a dit que si quelque chose est un singleton, c'est automatiquement des threads? Aussi, DBs sont généralement accessibles par plusieurs utilisateurs en même temps.
- Le Gonzo Est-il un singleton qui n'est pas thread-safe?
- Un singleton est juste un objet pour lequel une seule instance est créée. Il n'a aucune incidence sur le thread de sécurité d'un objet. Si le fonctionnement interne de cet objet ne sont pas thread-safe, le transformant en un singleton n'est pas thread-safe. Un objet de Connexion n'est pas thread-safe puisque vous ne pouvez pas utiliser simultanément à partir de plusieurs threads. En rendant un singleton, vous êtes enclin à de graves problèmes si vous ne essayez d'accéder à la connexion de plusieurs threads. (Ce que vous devriez utiliser est le regroupement de connexion (soit à l'aide d'une bibliothèque ou d'ThreadLocal) d'avoir une seule connexion par fil.
Vous devez vous connecter pour publier un commentaire.
Une connexion DB ne devrait normalement pas être un Singleton.
Deux raisons:
Au lieu de faire examiner un pool de bases de données. La piscine est partagée (et pourrait être un singleton si vous voulez). Lorsque vous avez besoin de faire travailler votre code fait ceci:
Échantillon Piscine Bibliothèques:
La meilleur façon de créer un singleton (comme aujourd'hui) est l'enum pattern singleton (Java enum singleton)
Je doute, que d'un Singleton est nécessaire, ou de n'importe quelle valeur pour une connexion de base de données. Vous souhaiterez probablement paresseux création: une connexion est créée lors de la première demande et la mise en cache, de nouvelles demandes seront remplis avec de l'instance mise en cache:
(pas thread-safe - synchroniser, si nécessaire)
Suivre le modèle de conception de la création de lignes directrices. j'.e constructeur privé, etc.
la création d'une base comme un singleton peut être un mauvais choix de conception dans de nombreux scénarios. Utilisez-le seulement si vous êtes sûr que vous n'avez pas besoin de DB de la simultanéité. Si vous avez plusieurs utilisateurs connectés à la même époque, ou même si votre seul utilisateur génère de nombreux threads qui en ont besoin pour accéder à la DB, puis une Connexion DB piscine est un meilleur choix. Vous pouvez utiliser apache ou tomcat db pools de connexions. Ces classes sont définies par exemple dans le package
où dbcp stands pour la connexion à la base de la mutualisation.
La plus grande raison pour laquelle à l'aide d'un pool de connexions est qu'en moyenne le temps qu'il faut pour le DB d'accès (DML etc) est beaucoup plus petit que le temps qu'il faut pour créer une connexion, puis fermer la connexion. En outre, n'oubliez pas de fermer votre jeu de résultats, PreparedStatement et la Connexion des variables après la transaction est effectuée.
Pourquoi pas? DB dans la plupart des cas, est destiné à être utilisé en même temps. Vous avez ces DB les niveaux d'isolation - READ_COMMITTED, READ_UNCOMMITTED, SÉRIALISÉ etc.
SÉRIALISÉ est le cas où votre DB devient l'unique accès de l'utilisateur.
Les Singletons sont un motif - il n'y a pas de manière explicite pour en créer une, il suffit de suivre la pratique du design.
Donc, si vous êtes en utilisant une base de données qui peut gérer simultanées des lectures/écritures (c'est à dire MySQL), vous n'avez pas besoin de trop s'inquiéter de la sécurité des threads. Si vous utilisez une base de données qui n'a pas faire des écritures simultanées bien (SQLite), puis un singleton doit théoriquement travail.