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으로 입수할 수 없습니다.MariaDB53Dialect
hbm2dl을 사용하여 스키마를 생성할 때 사용합니다.
단, 초기 스크립트를 생성할 때는 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 |