스프링 부트 기본 H2 jdbc 연결 (및 H2 콘솔)


107

내 application.properties에 아무것도 지정하지 않고 mvn spring : run으로 시작할 때 spring-boot가 생성하는 임베디드 H2 데이터베이스에 대한 H2 데이터베이스 콘텐츠를 보려고합니다. 최대 절전 모드 JPA가 테이블을 만드는 것을 볼 수 있지만 데이터베이스 아래의 URL에서 h2 콘솔에 액세스하려고하면 테이블이 없습니다.

http://localhost:8080/console/

다음과 같은 제안이 있습니다. Spring에서 시작된 임베디드 H2 데이터베이스의 내용보기

하지만 스프링 부트에 제안 된 XML을 어디에 넣을지 모르겠습니다. 그래도 외부 데이터베이스가 구성 될 때 h2console을 더 이상 사용할 수 없기 때문에 처리해야 할 가능성이 더 높습니다. 어떤 종류의 조건부 코드로 (또는 maven 프로필이 활성화되었을 때 H2 만 포함하는 가장 이상적인 경우에 스프링이 자동으로 처리하도록 허용).

누구든지 부팅에서 H2 콘솔을 작동시키는 방법을 보여주는 샘플 코드가 있습니까 (또한 스프링이 사용하는 jdbc 연결 문자열이 무엇인지 알아내는 방법)?


나는 이것을 내 application.properties에 추가하여 부분적으로 내 질문에 답할 수 있습니다 .spring.datasource.url = jdbc : h2 : mem : AZ; DB_CLOSE_DELAY = -1; DB_CLOSE_ON_EXIT = FALSE spring.datasource.driverClassName = org.h2.Driver spring .datasource.username = SA spring.datasource.password =하지만 난 정말 알고 싶은 것은 프로그램 구성을 관리하는 (또는 적어도 방법 봄 기본값을 찾는)하는 방법입니다
아론 Zeckoski


1
geoand-실제 질문에서 링크 한 것과 같은 것이므로 도움이되지 않을 것 같습니다.
Aaron Zeckoski 2014

2
Dave-해당 구성을 추가하면 H2 콘솔에 액세스하여 테이블을 볼 수 있지만 이것이 올바른 방법인지 이해하는 데 도움이되지 않습니다 설정) 또는 사용중인 JDBC 연결을 얻는 방법.
Aaron Zeckoski 2014

1
사용 JDBC URL : JDBC : H2 : MEM : TESTDB
Chinmoy

답변:


110

이것이 내가 H2와 함께 봄 부팅에서 H2 콘솔을 작동시키는 방법입니다. 이것이 옳은지는 확실하지 않지만 아무도 해결책을 제시하지 않았으므로 이것이 최선의 방법이라고 제안 할 것입니다.

제 경우에는 H2 콘솔을 시작할 때 입력 할 내용 (이 경우 "AZ")을 갖도록 데이터베이스의 특정 이름을 선택했습니다. spring.jpa.database-platform을 생략해도 아무것도 해치지 않는 것처럼 보이지만이 모든 것이 필요하다고 생각합니다.

application.properties에서 :

spring.datasource.url=jdbc:h2:mem:AZ;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect

Application.java (또는 일부 구성)에서 :

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

그런 다음 {server} / console /에서 H2 콘솔에 액세스 할 수 있습니다. JDBC URL로 입력하십시오. jdbc : h2 : mem : AZ


1
사용하면 new WebServlet()문제가 생깁니다. 어떤 클래스를 가져 오나요? 나를 위해 유일한 옵션으로 javax.servlet.annotation.WebServlet을 가져오고 있으며 인터페이스 일뿐입니다.
Splaktar 2014

5
오, 알았습니다. org.h2.server.web.WebServlet이 필요한 것입니다. 내 프로젝트는 새로운 h2 라이브러리를 가져 오기 위해 Gradle과 동기화되지 않았습니다.
Splaktar 2014

21
application.properties 조각은 필요하지 않습니다. 입력 한 Application.java 부분을 jdbc:h2:mem:testdb사용한 다음 빈 사용자 이름과 빈 암호 로 연결할 수 있습니다. localhost : 8082 는이 설정에서 작동합니다.
Splaktar 2014

2
@Splaktar 감사합니다! 나는 연결하는 방법을 알아 내려고 미쳐 가고 있었고 퍼즐에서 빠진 부분은 데이터베이스 이름으로 "testdb"를 사용하는 것이었다.
nerdherd

1
@Splaktar-귀하의 의견을 답으로 만들어야합니다. 말씀하신 것처럼 EmbeddedDatabaseConnection 의 소스 코드 는 모든 기본 Embedded DB 연결 URI를 보여줍니다
karthik m

55

Spring Boot 1.3.0.M3부터 H2 콘솔을 자동 구성 할 수 있습니다.

전제 조건은 다음과 같습니다.

  • 웹 앱을 개발 중입니다.
  • Spring Boot Dev Tools가 활성화되었습니다.
  • H2가 클래스 경로에 있습니다.

