设置 Spring Boot 嵌入式数据库的名称

Posted

技术标签:

【中文标题】设置 Spring Boot 嵌入式数据库的名称【英文标题】:Set name of Spring Boot embedded database 【发布时间】:2015-12-15 16:10:54 【问题描述】:

如何设置在测试中运行的 Spring Boot 应用程序中启动的嵌入式数据库的名称?

我将启动同一个 Spring Boot 应用程序的两个实例作为测试的一部分,因为它们相互协作。他们都正确地启动了一个 HSQL 数据库,但默认为 testdb 的数据库名称,尽管为 spring.datasource.name 提供了不同的值。

我如何提供不同的数据库名称,或其他一些隔离两个数据库的方法?什么将是“最轻的触摸”?如果我可以避免它,我宁愿用属性来控制它而不是在我的测试配置中添加 bean - 测试配置类不应该因为这个粗粒度的协作测试而混乱。

【问题讨论】:

这两个应用程序究竟是如何启动的?它们是在不同的进程中开始的吗? 【参考方案1】:

Gah - 设置 spring.datasource.name 会更改数据源的名称,但不会更改数据库的名称。

设置spring.datasource.url=jdbc:hsql:mem:mydbname 正是我需要的。我必须对嵌入式数据库实现进行硬编码有点废话,但是 Spring Boot 使用枚举作为默认值,如果要尝试从属性中获取名称,这将意味着更大的重写。

【讨论】:

【参考方案2】:

你可以这样试试:

spring.datasource1.name=testdb
spring.datasource2.name=otherdb

然后像这样在 ApplicationConfig 中声明数据源

@Bean
@ConfigurationProperties(prefix="spring.datasource1")
public DataSource dataSource1() 
    ...


@Bean
@ConfigurationProperties(prefix="spring.datasource2")
public DataSource dataSource2() 
    ...

查看官方文档了解更多详情:https://docs.spring.io/spring-boot/docs/current/reference/html/howto-data-access.html#howto-configure-a-datasource

【讨论】:

我认为这不会改变数据库的名称,只会改变在 Spring 上下文中注册的 DataSource 实例。 哦!我绝对误解了你的问题。如果您需要在单个应用程序中访问两个不同的数据库,则可以使用它。但是你想做完全不同的事情。对不起。

以上是关于设置 Spring Boot 嵌入式数据库的名称的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot 内嵌容器Undertow参数设置

Spring Boot 内嵌容器Undertow参数设置

Spring Boot 嵌入式 Tomcat 性能

Spring Boot如何启动嵌入式Tomcat?

Spring Boot如何使用内嵌式的Tomcat和Jetty?

28 | 新特性:Tomcat和Jetty如何处理Spring Boot应用?