通过属性/yaml
io.ebean.Database 可以通过 application.yaml
、application.properties
等中的属性自动配置。
默认数据库名称为 db
,因此最小配置如下所示
H2 - 内存
## H2 setup - In memory
datasource:
db:
username: sa
password: sa
url: jdbc:h2:mem:myapp
Postgres
datasource:
db:
username: my_app
password: my_password
url: jdbc:postgresql://localhost:5432/my_app
ebean.migration.run
通常,我们希望 Ebean 在启动时运行迁移,并且我们已将 ebean.migration.run
设置为 true
。
Postgres - ebean.dbSchema
通常对于 Postgres,当我们希望数据库表等位于该命名模式中而不是 public
模式中时,我们会将 ebean.dbSchema
设置为与数据库用户名匹配。
示例 Postgres 典型配置
ebean:
dbSchema: my_app # use this schema rather than public
migration:
run: true # run database migrations on startup
datasource:
db:
username: my_app
password: ${myPassword}
url: jdbc:postgresql://${myDatabaseHost}:5432/my_app
## Expects system properties to be set for:
## myPassword and myDatabaseHost
多个数据库
使用多个数据库时,我们会设置多个数据源配置。非默认数据库具有名称。例如,如果我们有第二个名为 "other"
的数据库,我们会像下面这样配置第二个数据源
ebean:
dbSchema: my_app # use this schema rather than public
migration:
run: true # run database migrations on startup
datasource:
db:
username: my_app
password: ${myPassword2}
url: jdbc:postgresql://${myDatabaseHost2}:5432/my_app
other:
username: other_username
password: ${otherPassword}
url: jdbc:postgresql://${otherDatabaseHost}:5432/other_dbname
我们可以通过其名称获取“other”数据库实例
// obtain "other" database by its name
Database otherDatabase = DB.byName("other");
// obtain "other" database by its name
val otherDatabase = DB.byName("other");
转到 文档/多数据库 以获取有关使用 @DbName
、Model 和 Finder 与多个数据库的更多详细信息。
以编程方式创建数据库
我们可以使用 DatabaseFactory 和 DatabaseConfig 以编程方式创建 Database 实例。
// datasource
DataSourceConfig dataSourceConfig = new DataSourceConfig();
dataSourceConfig.setUsername("sa");
dataSourceConfig.setPassword("");
dataSourceConfig.setUrl("jdbc:h2:mem:myapp;");
// configuration ...
DatabaseConfig config = new DatabaseConfig();
config.setDataSourceConfig(dataSourceConfig);
...
// create database instance
Database database = DatabaseFactory.create(config);
// datasource
val dataSourceConfig = new DataSourceConfig()
dataSourceConfig.setUsername("sa")
dataSourceConfig.setPassword("")
dataSourceConfig.setUrl("jdbc:h2:mem:myapp;")
// configuration ...
val config = new DatabaseConfig();
config.setDataSourceConfig(dataSourceConfig)
...
// create database instance
val database = DatabaseFactory.create(config)
用于测试 ddl.generation
我们可以将 ddl.generation 和 ddl.run 设置为 true,以针对内存 H2 或提供的数据库实例进行简单的测试(尤其是如果我们的应用程序是只读的)。
ebean:
ddl:
generate: true
run: true
# initSql: test-init.sql
# seedSql: test-seed.sql
datasource:
db:
username: sa
password: sa
url: jdbc:h2:mem:myapp
用于测试 ebean-test
ebean-test
是为帮助针对目标数据库(Postgres、MySql、MariaDB、SQLServer、Oracle ...)进行测试而构建的。Docker 尤其可以用于以编程方式设置和初始化数据库以进行测试。
针对全功能目标数据库进行测试在测试和覆盖方面具有许多优势,我们在 docs / testing 中对此进行了讨论。
ebean-test 会读取 src/test/resources/application-test.yaml
中的配置。请参阅以下示例
ebean:
test:
platform: postgres # h2, postgres, mysql, ...
ddlMode: dropCreate # none | dropCreate | migration
dbName: my_app
ebean-test 会连接到 Ebean 启动并根据 ebean.test.platform
配置数据源,并根据 ebean.test.ddlMode
配置 DDL 生成和执行(此外,在使用 docker 测试容器时,还会根据需要启动、设置和等待 docker 容器)。
使用 ebean-test 是进行测试的推荐方法,因为它使我们能够轻松更改用于测试的数据库。例如,从针对 H2 进行测试更改为针对 Postgres docker 容器进行测试,只需将 ebean.test.platform
更改为 postgres
即可。
有关更多详细信息,请参阅 docs / testing。