2016-07-06 4 views
3

Ich gründe wie so ein glattes Datenbankobjekt aus typsichere Konfiguration up:Rückkehr db Verbindung zu HikariCP Pool mit Slick 3.1.x

import com.typesafe.config.Config 

class DatabaseService(configKey: String, config: Config) { 
    val driver = slick.driver.MySQLDriver 
    import driver.api._ 
    val db = Database.forConfig(configKey, config) 
} 

Das Config Objekt sagt Slick HikariCP zu verwenden, etwa so:

db { 
    numThreads = 5 
    connectionTimeout = 30000 
    maximumPoolSize = 26 
    driver = "com.mysql.jdbc.Driver" 
    url = "jdbc:mysql://localhost:3306/some_db?useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC&useSSL=false" 
    user = "root" 
    password = "root" 
    connectionPool = "HikariCP" 
} 

Nach der Instanziierung des DatabaseService kann ich Abfragen ausführen, indem Sie dbService.db.run(someQuery) ausführen.

Die erste Frage ist, muss ich etwas tun, um eine Verbindung aus dem Pool zu bekommen, oder passiert das hinter den Kulissen, wenn ich db.run() aufrufen?

Zweitens, sobald diese Abfrage oder Abfragen ausführen, wie gebe ich die aktuelle Datenbankverbindung zum Verbindungspool zurück?

Antwort

3

Die erste Frage ist, muss ich etwas tun, um eine Verbindung aus dem Pool zu erhalten, oder geschieht dies hinter den Kulissen, wenn ich db.run() aufrufen?

Das passiert hinter den Kulissen.

Zweitens, sobald diese Abfrage oder Abfragen ausführen, wie gebe ich die aktuelle Datenbankverbindung zum Verbindungspool zurück?

Das passiert auch hinter den Kulissen.

Hier ist die relevant code for both questions. Im Grunde nimmt er eine Sitzung auf, führt die angegebene Aktion aus (in Ihrem Fall someQuery) und gibt dann die Sitzung frei (schließt sie). Wenn Sie ein wenig mehr im Code suchen, können Sie sehen, dass die JDBC-Implementierung BaseSession, holds a connection und auch closes it when the close method is invoked erstellt. Auch

, von the docs:

Datenbankverbindungen und Transaktionen werden automatisch von Slick verwaltet. Standardmäßig werden Verbindungen bei Bedarf erfasst und freigegeben und im Auto-Commit-Modus verwendet.

+0

Super danke für die Verknüpfung des Codes in Ihrer Antwort! Wissen Sie, wo ich eine Liste der vollständigen Konfigurationsoptionen für die Datenbank-Klasse finden kann? Scheint nicht eins in den Dokumenten zu sein. – novon

+0

Bei [der Methode scaladocs, 'forConfig] (http://slick.lightbend.com/doc/3.1.1/api/index.html#[email protected] (Pfad: String, config: com.typesafe.config.Config, Treiber: java.sql.Driver, classLoader: ClassLoader): JdbcBackend.this.Database) (Sie müssen die Methodendokumentation erweitern). Es wurde [hier] verlinkt (http://slick.lightbend.com/doc/3.1.1/database.html). – marcospereira

+0

Ah habe ich total vermisst, das Symbol zu erweitern. Danke noch einmal! – novon

Verwandte Themen