Documentation / Setup / Spring
Spring boot
The preferred approach with Spring is to create a Database explicitly
using Database.builder() and expose it as a normal Spring bean.
This keeps startup explicit and makes it easy to inject Database
directly into repositories, services and tests.
Spring-managed transactions
If you want Spring to manage the transactions, add the
ebean-spring-txn dependency and register
SpringJdbcTransactionManager as Ebean's external transaction manager.
<dependency>
<groupId>${groupid}</groupId>
<artifactId>${artifactid}</artifactId>
<version>${version_str}</version>
</dependency>
<dependency org="${groupid}" name="${artifactid}" rev="${version_str}"/>
@Grapes(
@Grab(group='${groupid}', module='${artifactid}', version='${version_str}')
)
'${groupid}:${artifactid}:${version_str}'
'${groupid}:${artifactid}:${version_str}'
libraryDependencies += "${groupid}" % "${artifactid}" % "${version_str}"
[${groupid}/${artifactid} "${version_str}"]
@Configuration
public class DatabaseConfiguration {
@Bean
Database database(SpringJdbcTransactionManager txnManager) {
return Database.builder()
.name("db")
.loadFromProperties()
.externalTransactionManager(txnManager)
.build();
}
}
SpringJdbcTransactionManager
SpringJdbcTransactionManager implements Ebean's
ExternalTransactionManager API and provides integration into
Spring transaction management.
SpringJdbcTransaction
SpringJdbcTransaction extends Ebean's
ExternalJdbcTransaction and is used by
SpringJdbcTransactionManager.
Inject Database
Prefer injecting Database into Spring beans rather than relying on
the global DB singleton in application code. In practice most applications
still keep the default registration enabled on the builder so that query beans, Model and
other default-database-based APIs can resolve the database under the hood.