springboot 2.3.0(h2 데이터베이스에 연결 중)
Springboot 2.3.0에서릴리스 콘솔에서 h2 데이터베이스에 연결하는 동안 다음 오류가 발생합니다.
데이터베이스 "mem:testdb"를 찾을 수 없습니다. 데이터베이스를 미리 만들거나 원격 데이터베이스 생성을 허용합니다(보안 환경에서는 권장되지 않음). [90149-200] 90149/90149
하려면 , 「 」를 합니다.spring.datasource.url다음과 같이 합니다.
spring.datasource.url=jdbc:h2:mem:testdb
Spring Boot 2.3.0-RELEASE 이전에는 이것이 기본 설정이었지만, 어디에 설정되어 있는지 잘 모르겠습니다.2.3.0-RELEASE 현재 스키마는 랜덤으로 생성된 GUID로 보입니다.
순서 1. application.properties:
spring.h2.console.enabled=true
spring.datasource.url=jdbc:h2:mem:testdb
2단계. Spring Boot 앱을 시작하고 다음을 엽니다.
http://localhost:8080/h2-console/
보십시오.application.properties는 URL을 붙여넣습니다.jdbc:h2:mem:testdb
JDBC URL of h2-console
그 후, 이하에 나타내는 문제에 직면하지 않습니다.데이터베이스 h2를 사전에 작성하거나 리모트 데이터베이스 작성을 허용합니다(시큐어 환경에서는 권장되지 않습니다). [90149-200]90149/90149 (도움말)
실제로 당신의 h2데이터베이스는 test.mv.db라는 파일을 찾고 있습니다.그러나 그 파일은 사용자 디렉토리에 존재하지 않았습니다.즉, 단순히 당신을 때리고 그 경로로 미리 생성하라고 요구하는 것입니다.
주의: H2 DB가 모든 정보를 저장하는 루트 파일입니다.
.
application.properties
spring.datasource.url = jdbc:h2:mem:testdb사용자 디렉토리로 이동합니다(C:\Users\subra).
을 만듭니다.
test.mv.db아래와 같은 모든 파일 옵션에 저장했습니다.

이제 앱을 다시 시작합니다.
다 했어요.
레퍼런스 스크린샷:
문제:

결과

오래된 JDBC URL을 사용 중이므로 데이터베이스에 연결할 수 없습니다. 스프링 프로젝트를 시작할 때마다 JDBC URL도 변경됩니다.
솔루션:데이터베이스에 연결할 때마다 콘솔에서 JDBC URL을 복사하거나 application.properties 파일 spring.desource.url=jdbc:h2:mem:testdb의 아래 속성을 사용합니다.
이 에러의 또 다른 원인으로는 JDBC 의존관계가 결여되어 있을 가능성이 있습니다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
같은 에러가 발생했는데, 이것이 제 경우입니다.
2.에서는 Spring Boot 2.3.0 속성입니다.spring.datasource.generate-unique-nametrue로 되어 있습니다.이것에 의해, 스키마명의 랜덤 생성이 네이블이 됩니다.
)과 같이 데이터베이스가 됩니다.jdbc:h2:mem:testdb 이 방법이 URL을 수동으로 지정할 필요 없이 이 방법을 사용하는 것이 좋습니다.
프로젝트 폴더에 확장자가 .mv.db인 파일을 만듭니다.파일 이름이 .mv.db로 끝나는지 확인하십시오.그렇지 않으면 H2 콘솔이 파일을 인식하지 않습니다(이해할 수 없다는 것을 알고 있습니다.또한 :D에 대한 설명은 없습니다).파일 작성 후 다음과 같이 jdbc:h2:/devdb를 h2 콘솔의 JDBC URL에 입력합니다.

