如何配置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"

}

}

回答:

请参阅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

以上是 如何配置spring-boot以使用基于文件的H2数据库 的全部内容, 来源链接: utcz.com/qa/400713.html

回到顶部