I'm running Play 2.5.4 on ec2 using the executable from universal:packageZipTarball, and sometime it just failed with following error:
Oops, cannot start the server.
com.google.inject.CreationException: Unable to create injector, see the following errors:
1) Error injecting constructor, java.sql.SQLTimeoutException: Timeout after 1031ms of waiting for a connection.
at controllers.Main.<init>(Main.scala:27)
at controllers.Main.class(Main.scala:26)
while locating controllers.Main
for parameter 1 at router.Routes.<init>(Routes.scala:35)
while locating router.Routes
while locating play.api.inject.RoutesProvider
while locating play.api.routing.Router
for parameter 0 at play.api.http.JavaCompatibleHttpRequestHandler.<init>(HttpRequestHandler.scala:200)
while locating play.api.http.JavaCompatibleHttpRequestHandler
while locating play.api.http.HttpRequestHandler
for parameter 4 at play.api.DefaultApplication.<init>(Application.scala:221)
at play.api.DefaultApplication.class(Application.scala:221)
while locating play.api.DefaultApplication
while locating play.api.Application
1 error
at com.google.inject.internal.Errors.throwCreationExceptionIfErrorsExist(Errors.java:466)
at com.google.inject.internal.InternalInjectorCreator.injectDynamically(InternalInjectorCreator.java:184)
at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:110)
at com.google.inject.Guice.createInjector(Guice.java:96)
at com.google.inject.Guice.createInjector(Guice.java:84)
at play.api.inject.guice.GuiceBuilder.injector(GuiceInjectorBuilder.scala:181)
at play.api.inject.guice.GuiceApplicationBuilder.build(GuiceApplicationBuilder.scala:123)
at play.api.inject.guice.GuiceApplicationLoader.load(GuiceApplicationLoader.scala:21)
at play.core.server.ProdServerStart$.start(ProdServerStart.scala:47)
at play.core.server.ProdServerStart$.main(ProdServerStart.scala:22)
at play.core.server.ProdServerStart.main(ProdServerStart.scala)
Caused by: java.sql.SQLTimeoutException: Timeout after 1031ms of waiting for a connection.
at com.zaxxer.hikari.pool.BaseHikariPool.getConnection(BaseHikariPool.java:227)
at com.zaxxer.hikari.pool.BaseHikariPool.getConnection(BaseHikariPool.java:182)
at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:93)
at slick.jdbc.hikaricp.HikariCPJdbcDataSource.createConnection(HikariCPJdbcDataSource.scala:12)
at slick.jdbc.JdbcBackend$BaseSession.conn$lzycompute(JdbcBackend.scala:415)
at slick.jdbc.JdbcBackend$BaseSession.conn(JdbcBackend.scala:414)
at slick.jdbc.JdbcBackend$BaseSession.metaData$lzycompute(JdbcBackend.scala:420)
Sorry I can't recover all the error, and after restarting the machine, it can start normally again for now.
But I suspect that this may happen again since I've already experienced this failed -> back to normal -> failed -> back to normal process several times, and I just didn't know what did I do to make it back to normal.
I'm using play-slick to connect with H2 (embedded disk mode), and using dependency injection by DatabaseConfigProvider.
Here is a beginning part of my controller (actor "annoies" and "lshs" also have DatabaseConfigProvider injected):
@Singleton
class Main @Inject() (
auth: Auth,
dbConfigProvider: DatabaseConfigProvider,
@Named("annoies") annoies: ActorRef,
@Named("lshs") lshs: ActorRef
)(implicit ws: WSClient) extends Controller {
implicit val timeout = Timeout(5.seconds)
val conf = ConfigFactory.load()
val backgrounds = conf.getStringList("backgrounds").asScala
//prepare database
val dbConfig = dbConfigProvider.get[JdbcProfile]
val db = dbConfig.db
val init = db.run(MTable.getTables).flatMap { tables =>
val existTables = tables.map(_.name.name).toSet
if (!existTables.contains(Algorithms.table.baseTableRow.tableName)) {
db.run(Algorithms.table.schema.create)
} else {
Future.successful(())
}
}
Await.result(init, Duration.Inf)
...
And here is my config:
play.crypto.secret = "..."
slick.dbs.default {
driver = "slick.driver.H2Driver$"
db {
driver = "org.h2.Driver"
url = "jdbc:h2:/home/pishentsai/app-h2"
}
}
backgrounds = [...]
This error only happen on my ec2 machine. I've tried it on my laptop and everything work just fine. (Both my laptop and ec2 has Ubuntu 16.04 with OpenJDK 8 installed.)
Any suggestion on this? Or are there any way for me to get the more detailed debug message when I meet this error next time?
Thanks!
pishen