Mysql
 sql >> Base de données >  >> RDS >> Mysql

Bureau Java - comment séparer l'accès à la base de données du thread d'interface utilisateur ?

Il semble que vos requêtes db soient exécutées à partir du thread d'interface utilisateur même si vous dites qu'une tâche planifiée exécute les requêtes (?). Pour être sûr, vous pouvez imprimer un stacktrace où vous accédez à la base de données :

new Exception().printStacktrace();

Passons à votre solution proposée :cela semble être une conception décente si vos requêtes db sont lentes et gèlent autrement votre interface utilisateur. Vous pouvez implémenter un système d'événements entre votre couche d'interface utilisateur et la couche de base de données, peut-être une simple approche basée sur une file d'attente.

MODIF :

Il existe très probablement des exemples pour trouver comment mettre en œuvre une solution basée sur les événements.

Avis de non-responsabilité :Je n'ai pas fait de véritable programmation d'interface utilisateur depuis de nombreuses années.

  1. L'utilisateur clique sur un bouton dans l'interface utilisateur. Le thread d'interface utilisateur place un objet événement (DataWantedEvent) dans une file d'attente (java.util.Queue), modifie une étiquette ("En attente de données..."), puis continue et attend d'autres interactions de l'utilisateur.
  2. Le thread de la couche db prend l'événement de la file d'attente et interroge la base de données. Le résultat est renvoyé dans une autre file d'attente dans un objet de résultat.
  3. Un thread d'interface utilisateur (probablement pas le thread principal) extrait l'objet de résultat de la file d'attente de résultats et met à jour l'interface utilisateur.

Une file d'attente pour la publication des objets de résultat dans l'interface utilisateur peut ne pas être nécessaire. Une méthode de mise à jour pourrait être invoquée directement.

Si l'utilisateur clique sur un bouton d'annulation, l'événement/le rappel de mise à jour peut être ignoré ou, si possible, la requête de la base de données peut être annulée.