设置 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 嵌入式数据库的名称的主要内容,如果未能解决你的问题,请参考以下文章