programing

Spring에서 시작한 임베디드 H2 데이터베이스의 내용 보기

magicmemo 2023. 7. 25. 20:51
반응형

Spring에서 시작한 임베디드 H2 데이터베이스의 내용 보기

다음 구성 덕분에 봄에 시작된 H2 데이터베이스의 내용을 웹 브라우저에서 보고 싶습니다.

<jdbc:embedded-database id="dataSource" type="H2" />

<jdbc:initialize-database data-source="dataSource">
    <jdbc:script location="classpath:db/populateDB.sql"/>
</jdbc:initialize-database>

로그에서 JDBC URL을 검색했습니다.

DEBUG o.s.j.d.SimpleDriverDataSource - Creating new JDBC Driver Connection to [jdbc:h2:mem:dataSource;DB_CLOSE_DELAY=-1]

다음과 같이 연결 양식을 작성할 수 있습니다.

enter image description here

그러나 유감스럽게도 db는 여전히 비어 있지만, publishedDB.sql 스크립트 때문에 비어 있으면 안 됩니다.

감 잡히는 게 없어요?

감사합니다!

H2 또는 HSQLDB 인메모리 데이터베이스의 View 컨텐츠와 거의 동일한 질문입니다.

구성에 다음을 추가하기만 하면 됩니다.

<bean id="h2Server" class="org.h2.tools.Server" factory-method="createTcpServer" init-method="start" destroy-method="stop" depends-on="h2WebServer">
    <constructor-arg value="-tcp,-tcpAllowOthers,-tcpPort,9092"/>
</bean>
<bean id="h2WebServer" class="org.h2.tools.Server" factory-method="createWebServer" init-method="start" destroy-method="stop">
    <constructor-arg value="-web,-webAllowOthers,-webPort,8082"/>
</bean>

이렇게 하면 내장형 데이터베이스와 동일한 JVM에서 H2 웹 콘솔과 TCP 서버가 모두 시작되어 웹 브라우저로 포트 8082에 액세스하거나(jdbc:h2:mem:dataSource를 URL로 입력), SQuirre와 같은 외부 SQL 클라이언트로 포트 9092에 액세스할 수 있습니다.LSQL 및 동일한 데이터를 봅니다.

스프링 부트를 사용하면 application.properties 파일의 몇 가지 구성으로 이 작업을 수행할 수 있습니다.

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

그런 다음 http://localhost:8080/console/에서 h2 웹 콘솔에 액세스할 수 있습니다.기본 로그인 구성은 변경하지 않으면 작동합니다.

스프링 부트 설명서를 참조하십시오.

URL 데베이스 URLjdbc:h2:mem:dataSource메모리 내 데이터베이스를 사용 중임을 의미합니다.이제 두 번째 Java 프로세스를 시작하고 이 데이터베이스에 연결하면 두 개의 인메모리 데이터베이스(각 프로세스당 하나씩)가 생성됩니다.

기존 데이터베이스에 연결하려면 다음과 같은 여러 가지 옵션이 있습니다.

  • 동일한 프로세스 내에서 데이터베이스에 연결합니다.두 번째 프로세스를 시작하지 마십시오.

  • 하드 코딩된 절대 경로(예: 'jdbc:h2:/data/db/dataSource')가 있는 영구 데이터베이스를 사용합니다.

  • 더 복잡함/권장되지 않음:두 번째 프로세스를 시작하면 이론적으로 서버 모드를 사용하여 메모리 내 데이터베이스에 연결할 수 있습니다.그러나 이는 테스트를 실행한 서버를 시작해야 함을 의미합니다.

Spring Boot를 사용할 때 다음과 같이 H2 콘솔 서블릿을 등록할 수 있습니다.

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

원격으로 할 수 있도록 은 " " " 입니다.addInitParameter설정하기 위해"webAllowOthers""true".

xml jdbc 구성과 함께 embeddeb를 사용하는 경우 데이터베이스의 기본 이름은 'testdb'입니다.

URL 연결에 사용해 보십시오.

jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1

Java 구성 설정을 원하는 사용자는 ServletContextInitializer를 구현하고 콘솔 서버를 연결할 때 TCP 서버를 초기화하는 것이 매우 쉽습니다.

@Configuration
public class WebConfig implements ServletContextInitializer{
...

@Override
public void onStartup( ServletContext servletContext )
//do stuff onStartUp...
initH2TCPServer( servletContext );
....    

@Bean(initMethod="start", destroyMethod="stop")
public Server initH2TCPServer(ServletContext servletContext) {
    log.debug( "Initializing H2 TCP Server" );
    try {
        server = Server.createTcpServer( "-tcp", "-tcpAllowOthers", "-tcpPort", "9092" );
    } catch( SQLException e ) {
        e.printStackTrace();
    } finally {
        //Always return the H2Console...
        initH2Console( servletContext );
    }
    return server;
}

public void initH2Console( ServletContext servletContext ) {
    log.debug( "Initializing H2 console" );
    ServletRegistration.Dynamic h2ConsoleServlet = servletContext.addServlet(
    "H2Console", new org.h2.server.web.WebServlet() );
    h2ConsoleServlet.addMapping( "/console/*" );
 );
}

저도 비슷한 문제에 직면해 있었습니다.하지만 해결책은 정말로 매우 작았습니다.자세한 내용은 https://springframework.guru/using-the-h2-database-console-in-spring-boot-with-spring-security/ 페이지를 참조하십시오.

저의 경우, H2 의존성의 범위를 "runtime"으로 추가했습니다.범위 선언을 삭제했더니 문제가 해결되었습니다.이제 H2 콘솔에서 테이블을 볼 수 있습니다.

내 폼에 대한 이전 의존도는 다음과 같습니다.

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

그리고 내 문제를 해결한 새로운 의존성:

<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
</dependency>

언급URL : https://stackoverflow.com/questions/17803718/view-content-of-embedded-h2-database-started-by-spring

반응형