如何配置spring-boot以使用基于文件的H2数据库

比特男孩:

我已经成功创建了一个使用内存中的H2嵌入式数据库的Spring Boot应用程序。我现在想将此更改为将继续存在的基于文件的版本。

我试过只是更改文件中spring.datasource.*属性application.properties,它们看起来像这样:

spring.datasource.url=jdbc:h2:file:~/test;DB_CLOSE_ON_EXIT=FALSE
spring.datasource.username=test
spring.datasource.password=test
spring.datasource.driverClassName=org.h2.Driver`  

看来spring boot只是忽略了这些设置,因为它只是按如下方式启动:

o.s.j.d.e.EmbeddedDatabaseFactory        : Starting embedded database: url='jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=false', username='sa'

My pom.xml包含以下与这篇文章可能相关的依赖项:

<parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>1.3.5.RELEASE</version>
</parent>
....
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency> 
<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
</dependency>

从文档和许多帖子中我的理解是,配置应该可以正常工作,但是对我来说没有任何运气。为了防止某些基本错误,我尝试并检查了以下内容:

  1. 我的应用程序属性在classspath中:
  2. 我试图排除注释中的自动配置 @EnableAutoConfiguration
  3. 我试图注入dataSource带有注解组合的bean @Primary@ConfigurationProperties(prefix = "spring.datasource")并使用编程设置属性DataSourceBuilder这会导致其他与类型为有关的错误null

似乎我缺少关键概念或某些东西。谁能帮忙。

更新1:从我的自动配置报告中提取:

Positive matches:
-----------------

    DataSourceAutoConfiguration matched
  - @ConditionalOnClass classes found: javax.sql.DataSource,org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType (OnClassCondition)

   DataSourceAutoConfiguration.DataSourceInitializerConfiguration matched
  - @ConditionalOnMissingBean (types: org.springframework.boot.autoconfigure.jdbc.DataSourceInitializer; SearchStrategy: all) found no beans (OnBeanCondition)

   DataSourceAutoConfiguration.EmbeddedConfiguration matched
  - embedded database H2 detected (DataSourceAutoConfiguration.EmbeddedDataSourceCondition)
  - @ConditionalOnMissingBean (types: javax.sql.DataSource,javax.sql.XADataSource; SearchStrategy: all) found no beans (OnBeanCondition)

   DataSourceAutoConfiguration.JdbcTemplateConfiguration matched
  - existing auto database detected (DataSourceAutoConfiguration.DataSourceAvailableCondition)

   DataSourceAutoConfiguration.JdbcTemplateConfiguration#jdbcTemplate matched
  - @ConditionalOnMissingBean (types: org.springframework.jdbc.core.JdbcOperations; SearchStrategy: all) found no beans (OnBeanCondition)

   DataSourceAutoConfiguration.JdbcTemplateConfiguration#namedParameterJdbcTemplate matched
  - @ConditionalOnMissingBean (types: org.springframework.jdbc.core.namedparam.NamedParameterJdbcOperations; SearchStrategy: all) found no beans (OnBeanCondition)

   DataSourceTransactionManagerAutoConfiguration matched
  - @ConditionalOnClass classes found: org.springframework.jdbc.core.JdbcTemplate,org.springframework.transaction.PlatformTransactionManager (OnClassCondition)

   DataSourceTransactionManagerAutoConfiguration.TransactionManagementConfiguration matched
  - @ConditionalOnMissingBean (types: org.springframework.transaction.annotation.AbstractTransactionManagementConfiguration; SearchStrategy: all) found no beans (OnBeanCondition)

    H2ConsoleAutoConfiguration matched
  - @ConditionalOnClass classes found: org.h2.server.web.WebServlet (OnClassCondition)
  - found web application StandardServletEnvironment (OnWebApplicationCondition)
  - matched (OnPropertyCondition)

   HibernateJpaAutoConfiguration matched
  - @ConditionalOnClass classes found: org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean,org.springframework.transaction.annotation.EnableTransactionManagement,javax.persistence.EntityManager (OnClassCondition)
  - found HibernateEntityManager class (HibernateJpaAutoConfiguration.HibernateEntityManagerCondition)

Negative matches:
-----------------

    DataSourceAutoConfiguration.NonEmbeddedConfiguration did not match
  - missing supported DataSource (DataSourceAutoConfiguration.NonEmbeddedDataSourceCondition)

`

更新2:添加了执行器并查看了端点/configprops有趣的是,我的配置已被使用,并且数据库存在,但是在应用程序运行时它不使用它dataSource

"spring.datasource.CONFIGURATION_PROPERTIES":
    {"prefix":"spring.datasource",
     "properties":{
        "schema":null,
        "data":null,
        "xa":{"dataSourceClassName":null,
               "properties":{}
             },
        "type":null,
        "separator":";",
        "url":"jdbc:h2:file:~/test;DB_CLOSE_ON_EXIT=FALSE",
        "platform":"all",
        "continueOnError":false,
        "jndiName":null,               
        "sqlScriptEncoding":null,
        "password":"******",
        "name":"testdb",
        "driverClassName":"org.h2.Driver",
        "initialize":true,
        "username":"test"
        }
    }  
lenicliu:

请参阅http://www.h2database.com/html/cheatSheet.html

我想jdbc.url可能有问题,可以这样更改:

# from:
spring.datasource.url=jdbc:h2:file:~/test;DB_CLOSE_ON_EXIT=FALSE

# to:
spring.datasource.url=jdbc:h2:~/test;DB_CLOSE_ON_EXIT=FALSE

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在H2数据库中存储文件-Spring Boot

如何使用Spring Boot连接到h2数据库?

具有H2文件数据库的Spring Boot应用程序

Spring Boot:H2数据库未保存到文件

使用 Spring Boot JPA 在 H2 数据库中插入数据

推荐使用Spring Boot开发时使用H2数据库吗?

使用Spring Boot和H2读取数据库对象

使用JPA进行Spring Boot-无法从h2数据库返回对象

使用数据库H2在Spring Boot中进行测试

从 Spring 应用程序停止和重新启动基于文件的 H2 数据库

如何使用Spring Boot将H2作为远程数据库而不是嵌入式模式连接到H2?

内存数据库H2中的Spring Boot在初始化时不会从文件中加载数据

如何使用Jhipster再生H2数据库

如何从H2数据库中的用户预加载Spring Boot集成测试?

使用spring-boot-starter-data-jpa创建的H2数据库,但不使用spring-boot-starter-data-jdbc创建的数据库

配置为Spring Boot不使用HSQLDB的基于文件的数据库

H2 数据库 - 为多个 Spring Boot 应用程序使用持久存储

h2数据库的“列数不匹配”在Spring-Boot @DataJpaTest中使用投影选择查询

H2 数据库 - 为多个 Spring Boot 应用程序使用持久存储

如何在Spring中配置事务管理以使用2个不同的数据库?

通过 spring-boot [JAVA] 从 h2 数据库获取数据

如何在Spring Security和默认数据库H2中使用Grails数据库迁移?

从db2数据库Spring Boot填充内存数据库中的h2

Spring Boot-内存泄漏-H2数据库-不注销驱动程序

图像从数据库H2上传和显示错误spring boot thymleaf

Spring Boot中的外键问题-H2数据库

在Spring Boot中创建外键-H2数据库

Spring Boot H2数据库-表未显示

嵌入式H2数据库的Spring Boot版本