복붙노트

[SPRING] 스프링에 의해 시작된 임베디드 H2 데이터베이스의 내용보기

SPRING

스프링에 의해 시작된 임베디드 H2 데이터베이스의 내용보기

다음 구성 덕분에 Spring에서 시작한 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]

그래서 다음과 같이 연결 양식을 채울 수 있습니다.

그러나 유감스럽게도 db는 여전히 비어있는 반면 populateDB.sql 스크립트로 인해 없어야합니다.

어떤 생각?

감사!

해결법

  1. ==============================

    1.H2 또는 HSQLDB in-memory 데이터베이스의 View 내용과 거의 같은 질문입니다.

    H2 또는 HSQLDB in-memory 데이터베이스의 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>
    

    이렇게하면 웹 브라우저 (jdbc : h2 : mem : dataSource를 URL로 입력)로 포트 8082에 액세스하거나 외부 SQL 클라이언트로 포트 9092에 액세스 할 수 있도록 포함 된 데이터베이스와 동일한 JVM에서 H2 웹 콘솔과 TCP 서버가 시작됩니다 SQuirereLSQL과 같은 데이터를 확인하고 동일한 데이터를 봅니다.

  2. ==============================

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

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

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

  3. ==============================

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

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

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

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

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

  4. ==============================

    4.Spring Boot를 사용할 때 다음과 같이 H2 Console Servlet을 등록 할 수 있습니다.

    Spring Boot를 사용할 때 다음과 같이 H2 Console Servlet을 등록 할 수 있습니다.

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

    콘솔을 원격에서 사용할 수있게하려면 addInitParameter를 사용하여 "webAllowOthers"를 "true"로 설정하십시오.

  5. ==============================

    5.xml jdbc 설정과 함께 embeddeb를 사용하면 데이터베이스의 기본 이름은 'testdb' 당신의 URL 연결에서 사용해보십시오 : jdbc : h2 : mem : testdb; DB_CLOSE_DELAY = -1

    xml jdbc 설정과 함께 embeddeb를 사용하면 데이터베이스의 기본 이름은 'testdb' 당신의 URL 연결에서 사용해보십시오 : jdbc : h2 : mem : testdb; DB_CLOSE_DELAY = -1

  6. ==============================

    6.Java Config 설정을 원한다면 ServletContextInitializer를 구현하고 Console Server를 연결할 때 TCP 서버를 초기화하는 것이 매우 쉽습니다 ...

    Java Config 설정을 원한다면 ServletContextInitializer를 구현하고 Console Server를 연결할 때 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/*" );
     );
    }
    
  7. from https://stackoverflow.com/questions/17803718/view-content-of-embedded-h2-database-started-by-spring by cc-by-sa and MIT license