Spring Boot 2 JPA 어플리케이션에서 MariaDB에서 InnoDB 또는 XtraDB를 스토리지 엔진으로 선택하는 방법
Spring Boot 2.0.0을 사용하여 새로운 어플리케이션을 개발 중입니다.M6 및 스프링 데이터 JPA.MariaDB v10을 사용하고 있습니다.다음은 개발 속성 파일입니다.
spring.jpa.hibernate.ddl-auto=create-drop
spring.datasource.url=jdbc:mariadb://localhost:3306/testdb
spring.datasource.username=user
spring.datasource.password=
spring.jpa.show-sql=true
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
org.hibernate.dialect.Dialect=MariaDB53Dialect
spring.jooq.sql-dialect=MariaDB53Dialect
출력:
Hibernate: create table hibernate_sequence (next_val bigint) engine=MyISAM
스토리지 엔진을 변경할 수 없습니다.모든 테이블은 스토리지 엔진 MyISAM을 사용하여 생성되고 있습니다.
다른 스토리지 엔진을 사용하여 수동으로 테이블을 만들 수 있습니다.그러나 어떤 이유로 스프링 또는 휴지 상태가 MyISAM 엔진으로만 돌아갑니다.
순수 하이버네이트 자바 어플리케이션에서는 하이버네이트는 InnoDB를 기본값으로 사용합니다.
정보: HH000412:코어 {5.2.11}의 휴지 상태.최종}
휴지 상태: 테이블 휴지 상태_sequence(next_val bigint) 엔진 생성=InnoDB
Spring Boot 속성에서 데이터베이스 스토리지 엔진을 재정의하는 방법이 있습니까?
Spring Boot 매뉴얼에서 설명한 바와 같이 모든 속성 앞에는spring.jpa.properties는 프리픽스가 삭제된 상태로 기반이 되는 JPA 프로바이더(이 경우는 Hibernate)에 패스됩니다.
사투리를 설정하는 휴지 상태 속성은 다음과 같습니다.hibernate.dialect그 값은 사용하는 사투리의 완전 수식 클래스 이름이어야 합니다.이 경우, 그것은org.hibernate.dialect.MariaDB53Dialect.
상기의 내용을 종합하면, 다음의 속성을 설정할 수 있습니다.application.properties:
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MariaDB53Dialect
이를 통해 Spring Boot 기반 응용 프로그램은 MariaDB 사투리를 사용합니다.
2017-11-09 14:18:17.557 INFO 69955 --- [ost-startStop-1] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.MariaDB53Dialect
휴지 상태 5.2.12를 사용하여MySQLStoredProcedureTest사투리를 마리아로 설정하면서DB:
@RequiresDialect(MariaDB53Dialect.class)
public class MySQLStoredProcedureTest
extends BaseEntityManagerFunctionalTestCase {
@Override
protected Class<?>[] getAnnotatedClasses() {
return new Class<?>[] {
Person.class,
Phone.class,
};
}
...
}
그Post엔티티는 다음과 같이 매핑됩니다.
@Entity
public class Person {
@Id
@GeneratedValue
private Long id;
private String name;
private String nickName;
private String address;
@Temporal(TemporalType.TIMESTAMP )
private Date createdOn;
@OneToMany(mappedBy = "person", cascade = CascadeType.ALL)
@OrderColumn(name = "order_id")
private List<Phone> phones = new ArrayList<>();
@Version
private int version;
//Getters and setter omitted for brevity
}
그리고 MariaDB에서 테스트를 실행하면 Hibernate는 다음과 같은 스키마를 생성합니다.
create table Person (
id bigint not null,
address varchar(255),
createdOn datetime(6),
name varchar(255),
nickName varchar(255),
version integer not null,
primary key (id)
) engine=InnoDB
그 이유는MariaDB53Dialect를 확장하다MariaDBDialect를 사용합니다.InnoDBStorageEngine:
public class MariaDBDialect extends MySQL5Dialect {
public MariaDBDialect() {
super();
}
public boolean supportsRowValueConstructorSyntaxInInList() {
return true;
}
@Override
protected MySQLStorageEngine getDefaultMySQLStorageEngine() {
return InnoDBStorageEngine.INSTANCE;
}
}
그래서 MyISAM을 MYISAM으로 입수할 수 없습니다.MariaDB53Dialecthbm2dl을 사용하여 스키마를 생성할 때 사용합니다.
단, 초기 스크립트를 생성할 때는 hbm2dl만 사용해야 합니다.실제 가동 환경에서는 FlywayDB와 같은 도구를 사용해야 합니다.
휴지 상태 유저 가이드에 기재되어 있습니다.
자동 스키마 생성은 테스트 및 프로토타이핑 용도로 매우 유용하지만 프로덕션 환경에서는 증분 마이그레이션 스크립트를 사용하여 스키마를 관리하는 것이 훨씬 더 유연합니다.
Hibernate 5.2.8에서 변경했기 때문에 이전 버전을 사용하고 있을 것입니다.그렇지 않으면 hbm2dl 자동 생성 스키마에 MyISAM이 표시되는 이유는 설명되지 않습니다.
다음을 사용하여 종속성을 확인합니다.
mvn dependency:tree
Hibernate 5.2.12 를 사용하고 있는 것을 확인해 주세요.
언급URL : https://stackoverflow.com/questions/47172085/how-to-select-innodb-or-xtradb-as-storage-engine-in-mariadb-in-spring-boot-2-jpa
'programing' 카테고리의 다른 글
| 에러 코드: 1235.이 버전의 MariaDB는 아직 '창 함수로 카운트(DISTINCT) 집계'를 지원하지 않습니다. (0) | 2022.09.09 |
|---|---|
| 64비트보다 큰 값을 반환하는 bit_count 함수를 지원하는 mariadb 버전 (0) | 2022.09.09 |
| MySQL과 Neo4j를 함께 사용하는 것이 좋을까요? (0) | 2022.09.08 |
| Vuex에서 Mixin 글로벌 메서드 호출 (0) | 2022.09.08 |
| mysqld.service 작업에 실패했습니다. "systemctl status mysqld.service"를 참조하십시오. (0) | 2022.09.08 |