데이터베이스를 찾을 수 없으며 IFEXICTS=true이므로 자동 생성할 수 없습니다.
h2 데이터베이스 콘솔을 연 후 오류가 발생합니다.데이터베이스 이름을 입력했지만 데이터베이스를 찾을 수 없음 오류가 표시됩니다.
데이터베이스 "C:/Users/Barlekar/Online shoppings"를 찾을 수 없으며 IFEX가 있습니다.ICTS=true이므로 자동 생성할 수 없습니다 [90146-199] 90146/90146(도움말)
org.h2.jdbc.JdbcSQLNonTransientConnection예외:데이터베이스 "C:/Users/Barlekar/Online shoppings"를 찾을 수 없으며 IFEX가 있습니다.ICTS=true이므로 자동 생성할 수 없습니다 [90146-199]
하고 있는 는, URL Spring Boot 를 .jdbc:h2:~/test
로로 합니다.jdbc:h2:mem:testdb
로그인 페이지(스프링 부트)에 의해 설정된 기본 URL)에 표시됩니다.
이전 합니다.H2
독립 실행형 응용 프로그램을 실행할 때마다 데이터베이스를 자동으로 복구하는 데이터베이스 종속성입니다.를 들어 버전 " " " 입니다.1.4.193
의 . . . . . . . .pom.xml
에는 다음 의존관계가 포함되어 있어야 합니다.
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.193</version>
</dependency>
이 파일을 application.properties 파일에 추가합니다.
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
최근에 H2를 업그레이드한 적이 있습니까?이게 원인일 수도 있어요.
이는 다음 H2 커밋과 관련되어 있습니다.
https://github.com/h2database/h2database/commit/8b53f3999c6c5c3d5ca29020e2657968f4f59ec4
이러한 부정 이용으로 인해 변경이 이루어졌습니다.
https://www.exploit-db.com/exploits/45506
즉, H2의 디폴트는 스탠드아론 네트워크모드로 실행되면 데이터베이스가 자동으로 작성되지 않습니다.
내용을 작성할 수 , 「」를 추가해 .-ifNotExists
h2 시동하다
java -cp h2*.jar org.h2.tools.Server -ifNotExists
JDBC URL을 로 변경했습니다.
jdbc:h2:mem:testdb
그리고 그것은 일이다.
문제:
데이터베이스를 찾을 수 없거나 테스트 폴더가 c:/user/username/test에 없습니다.
복사하여 application.properties 파일에 붙여넣습니다.
spring.datasource.url=jdbc:h2:~/test
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
URL에 대한 문제였습니다. 확인하세요.문제는 해결됐습니다.
메이븐 의존성
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.193</version>
</dependency>
</dependencies>
MacOS Catalina 10.15.4 작동!
프로젝트에도 스프링 부트 데이터 JPA가 있는지 확인하십시오.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
로그인 페이지에서 JDBC URL jdbc:h2:~/test를 jdbc:h2:mem:testdb로 변경하십시오.이 URL은 Spring Boot에 의해 구성된 기본 URL입니다.
h2 db 부팅 시 "-ifNotExists" 시작 옵션에 파라미터를 추가할 수 있습니다.프로그래밍 방식으로 다음과 같이 수행할 수 있습니다.
Server.createTcpServer("-tcpPort", "PORT", "-tcpAllowOthers", "-ifNotExists").start();
명령 프롬프트를 사용하는 경우 동일한 메시지가 적용됩니다.
H2DB 콘솔에서 시도하면 실제 오류가 완전히 표시되지 않습니다.
##콘솔에는 다음과 같이 표시됩니다.##
>Database "mem:testdb" not found, either pre-create it or allow remote database creation
>(not recommended in secure environments) [90149-200] 90149/90149
단, H2 콘솔을 여는 명령어를 실행하면
> java -cp h2-1.4.200.jar org.h2.tools.Server -ifNotExists
##이미 사용된 포트의 실제 오류가 표시되었습니다.#
웹 콘솔 서버를 시작할 수 없습니다.생각할 수 있는 원인: 다른 서버가 이미 >http://191.167.0.7:8082 스레드 "main" org.h2.jdbc에서 실행되고 있습니다.JdbcSQLNonTransientConnection예외:예외 > 포트 "8082" (포트가 사용 중일 수 있음)이유:java.net.Bind Exception:org.h2.message에서 이미 사용 중인 주소: bind" [90061-200].DbException.getJdbcSQorg.h2.message의 LException(DbException.java:622).DbException.getJdbcSQLException(DbException.java:429)
##솔루션: 포트에서 실행 중인 프로세스를 종료합니다.이 포트를 H2##에서 사용할 수 있도록 합니다. > 포트에 사용되는 pid를 찾습니다.
>>D:\H2\bin>netstat -ano | findstr :8082
>> TCP [::]:8082 [::]:0 LISTENING 6376
> PID 종료
>>D:\H2\bin>taskkill /PID 6376 /F
>>SUCCESS: The process with PID 6376 has been terminated.
> 지금 바로 H2 콘솔 부팅
>java -cp h2-1.4.200.jar org.h2.tools.Server -ifNotExists
이것으로 저는 성공했습니다. :) 콘솔에 표시되는 예외는 포트 문제에 대해 보다 명확하게 표시되어야 한다고 생각합니다.
감사해요.
문제는 url과 같은 것이 아닙니다.다음은 이 경우에 사용할 필요가 있는 규칙입니다.
- 인메모리 데이터베이스의 경우: H2 Console의 URL을 jdbc:h2:mem:testdb로 대체하십시오.
- 디스크 데이터베이스의 경우: jdbc:h2:~/testdb를 사용합니다.
버전을 저하시킴으로써 H2 DB는 동작하고 있지만 테이블은 보이지 않습니다.코드 스니펫
컨트롤러
@RestController
public class CurrencyExchangeController {
@Autowired
private Environment env;
@GetMapping("/currency-exchange/from/{from}/to/{to}")
public CurrencyExchange retriveCurrencyExchange(@PathVariable String from,@PathVariable String to)
{
CurrencyExchange currencyExchange = new CurrencyExchange(1000L, from, to, BigDecimal.valueOf(65));
currencyExchange.setPort(Integer.parseInt(env.getProperty("local.server.port")));
return currencyExchange;
}
POJO
@Entity
public class CurrencyExchange {
@Id
private Long id;
@Column(name ="currency_from")
private String from;
@Column(name ="currency_to")
private String to;
@Column(name ="conversion_multiple")
private BigDecimal conversion;
private int port;
스프링 부트 메인
@SpringBootApplication
@ComponentScan(basePackages = {"com.example"})
public class CurrencyExchangeServiceApplication {
public static void main(String[] args) throws SQLException {
SpringApplication.run(CurrencyExchangeServiceApplication.class, args);
}
app.prop
spring.application.name=currency-exchange-service
server.port=8000
spring.jpa.show-sql=true
spring.h2.console.enabled=true
data.sql file
insert into currency_exchange(id,currency_from,currency_to,conversion_multiple,port)
values(1001,'USD','INR',65,0);
insert into currency_exchange(id,currency_from,currency_to,conversion_multiple,port)
values(1002,'EUR','INR',75,0);
첫 번째 url에서 jdbc:h2:mem:testdb second로 Spring Boot 버전이 2.1.3으로 변경되어 동작합니다.
저는 이 문제에 직면하여 다음과 같이 해결했습니다.
H2 데이터베이스를 사용하려면 응용 프로그램이 JRE 환경이 아닌 JDK 환경에서 실행되어야 합니다.변경하려면 다음 절차를 따르십시오.
- [프로젝트]> [속성]를 오른쪽 클릭합니다.
- 왼쪽의 [Java Build Path](자바 빌드 경로)를 선택하고 [JRE System Library](JRE 시스템 라이브러리)를 선택하여 [Edit...](편집...)을 클릭합니다.
- "워크스페이스 기본 JRE"를 선택합니다.
- "설치된 JRE"를 클릭합니다.
- 목록에 원하는 JRE가 있는 경우 해당 JRE를 선택합니다(JDK 선택도 OK).
- 그렇지 않으면 [검색...]를 클릭하여 [컴퓨터]> [ Windows C : ]> [프로그램 파일]> [ Java ]으로 이동하여 [OK]을 클릭합니다.
- 인스톨 되어 있는 모든 JRE가 표시됩니다.필요한 JRE를 선택합니다.
- OK/Finish(확인/완료)를 100만 번 클릭합니다.George가 제공한 스텝은 이쪽에서 사용하고 있습니다.-> https://stackoverflow.com/a/29640138
- H2 로그인 콘솔에서 Spring Boot에 의해 표시되는 기본 URL은 다음과 같습니다.
jdbc:h2:~/test
spring boot 어플리케이션의 속성과 실제로 일치해야 합니다.spring.datasource.url=jdbc:h2:mem:testdb
로그인 콘솔의 URL을 치환하고 [Ivan Xue][2]에서 사용한 연결]을 클릭합니다.여기서 > https://stackoverflow.com/a/56539107
- mvn clean 명령어를 사용하여 대상을 클리어하고 maven 강제 업데이트 스냅샷 또는 mvn 설치를 사용하여 강제하지 않으면 프로젝트를 빌드할 수 있도록 한 후 스프링 부팅 앱을 다시 시작하여 차이를 확인하십시오.
에서 다음 속성을 사용합니다.pom.xml
응용 프로그램을 다시 실행합니다.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.in28minutes.database</groupId>
<artifactId>database-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>database-demo</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
<pluginRepository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
최근에 이 문제에 직면했는데, 두 가지 문제가 있었습니다.
- 기본적으로는 메모리 내 데이터베이스보다는 jdbc:h2:~/test로 채워지지 않았습니다.
- 데이터 소스에서 구성한 DB 이름은
test
.
JDBC URL을 로 변경했을 때jdbc:h2:mem:{db-name-in-config}
마법처럼 작동했어요
h2 콘솔에서 사용되는 jdbc URL을 체크하여 지정한 것과 일치하는지 확인합니다.
Along with h2 dependency in POM :
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
아래와 같이 POM에 jpa, crud 저장소 의존성을 추가했는데, 잘 작동했습니다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
@Prateik Upadhyay의 답변에 덧붙여, 당신의 db 연결 이름을 다른 이름으로 바꾸고 싶다면, 나에게 효과가 있었던 것은 아래뿐입니다.spring boot 2.2.4 버전을 사용하고 있습니다.h2 1.4.200 버전.
spring.jpa.hibernate.ddl-auto=create-drop
spring.datasource.url=jdbc:h2:~/MyComponentDB;DB_CLOSE_ON_EXIT=FALSE;AUTO_SERVER=TRUE;DB_CLOSE_DELAY=-1;MODE=Oracle
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.h2.console.enabled=true
여기서 문제는 데이터베이스가 지정된 경로에 존재하지 않을 때 데이터베이스 생성을 활성화하는 방법입니다. h2 데이터베이스의 기본 시작은 ifexists=true 조건을 활성화합니다.
이 시나리오를 회피하려면 다음 옵션을 사용하여 단말기에서h2 데이터베이스를 시작해야 합니다.java - cp h2 - 1.4.199 . jar org . h2 . tools서버 - ifNotExists
이 옵션을 지정하면 됩니다.url에 있는 데이터베이스를 작성할 수 있습니다.특정 폴더에 데이터베이스 파일을 만들고 싶은 경우가 많습니다.flag -ifNotExists 를 사용하여 서버를 시작하면 다음 구문을 사용하여 선택한 jdbc:h2:tcp://localhost/D:/Working/Sri/Technology/h2/data/books 의 데이터베이스 폴더를 작성할 수 있습니다.여기는 데이터베이스 이름입니다.존재하지 않는 경우 지정된 폴더에 도서 데이터베이스가 생성됩니다.
H2 콘솔을 처음 열었을 때도 같은 오류가 발생하였습니다.가장 좋은 방법은 JDBC URL을 변경하여 단말기에 있는 값(->(/h2-console에서 사용 가능한 H2 콘솔)으로 바꾸는 것입니다.데이터베이스는 'JDBC URL'에서 입수할 수 있습니다).이것이 올바른 방법입니다.
최신 버전의 H2 데이터베이스에서는 다음 스크린샷을 사용하여 H2 데이터베이스 화면에 로그인할 수 있습니다.응용 프로그램 실행 콘솔에서는 브라우저에서 H2 데이터베이스 콘솔을 시작하는 데 필요한 JDBC URL 링크를 찾을 수 있습니다.
application.properties 파일의 데이터 소스 URL은 application.properties 파일의 데이터 소스 URL과 같아야 합니다.
언급URL : https://stackoverflow.com/questions/55349373/database-not-found-and-ifexists-true-so-we-cant-auto-create-it
'code' 카테고리의 다른 글
이온으로 표 작성 (0) | 2023.02.22 |
---|---|
커스텀 로그인 폼에서 wp 에러를 취득하는 방법 (0) | 2023.02.22 |
Redis는 mongoDB보다 얼마나 빠릅니까? (0) | 2023.02.22 |
클래스 이름 또는 ID별로 요소를 가져오는 방법 (0) | 2023.02.22 |
Karma 테스트를 실행하는 각도 오류: HTML5 모드에는 태그가 필요합니다. (0) | 2023.02.22 |