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]
다음과 같이 연결 양식을 작성할 수 있습니다.
그러나 유감스럽게도 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
'programing' 카테고리의 다른 글
MySQL에서 트리거에 변수를 선언하는 방법? 코드에 대해 몇 줄을 실행하는 동안 오류가 발생합니다. (0) | 2023.07.30 |
---|---|
인쇄 호출을 목록 내의 파이썬 객체의 __str_ 메서드로 만드는 방법은 무엇입니까? (0) | 2023.07.25 |
스프링 부트 - JSON 데이터 암호화 (0) | 2023.07.25 |
Angular 2 - 이미지 URL이 유효하거나 손상되었는지 확인합니다. (0) | 2023.07.25 |
"모듈" 패키지란 무엇입니까?json 필드는 무엇을 위해? (0) | 2023.07.25 |