Pour avoir une base de données disponible en scalatest avec les évolutions que j'utilise cette extension de la valeur par défaut PlaySpec
inspiré par this SO question:tests de jeux avec base de données: « Trop de connexions »
trait ResetDbSpec extends PlaySpec with BeforeAndAfterAll {
lazy val appBuilder = new GuiceApplicationBuilder()
lazy val injector = appBuilder.injector()
lazy val databaseApi = injector.instanceOf[DBApi]
override def beforeAll() = {
Evolutions.applyEvolutions(databaseApi.database("default"))
}
override def afterAll() = {
Evolutions.cleanupEvolutions(databaseApi.database("default"))
databaseApi.database("default").shutdown()
}
}
Il applique les évolutions de la base de données lorsque la suite démarre, et les retourne quand la suite se termine. Un test ressemble alors
class ProjectsSpec extends ResetDbSpec with OneAppPerSuite { ...
Après avoir ajouté d'autres tests comme celui-ci, je frappe un point où certains tests qui réussissent quand je les dirige seul, échouer avec cette erreur:
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source rejected establishment of connection, message from server: "Too many connections"
Comme on peut le voir dans le code ci-dessus, j'ai essayé d'ajouter la ligne
databaseApi.database("default").shutdown()
dans afterAll()
pour atténuer, mais il n'a eu aucun effet. J'ai essayé de ne pas faire de tests en parallèle, mais pas d'effet non plus. Où est-ce que j'ouvre les connexions db sans les fermer, et où dois-je appeler shutdown()
?
N.B. J'utilise Play 2.5.10 et Slick 3.1.
L'application tente-t-elle de conserver plus de connexions dans le pool que la base de données ne le permet? –
@MichaelZajac Comment puis-je vérifier cela? – JulienD
Est-ce que changer 'lazy val databaseApi' en def databaseApi' aide? Sinon, vous pouvez vérifier https://www.playframework.com/documentation/2.5.x/SettingsJDBC pour ajuster la taille maximale du pool. En outre, comme @MichaelZajac dit, vous pouvez vérifier votre configuration de base de données locale pour voir combien de connexions il permet. – Eric