我已经成功创建了一个使用内存中的H2嵌入式数据库的Spring Boot应用程序。我现在想将其更改为将继续存在的基于文件的版本。
我试过只是更改文件中的spring.datasource.*属性application.properties,它们看起来像这样:
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包含与该帖子可能相关的以下依赖项:
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>
从文档和许多帖子中我的理解是,配置应该可以正常工作,但是对我来说没有任何运气。为了防止某些基本错误,我尝试并检查了以下内容:
@EnableAutoConfiguration
dataSource
@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。
/configprops
"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