Spring Boot JPA H2控制台未运行,application.properties文件被忽略

时间:2016-10-26 11:37:26

标签: gradle spring-boot h2

Spring Boot指南说我可以使用H2控制台,但它对我不起作用。

  

http://localhost:8080/h2/ Whitelabel错误页面   此应用程序没有/ error的显式映射,因此您将此视为回退。   10月26日星期三12:31:46 BST 2016   出现意外错误(type = Not Found,status = 404)。   没有可用的消息

我创建了一个application.properties文件,如下所示

spring.h2.console.enabled=true 
spring.h2.console.path=/h2

我的项目基于this

默认路径/h2-console也不起作用。

我找到另一个答案,通过添加Application.java来解决问题:

    @Bean
public ServletRegistrationBean h2servletRegistration() {
    ServletRegistrationBean registration = new ServletRegistrationBean(new WebServlet());
    registration.addUrlMappings("/h2/*");
    return registration;
}

我的application.properties文件中的所有内容都会被忽略。我试过添加:

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

但数据库仍然只在内存中创建。

15 个答案:

答案 0 :(得分:5)

您当前的位置src\main\java\h‌​ello\application.pro‌​perties是罪魁祸首。有两个原因。

  1. 忽略src\main\java中的非Java资源
  2. 仅在根目录或application.properties目录中config或考虑(默认情况下)。 (见reference guide)。
  3. 修复方法是将您的application.properties移至src\main\resources

答案 1 :(得分:3)

检查是否在application.properties中设置了基本路径。

例如,如果您有设置

server.contextPath=/api

您可以访问

下的h2控制台

http://localhost:8080/api/h2-console

很明显,但那对我来说是

答案 2 :(得分:2)

/看起来像spring.h2.console.path之前缺少spring.h2.console.path=/h2

spring.h2.console.path

当您指出/h2-console <<<<<<< HEAD:file.txt Hello world ======= Goodbye >>>>>>> 77976da35a11db4580b80ae27e8d65caf5208086:file.txt 不再可用时

此致

答案 3 :(得分:2)

此问题的另一个可能原因是,如果您使用的是 spring security 。 在这种情况下,您可能想要向您定义的h2控制台URL添加特定权限。 例如,对于默认的h2-console配置(没有spring.h2.console.path属性),可以将其添加到 WebSecurityConfigurerAdapter 扩展类内:

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests()
        .antMatchers("/h2-console/**").permitAll()
        .anyRequest().authenticated();
    http.headers().frameOptions().sameOrigin();
}

也请注意该行的末尾-http.headers().frameOptions().sameOrigin();。 登录控制台时,需要防止Whitelable页面错误。 merge也对此进行了描述。

答案 4 :(得分:0)

对我来说 - 计算机重启会修复它。

不确定为什么会出现这种情况,但可能是端口被占用,或者h2相关文件没有正确部署

确保在启动springBoot应用程序时,您可以看到Hibernate和H2的日志行存在:

2017-04-22 14:41:03.195  INFO 912 --- [           main] org.hibernate.Version                    : HHH000412: Hibernate Core {5.0.12.Final}
2017-04-22 14:41:03.197  INFO 912 --- [           main] org.hibernate.cfg.Environment            : HHH000206: hibernate.properties not found
2017-04-22 14:41:03.199  INFO 912 --- [           main] org.hibernate.cfg.Environment            : HHH000021: Bytecode provider name : javassist
2017-04-22 14:41:03.278  INFO 912 --- [           main] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {5.0.1.Final}
2017-04-22 14:41:03.469  INFO 912 --- [           main] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.H2Dialect
2017-04-22 14:41:03.935  INFO 912 --- [           main] org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000227: Running hbm2ddl schema export
2017-04-22 14:41:03.945  INFO 912 --- [           main] org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000230: Schema export complete

答案 5 :(得分:0)

对于这个问题,我只需在我的application.properties上添加默认字符串并运行。

spring.datasource.url=jdbc:h2:file:~/test
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.driver-class-name=org.h2.Driver

也许弹簧靴不会出于某种原因设置它。

答案 6 :(得分:0)

就我而言,我只需要按照here中的说明从h2依赖项中删除标签<scope>runtime</scope>

答案 7 :(得分:0)

在application.properties中尝试以下操作

spring.h2.console.enabled: true

答案 8 :(得分:0)

在我的情况下,可以从<scope>test</scope>中的h2 dependency中删除pom.xml。 修改后,请不要忘记重新安装并重新构建。

<!-- H2 database -->
<dependency>
   <groupId>com.h2database</groupId>
   <artifactId>h2</artifactId>
   <version>1.4.199</version>
   <!-- <scope>test</scope> -->
</dependency>

答案 9 :(得分:0)

我在Gradle声明中使用了 compile testCompile ,对我来说很好。

示例:

compile group: 'com.h2database', name: 'h2', version: '1.4.200'

答案 10 :(得分:0)

如果您在忽略该application.properties的程序时遇到麻烦,并且正在使用 Eclipse ,请执行以下操作:

将application.properties移到src / main / resources文件夹中,右键单击它,然后单击“构建路径”->“添加到构建路径”

答案 11 :(得分:0)

我在构建微服务项目时尝试了h2-console,却遇到了同样的问题“ Whitelabel错误页面”。 我目前尚未在项目中添加任何安全性,但是我发现可以通过从application.properties中删除 spring.h2.console.enabled = true 并添加依赖项 dev解决我的问题。 -工具。对我来说,不添加dev-tools也会导致此问题,因此也请尝试添加此依赖项。当然,您将添加h2,执行器,Web依赖项。

答案 12 :(得分:0)

确保使用> spring.datasource.url=jdbc:h2:mem:testdb,因为 h2 需要此数据库

答案 13 :(得分:0)

尝试添加到 application.properties

spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect

//然后 创建类 SecurityConfig

@Configuration
@EnableWebSecurity

public class SecurityConfig extends WebSecurityConfigurerAdapter {

@Override
protected void configure(HttpSecurity httpSecurity) throws Exception {
    httpSecurity.authorizeRequests().antMatchers("/").permitAll().and()
            .authorizeRequests().antMatchers("/h2-console/**").permitAll();
    httpSecurity.csrf().disable();
    httpSecurity.headers().frameOptions().disable();
}

}

答案 14 :(得分:0)

对我来说,scope=test 是我不小心从 https://mvnrepository.com/artifact/com.h2database/h2/1.4.200

复制的问题
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <version>1.4.200</version>
        <scope>test</scope>
    </dependency>

并将其替换为

    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <version>1.4.200</version>
        <scope>runtime</scope>
    </dependency>

在此之后,它应该可以使用默认配置。 enter image description here

我没有使用 Spring Security,但您可能需要相应地进行某些更改。请检查以上答案https://stackoverflow.com/a/59729714/7359806