당신이 봄 부팅 개발 도구를 사용하지 않는 경우에도 자동 구성 설정에 의해 콘솔 여전히 수 spring.h2.console.enabledtrue

자세한 내용은 설명서 의이 부분을 확인 하십시오.

이러한 방식으로 구성 할 때 콘솔은 http : // localhost : 8080 / h2-console / 에서 액세스 할 수 있습니다.


또는 문서에 설명 된대로 spring.h2.console.enabled = true로 활성화합니다. 전제 조건이 있으면 자동으로 활성화됩니다.
keiki

무엇 않습니다 당신은 웹 응용 프로그램을 개발하고 정확하게 평균?
garci560

Spring Boot의 맥락에서 이것은 spring-boot-starter-web종속성으로 추가했음을 의미합니다
geoand

1
또한 localhost : 8080 / h2-console 을 열 때 테이블을 보려면 jdbc url에 jdbc : h2 : mem : testdb를 작성해야 한다고 생각 합니다. 그리고 url localhost : 8080 / h2-console 에서 localhost 이후에 응용 프로그램의 포트를 지정해야합니다.
anujprashar

3
@anujprashar 나는 jdbc:h2:mem:testdb콘솔에 액세스 할 수있는 URL이 아니라 연결 URL에 대한
것이라고 확신합니다

44

이 주제에 대한 멋진 튜토리얼을 찾았습니다.

https://springframework.guru/using-the-h2-database-console-in-spring-boot-with-spring-security/

기본적으로 올바른 JDBC URL은 다음과 같습니다. jdbc:h2:mem:testdb


1
바보 같은 질문이지만 spring.datasource.name 설정의 기본값이 testdb이기 때문에 이것이 기본 JDBC URL 인 것 같습니다. db 이름을 foodb와 같은 이름으로 변경하면 jdbc가 여전히 동일하고 jdbc : h2 : mem : foodb가 아니라면 왜 그렇습니다
Dan Vega

2
이 jdbc URL jdbc : h2 : mem : testdb가 올 바릅니다. 마침내 봄 데이터 jpa에서 만든 기본 데이터베이스에 연결하는 데 도움이되었습니다.
Kamal Joshi

db 이름을 다음과 같이 설정할 수 있습니다. spring.datasource.url = jdbc : h2 : mem : test; application.properties에서
알렉세이 Maide

23

에서 http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html

H2 웹 콘솔 (H2ConsoleProperties) :

spring.h2.console.enabled=true //Enable the console.
spring.h2.console.path=/h2-console //Path at which the console will be available.

위의 두 줄을 내 application.properties 파일에 추가하면 기본 사용자 이름 (sa) 및 암호를 사용하여 H2 데이터베이스 웹 콘솔에 액세스하기에 충분했습니다 (UI가 프롬프트 할 때 암호를 입력하지 않기 때문에 비어 있음).


1
spring.h2.console.enabled=true그래? False는 비활성화합니다. 그리고 Spring Boot의 기본 경로 spring.h2.console.path=/h2-console이기 때문에 중복 /h2-console됩니다. 문서에 따르면 "기본적으로 콘솔은 / h2-console에서 사용할 수 있습니다. spring.h2.console.path 속성을 사용하여 콘솔의 경로를 사용자 지정할 수 있습니다." 자세한 내용은 여기 docs.spring.io/spring-boot/docs/current/reference/html/…
georger

나는 그가 콘솔에 액세스 할 수있는 OP를 보여주기 위해 후자의 속성을 포함시켰다. 분명히 spring.h2.console.enabled.enabled = false는 콘솔을 비활성화합니다. 요점은 이것이 속성으로 구성 가능하다는 것입니다. 명확성을 위해 해당 속성을 true로 설정합니다.
mancini0

20

단계별 가이드와 유사한 답변.

  1. 추가 개발자 도구의 의존성을하는 pom.xmlbuild.gradle

메이븐

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>

Gradle

dependencies {
    compile("org.springframework.boot:spring-boot-devtools")
}
  1. 다음에서 db에 액세스 http://localhost:8080/h2-console/
  2. jdbc:h2:mem:testdbJDBC URL로 지정
  3. 프로젝트에서 지정한 엔티티가 테이블로 표시되어야합니다.

2
이 종속성 절에 나와 '런타임 ( "H2 com.h2database")'근무를 부가
라자 Nagendra 쿠마

17

