source

springboot 2.3.0(h2 데이터베이스에 연결 중)

itover 2023. 2. 26. 09:39
반응형

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가 모든 정보를 저장하는 루트 파일입니다.

  1. .application.properties
    spring.datasource.url = jdbc:h2:mem:testdb

  2. 사용자 디렉토리로 이동합니다(C:\Users\subra).

  3. 을 만듭니다.test.mv.db아래와 같은 모든 파일 옵션에 저장했습니다.

    포맷 저장

  4. 이제 앱을 다시 시작합니다.

  5. 다 했어요.

레퍼런스 스크린샷:

문제:

내 문제


결과

결과

오래된 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>

저도 같은 문제가 있어서 이렇게 해결했어요.

  1. application.properties로 이동합니다.
  2. 다음을 추가합니다.
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로젝데데 ( 데데데데데 )

  1. myTest.mv.db~/Test-H-2/Project-X/DB-files 표시
  2. jdbc:h2:~/Test-H-2/Project-X/DB-files/myTest로로 합니다.JDBC URL H2의

또는

수 있어요.~\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 콘솔

이 코드는 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:~/testjdbc:h2:mem:testdb로 변경하십시오.이 URL은 Spring Boot에 의해 설정된 기본 URL입니다.

언급URL : https://stackoverflow.com/questions/61865206/springboot-2-3-0-while-connecting-to-h2-database

반응형