그럼 괜찮을 거야!
스텝 1. 여기서h2 데이터베이스 엔진을 다운로드합니다.
https://www.h2database.com/html/main.html
스텝 2. application.properties:
spring.h2.disc.enabled=true
spring.contextsource.url=jdbc:h2:mem:testdb
3단계. Spring Boot 앱을 시작하고 다음을 엽니다.
http://localhost:8080/h2-buff/
잘 되고 있을 거예요.
이전 버전(1.4.192)에서 h2 종속성을 사용합니다.
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.192</version>
<scope>runtime</scope>
</dependency>
2.3.0 입니다.generate-unique-nametrue.
다음의 설정으로 이전의 동작으로 되돌릴 수 있습니다.
spring.datasource.generate-unique-name=false
참고 항목: https://stackoverflow.com/a/62750194/4506703
저도 h2 데이터베이스에서 데이터 지속성을 배우기 시작했을 때 같은 오류를 발견했습니다.솔루션은 콘솔로그 자체에 있습니다.데이터베이스 이름은 에 의해 자동으로 생성되며 스프링 로그에 있습니다.에러의 원인은, 2.3.0 버전 릴리스 이후의 URL 에 자동 생성의 설명이 없는 경우입니다.
다음은 데이터베이스 URL INFO 16096 --- [ restartedMain ]o.s.b.a.h2 를 포함한 로그 메시지입니다.H2 콘솔자동 구성 : H2 콘솔은 '/h2-console'에서 사용할 수 있습니다. 데이터베이스는 'jdbc:h2:mem:f1dfeade-60ddd-4809-8978-42547353b2f3'에서 이용할 수 있습니다.
"C:"에 "test.mv.db" 파일을 추가했습니다.\Users\YourUserName"을 클릭하면 서버가 재부팅되고 동작합니다.
" "에 속성 "application.properties:
spring.datasource.generate-unique-name=false
, , 음, 음, 음, 음, 다, 다, 다, 다, the, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, ipom.xml:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
혹시 이게 도움이 될까봐문제는 어플리케이션.properties에 이것이 있기 때문입니다.
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
이전에 이 설정을 추가한 이유를 알 수 없습니다.하지만 일단 이걸 꺼내면 내 문제가 해결돼
Spring-boot started JDBC를 추가하면 문제가 해결되었습니다.
https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-jdbc/2.5.2
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
<version>2.5.2</version>
</dependency>
저도 같은 문제가 있어서 이렇게 해결했어요.
- application.properties로 이동합니다.
- 다음을 추가합니다.
spring.datasource.url=jdbc:h2:mem:testdb spring.datasource.driverClassName=org.h2.Driver spring.datasource.username=sa spring.datasource.password=password spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
이제 사용자 이름에는 sa를 사용하고 비밀번호에는 비밀번호를 사용할 수 있습니다.
PS: 보통 스프링 부트에서 사용하는 디폴트 구성입니다.
H2-데이터베이스 오류입니다.
솔루션 -
를 들어, 「」라고 합시다.~/Test-H-2/Project-X/DB-files로젝데데 ( 데데데데데 )
myTest.mv.db~/Test-H-2/Project-X/DB-files표시jdbc:h2:~/Test-H-2/Project-X/DB-files/myTest로로 합니다.JDBC URLH2의
또는
수 있어요.~\test.mv.db & add " " "jdbc:h2:~/testJDBC URL H2의
spring version 2.3.0에서 h2 database용 스키마를 작성할 때도 같은 문제가 있었습니다.데이터베이스가 접속되어도 테이블 구조를 표시할 수 없었기 때문에 spring version을 2.1.15로 변경하려고 시도했습니다.해방
윈도우 10에서도 같은 문제가 발생했습니다.교환을 시도하다
spring.datasource.url=jdbc:h2:~/testdb
와 함께
spring.datasource.url=jdbc:h2:mem:testdb
JDBC Url=을 사용하려면 application.properties에서 기본 JDBC URL인 h2-module을 바꿉니다.jdbc:h2:mem:testdbapplication.properties는 다음과 같습니다.
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=user
spring.datasource.password=password
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.h2.console.enabled=true
두 을 더하면 됩니다.application.property
spring.h2.console.enabled=true
spring.datasource.url=jdbc:h2:mem:testdb
url: url 이라고합니다.localhost:<portnumber>/h2-console를 되돌리는 에서 기존 하고 이 URL을 합니다. JDBC URL 입니다.jdbc:h2:mem:testdb
는 를 h2로 연결합니다.jdbc:h2:mem:testdb 아니다jdbc:h2:~/testdb
이 문제에 대한 저의 해결책은 다음과 같습니다.
홈 디렉토리에서 데이터베이스 폴더를 만들지 않은 경우(아래 창: C:\Users*USERNAME\test* || Linux의 경우: ~/test)를 작성하여 application.properties에 다음 행을 추가합니다.
spring.jpa.hibernate.ddl-auto=create-drop
spring.datasource.url=jdbc:h2:~/test
spring.jpa.hibernate.ddl-auto=create-drop
로그인에 도움이 됩니다.
(H2에는 공백 사용자 이름과 패스워드를 사용합니다)
Spring Boot 2.3+에서 자동 생성된 데이터베이스 이름을 언급하는 응답에 추가 - Spring Boot에서 생성된 이름을 H2 Console에 프로그래밍 방식으로 가져오는 방법을 통해 생성된 데이터베이스 이름을 유지할 수 있습니다.기본적으로 첫 번째 H2 데이터베이스 소스를 가져와 H2 콘솔컨피규레이션파일 ~/.h2.server.properties를 업데이트/생성합니다.이 파일은 H2 콘솔이 처음 액세스할 때 로드됩니다.
H2 타입을 직접 사용하도록 pom.xml 을 설정합니다.
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>compile</scope>
</dependency>
application.properties에서 H2 콘솔을 사용하도록 설정합니다(true는 디폴트값입니다).
spring.h2.console.enabled=true
자동 생성된 데이터베이스 이름을 사용하는 코드:
import java.io.OutputStream;
import java.sql.Connection;
import java.util.List;
import java.util.Objects;
import java.util.Properties;
import java.util.stream.Collectors;
import javax.sql.DataSource;
import org.h2.engine.Constants;
import org.h2.store.fs.FileUtils;
import org.h2.util.SortedProperties;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.context.annotation.Configuration;
@Configuration
@AutoConfigureAfter(DataSourceAutoConfiguration.class)
public class H2ConsoleDatabaseAutoConfigurator {
@Autowired
public void configure(ObjectProvider<DataSource> dataSource) throws Exception
{
Properties properties = SortedProperties.loadProperties(Constants.SERVER_PROPERTIES_DIR + "/" + Constants.SERVER_PROPERTIES_NAME);
List<String> urls = dataSource.orderedStream().map((available) -> {
try (Connection connection = available.getConnection()) {
if (connection.getMetaData().getURL().startsWith("jdbc:h2:mem:")) {
return connection.getMetaData().getURL() + "|" + connection.getMetaData().getUserName();
} else {
return null;
}
}
catch (Exception ex) {
return null;
}
}).filter(Objects::nonNull).collect(Collectors.toList());
if (urls.size() > 0)
{
for (int i = 0;; i++)
{
String value = properties.getProperty(String.valueOf(i), null);
if (value == null || value.startsWith("Local H2|")) {
properties.setProperty(String.valueOf(i), "Local H2|org.h2.Driver|" + urls.get(0));
break;
}
}
OutputStream out = FileUtils.newOutputStream(
Constants.SERVER_PROPERTIES_DIR + "/" + Constants.SERVER_PROPERTIES_NAME, false);
properties.store(out, "H2 Server Properties");
out.close();
}
}
}
콘솔에는 현재 H2 이름이 Local H2 메뉴 엔트리로 포함됩니다.
이 코드는 H2 콘솔과 Spring Boot H2 콘솔의 자동 설정 소스를 조합한 것입니다.
메모: -> spring.datasource.url=jdbc:h2:mem:nilesh-->콘솔(JDBC URL)에서 동일해야 합니다.
application.properties
spring.h2.console.enabled=true
spring.datasource.platform=h2
spring.datasource.url=jdbc:h2:mem:nilesh
pom.xml에 JPA Dependency를 추가하면 이 오류가 수정되었습니다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
참고하시라고 제 application.properties 파일을 보내드리겠습니다.
spring.h2.console.enabled=true
spring.datasource.url=jdbc:h2:mem:testapp
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
Spring 2.7.3을 사용하고 있습니다.mem:testdb를 찾을 수 없습니다.Stackoverflow에서 찾을 수 있는 모든 다른 솔루션을 시험해 본 결과, 유일하게 기능하는 솔루션은 애플리케이션 속성 파일에 "spring.source.url=jdbc:h2:mem:testdb"와 "spring.source.generate-generate-generate-ma-name=false"를 모두 추가하는 것이었습니다.
"spring.spring.source.url=jdbc:h2:mem:testdb"를 추가하는 것만으로 어플리케이션을 재부팅할 때마다 스프링이 고유한 이름을 생성하지 않도록 할 수 있다고 생각했지만 실제로는 그렇지 않은 것 같습니다.test.mv 파일을 수동으로 작성하는 것도 잘 되지 않았습니다.이게 도움이 됐으면 좋겠다.
모든 사람이 자신의 방법을 시도하고 있는 것처럼 보이지만, 문제의 해결책은 구성이 아니라 물리적인 것입니다.@Subramanian 답변을 참조하십시오.
어떻게든 콘솔을 통해 접속하는 경우 Spring은 루트 폴더에 물리 파일 testdb.mv.db(C:/USER/testdb.mv.db)를 작성할 수 없습니다.C:/Users/SHEKHAR로 이동하여 New > 텍스트파일을 작성했습니다(이름을 testdb.mv.db 또는 .mv.db로 변경할 때까지 저장하지 마십시오).Springboot을 재시작하면 "Test Connection"이 녹색으로 표시되고 Connect"가 Console GUI로 이동합니다.
pom.xml에서 spring-boot-devtools 종속성을 제거하고 응용 프로그램을 다시 시작합니다.나한테는 이게 먹혔어쨌든
아래의 솔루션을 사용해 주세요.작동하고 있습니다.
Spring Boot 프로젝트를 취급하는 경우 로그인 페이지에서 JDBC URL jdbc:h2:~/test를 jdbc:h2:mem:testdb로 변경하십시오.이 URL은 Spring Boot에 의해 설정된 기본 URL입니다.
언급URL : https://stackoverflow.com/questions/61865206/springboot-2-3-0-while-connecting-to-h2-database
'source' 카테고리의 다른 글
| \xc2 문자 또는 코드 스니펫을 피하는 방법 (0) | 2023.02.26 |
|---|---|
| Http 헤더에서의 Json 문자열 사용 (0) | 2023.02.26 |
| AngularJS는 모든 $http JSON 응답을 가로채다 (0) | 2023.02.26 |
| 반응 MUI로 TextField 구성 요소의 너비를 재정의하려면 어떻게 해야 합니까? (0) | 2023.02.26 |
| AJAX 요청의 상대 URL (0) | 2023.02.26 |