/resources/application.properties의 속성 아래에만 있습니다. 스프링 부트를 실행 한 후이 URL ( http : // localhost : 8080 / h2-console / )을 사용하면 H2 콘솔의 테이블이 표시되고 읽혀서 테이블 데이터를 볼 수 있으며 간단한 SQL 명령을 실행할 수도 있습니다. 한 가지, Java 코드에서 데이터를 가져 오는 동안 schema.sql이 소문자 이름을 사용하더라도 열 이름은 대문자입니다. :)

spring.datasource.initialize=true
spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=- 1;DB_CLOSE_ON_EXIT=FALSE
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.h2.console.enabled=true

16

들어 봄 부팅 2.1.1 봄 Initialzr에서 직선 :

  1. devtools의 기본값 은 http://127.0.0.1:8080/h2-console/입니다.

    • POM : spring-boot-starter, h2, spring-boot-starter-web, spring-boot-devtools
  2. devtools없이 -속성에서 설정해야합니다.spring.h2.console.enabled=true spring.h2.console.path=/h2-console

    • POM : spring-boot-starter, h2, spring-boot-starter-web

일단 거기에 도착하면-JDBC URL을 설정하십시오 : jdbc : h2 : mem : testdb (기본값은 작동하지 않습니다)


10

Spring Boot의 개발자 도구를 사용하는 경우 H2 콘솔이 기본적으로 활성화되어 있습니다. /h2-console/ 에서 액세스 할 수 있습니다 . 로그인 인터페이스에서 입력을 JDBC URL위해 value를 사용하십시오 jdbc:h2:mem:testdb. mem끈에 주의하십시오 .

당신이 봄 부츠의 개발자 도구를 사용하지 않는 경우에 콘솔을 활성화 할 수 있습니다 application.properties사용 spring.h2.console.enabled=true. 그러면에서 콘솔이 활성화됩니다 /h2-console. URL을 변경하려면을 사용하여 다른 항목을 추가 할 수 있습니다 spring.h2.console.path=my_console_path.

기본 스키마 이름은 testdb입니다.

자세한 내용은 Spring Boot Documentation .


4
jdbc:h2:mem:testdb기본 jdbc URL로 설정 되지 않은 이유는 무엇 입니까? 내 JPA 엔티티가 잘못된 시간 숙고를 많이 소비
Sudip 반 다리

10

spring application.properties 확인

spring.datasource.url = jdbc : h2 : mem : testdb; DB_CLOSE_DELAY = -1; DB_CLOSE_ON_EXIT = FALSE

여기 testdb는 데이터베이스로 정의되어 있습니다. h2 콘솔이 동일한 값을 가지고 있는지 확인하십시오. 그렇지 않으면 기본 db에 연결됩니다.

여기에 이미지 설명 입력


1
완벽한 대답!
gaurav

6

테이블을 가져 오기 위해 필요한 것은 schema.sql (테이블 생성 용)과 data.sql (생성 된 테이블 용 데이터) 2 개의 SQL 파일을 만드는 것입니다. 이 파일은 src / main / resources 폴더에 저장됩니다. Spring boot는 자동으로이를 감지하고 런타임 중에 나머지를 처리합니다.

프로젝트에서 2 개 이상의 DB를 사용하는 경우 (schema-h2.sql-h2 DB의 경우, schema-oracle.sql-oracle DB의 경우)와 같은 특정 파일을 사용해야합니다. data.sql도 마찬가지입니다.

또한 schema.sql에 drop table 문을 첫 번째 문으로 추가하여 테이블을 삭제해야합니다. 중복 레코드 추가를 방지합니다.

스프링 부츠 링크는 여기에 있습니다.

내 application.properties는 다음과 같습니다.

spring.datasource.url=jdbc:h2:~/file/Shiva;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.platform=h2
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.h2.console.enabled=true
spring.datasource.initialize=true 
spring.error.whitelabel.enabled=true
spring.h2.console.path=/console
spring.datasource.continue-on-error=true
spring.jpa.hibernate.ddl-auto=create
spring.hibernate.hbm2ddl.auto=update
spring.hibernate.show_sql=true

아래 링크의 단계를 따를 수 있습니다.

https://springframework.guru/using-the-h2-database-console-in-spring-boot-with-spring-security/


다른 값을 가진 두 배 "spring.jpa.hibernate.ddl-자동 ..."
유라

3

스프링 부트 2.0.2.RELEASE를 사용하면 POM 파일에서 spring-boot-starter-data-jpa 및 com.h2database를 구성하는 것만으로는 H2 콘솔이 작동하는 것만으로는 충분하지 않습니다. 아래와 같이 spring-boot-devtools를 설정해야합니다. 선택적으로이 게시물의 Aaron Zeckoski의 지침을 따를 수 있습니다.

  <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <optional>true</optional>
 </dependency>

3

H2 콘솔에 로그인 할 때 jdbc : h2 : mem : testdb를 경로로 사용하십시오.

분명히 Spring Boot 속성을 변경했다면 데이터 소스가 다를 수 있지만 기본값을 찾는 방법에 어려움을 겪고있는 것 같습니다. 그게 전부입니다! H2에 로그인하면 스키마가 표시됩니다.


1

같은 문제가 있었을 때 나는 매우 어리석은 실수를 저질렀습니다. 내가 단위 테스트 케이스를 실행하고 따라서 내가 설정 한 위해 H2 DB를 추가 한 scopetest에서 pom.xml. 를 사용하여 응용 프로그램을 실행하는 동안 mvn spring:run제거하면 scope이제 정상적으로 작동합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.