Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot 动态配置SpringBootH2数据库_Spring Boot_H2 - Fatal编程技术网

Spring boot 动态配置SpringBootH2数据库

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(内存) } 您可以使用应用程序中的一

我想动态配置spring启动应用程序附带的H2数据库。我看到的所有示例都谈到添加或更改
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();
    }
}