§Accessing an SQL database
§Configuring JDBC connection pools
Play provides a plugin for managing JDBC connection pools. You can configure as many databases as you need.
To enable the database plugin add javaJdbc in your build dependencies :
libraryDependencies += javaJdbc
Then you must configure a connection pool in the
conf/application.conf file. By convention the default JDBC data source must be called
# Default database configuration db.default.driver=org.h2.Driver db.default.url="jdbc:h2:mem:play"
To configure several data sources:
# Orders database db.orders.driver=org.h2.Driver db.orders.url="jdbc:h2:mem:orders" # Customers database db.customers.driver=org.h2.Driver db.customers.url="jdbc:h2:mem:customers"
If something isn’t properly configured, you will be notified directly in your browser:
§H2 database engine connection properties
# Default database configuration using H2 database engine in an in-memory mode db.default.driver=org.h2.Driver db.default.url="jdbc:h2:mem:play"
# Default database configuration using H2 database engine in a persistent mode db.default.driver=org.h2.Driver db.default.url="jdbc:h2:/path/to/db-file"
The details of the H2 database URLs are found from H2 Database Engine Cheat Sheet.
§SQLite database engine connection properties
# Default database configuration using SQLite database engine db.default.driver=org.sqlite.JDBC db.default.url="jdbc:sqlite:/path/to/db-file"
§PostgreSQL database engine connection properties
# Default database configuration using PostgreSQL database engine db.default.driver=org.postgresql.Driver db.default.url="jdbc:postgresql://database.example.com/playdb"
§MySQL database engine connection properties
# Default database configuration using MySQL database engine # Connect to playdb as playdbuser db.default.driver=com.mysql.jdbc.Driver db.default.url="jdbc:mysql://localhost/playdb" db.default.username=playdbuser db.default.password="a strong password"
§Accessing the JDBC datasource
play.db package provides access to the configured data sources:
import play.db.*; DataSource ds = DB.getDatasource();
§Obtaining a JDBC connection
You can retrieve a JDBC connection the same way:
Connection connection = DB.getConnection();
It is important to note that resulting Connections are not automatically disposed at the end of the request cycle. In other words, you are responsible for calling their close() method somewhere in your code so that they can be immediately returned to the pool.
§Exposing the datasource through JNDI
Some libraries expect to retrieve the
Datasource reference from JNDI. You can expose any Play managed datasource via JDNI by adding this configuration in
db.default.driver=org.h2.Driver db.default.url="jdbc:h2:mem:play" db.default.jndiName=DefaultDS
§Importing a Database Driver
Other than for the h2 in-memory database, useful mostly in development mode, Play does not provide any database drivers. Consequently, to deploy in production you will have to add your database driver as an application dependency.
For example, if you use MySQL5, you need to add a dependency for the connector:
libraryDependencies += "mysql" % "mysql-connector-java" % "5.1.18"
§Selecting and configuring the connection pool
Out of the box, Play provides two database connection pool implementations, HikariCP and BoneCP. The default is HikariCP, but this can be changed by setting the
The full range of configuration options for connection pools can be found by inspecting the
play.db.prototype property in Play’s JDBC
For information on testing with databases, including how to setup in-memory databases and, see Testing With Databases.
§Enabling Play database evolutions
Read Evolutions to find out what Play database evolutions are useful for, and follow the instructions for using it.
Next: Integrating with JPA
Found an error in this documentation? The source code for this page can be found here. After reading the documentation guidelines, please feel free to contribute a pull request. Have questions or advice to share? Go to our community forums to start a conversation with the community.