Spring boot 动态配置SpringBootH2数据库
我想动态配置spring启动应用程序附带的H2数据库。我看到的所有示例都谈到添加或更改Spring boot 动态配置SpringBootH2数据库,spring-boot,h2,Spring Boot,H2,我想动态配置spring启动应用程序附带的H2数据库。我看到的所有示例都谈到添加或更改application.properties文件 我想做的是在启动时执行类似的操作(因此动态地执行): //伪代码 如果定义了环境变量或参数(例如:--h2.location=/tmp.foo.txt) { 定义url spring.datasource.url=jdbc:h2:文件: 保留所有其他默认值 } 其他的 { 使用默认的spring.datasource.url(内存) } 您可以使用应用程序中的一
application.properties
文件
我想做的是在启动时执行类似的操作(因此动态地执行):
//伪代码
如果定义了环境变量或参数(例如:--h2.location=/tmp.foo.txt)
{
定义url spring.datasource.url=jdbc:h2:文件:
保留所有其他默认值
}
其他的
{
使用默认的spring.datasource.url(内存)
}
您可以使用应用程序中的一行代码在启动时动态计算。属性:
spring.datasource.url=${h2.file.datasource:jdbc:h2:mem:testdb}
其中,参数变量将是数据源url:h2.file.datasource=jdbc:h2:file:./tmp.foo.txt
如果您想要对数据源创建进行更多控制,只需编写一个配置组件,其中包含一个返回数据源的方法:
@Configuration
public class H2DatasurceConfiguration {
@Value("${h2.location:#{null}}")
private String h2Location;
@Bean
public DataSource getDataSource() {
DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create();
if (h2Location != null) {
dataSourceBuilder.url("jdbc:h2:file:" + h2Location);
// Additional datasource configuration for file db
} else {
dataSourceBuilder.url("jdbc:h2:mem:db;DB_CLOSE_DELAY=-1");
// Additional datasource configuration for in memmory db
}
return dataSourceBuilder.build();
}
}
非常感谢。我肯定会更多地关注完全动态(代码)版本,就像您的第二个示例一样。经过实验后,您似乎还可以使用
有趣的dataSourceProperties():dataSourceProperties
,只要它标记有@Bean
和@Primary
。优点是它由application.properties
文件中的属性填充,您可以覆盖任何您想要的属性。
@Configuration
public class H2DatasurceConfiguration {
@Value("${h2.location:#{null}}")
private String h2Location;
@Bean
public DataSource getDataSource() {
DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create();
if (h2Location != null) {
dataSourceBuilder.url("jdbc:h2:file:" + h2Location);
// Additional datasource configuration for file db
} else {
dataSourceBuilder.url("jdbc:h2:mem:db;DB_CLOSE_DELAY=-1");
// Additional datasource configuration for in memmory db
}
return dataSourceBuilder.build();
}
}