[SPRING] 봄 부팅 및 SQLite
SPRING봄 부팅 및 SQLite
Springite 앱과 함께 SQLite를 사용하려고합니다. Spring Boot에서 MongoDB와 같은 멋진 지원에 대해 알고 있습니다. 하지만 SQLite와 함께 Spring Boot를 사용할 방법을 찾을 수 없습니까? 어떤 제안이나 스프링 부트와 SQLite를 사용하여 시작하는 방법?
해결법
-
==============================
1.Spring Boot는 SQLite (예 : H2, HSQL 또는 Apache Derby와 같이 - SQLite 대신 사용할 것을 권장합니다.)와 함께 작동하지 않습니다.
Spring Boot는 SQLite (예 : H2, HSQL 또는 Apache Derby와 같이 - SQLite 대신 사용할 것을 권장합니다.)와 함께 작동하지 않습니다.
우선 SQLite 데이터 소스를 지정하기 위해 데이터 소스를 재정의해야합니다. 구성에 다음 코드를 사용하십시오 (스프링 부트 1.1.0.M2에서 소개 된 DataSourceBuilder 사용).
@Bean public DataSource dataSource() { DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create(); dataSourceBuilder.driverClassName("org.sqlite.JDBC"); dataSourceBuilder.url("jdbc:sqlite:your.db"); return dataSourceBuilder.build(); }
그런 다음 당신은 SQLiteDialect를 생성 할 필요가있다. 왜냐하면 Hibernate는 이미이 코드를 가지고 있지 않기 때문에 (Hibernate 4에 적용된 코드를 기반으로한다)
package your.package import java.sql.Types; import org.hibernate.dialect.Dialect; import org.hibernate.dialect.function.StandardSQLFunction; import org.hibernate.dialect.function.SQLFunctionTemplate; import org.hibernate.dialect.function.VarArgsSQLFunction; import org.hibernate.Hibernate; import org.hibernate.type.StringType; public class SQLiteDialect extends Dialect { public SQLiteDialect() { registerColumnType(Types.BIT, "integer"); registerColumnType(Types.TINYINT, "tinyint"); registerColumnType(Types.SMALLINT, "smallint"); registerColumnType(Types.INTEGER, "integer"); registerColumnType(Types.BIGINT, "bigint"); registerColumnType(Types.FLOAT, "float"); registerColumnType(Types.REAL, "real"); registerColumnType(Types.DOUBLE, "double"); registerColumnType(Types.NUMERIC, "numeric"); registerColumnType(Types.DECIMAL, "decimal"); registerColumnType(Types.CHAR, "char"); registerColumnType(Types.VARCHAR, "varchar"); registerColumnType(Types.LONGVARCHAR, "longvarchar"); registerColumnType(Types.DATE, "date"); registerColumnType(Types.TIME, "time"); registerColumnType(Types.TIMESTAMP, "timestamp"); registerColumnType(Types.BINARY, "blob"); registerColumnType(Types.VARBINARY, "blob"); registerColumnType(Types.LONGVARBINARY, "blob"); // registerColumnType(Types.NULL, "null"); registerColumnType(Types.BLOB, "blob"); registerColumnType(Types.CLOB, "clob"); registerColumnType(Types.BOOLEAN, "integer"); registerFunction( "concat", new VarArgsSQLFunction(StringType.INSTANCE, "", "||", "") ); registerFunction( "mod", new SQLFunctionTemplate( StringType.INSTANCE, "?1 % ?2" ) ); registerFunction( "substr", new StandardSQLFunction("substr", StringType.INSTANCE) ); registerFunction( "substring", new StandardSQLFunction( "substr", StringType.INSTANCE) ); } public boolean supportsIdentityColumns() { return true; } /* public boolean supportsInsertSelectIdentity() { return true; // As specify in NHibernate dialect } */ public boolean hasDataTypeInIdentityColumn() { return false; // As specify in NHibernate dialect } /* public String appendIdentitySelectToInsert(String insertString) { return new StringBuffer(insertString.length()+30). // As specify in NHibernate dialect append(insertString). append("; ").append(getIdentitySelectString()). toString(); } */ public String getIdentityColumnString() { // return "integer primary key autoincrement"; return "integer"; } public String getIdentitySelectString() { return "select last_insert_rowid()"; } public boolean supportsLimit() { return true; } protected String getLimitString(String query, boolean hasOffset) { return new StringBuffer(query.length()+20). append(query). append(hasOffset ? " limit ? offset ?" : " limit ?"). toString(); } public boolean supportsTemporaryTables() { return true; } public String getCreateTemporaryTableString() { return "create temporary table if not exists"; } public boolean dropTemporaryTableAfterUse() { return false; } public boolean supportsCurrentTimestampSelection() { return true; } public boolean isCurrentTimestampSelectStringCallable() { return false; } public String getCurrentTimestampSelectString() { return "select current_timestamp"; } public boolean supportsUnionAll() { return true; } public boolean hasAlterTable() { return false; // As specify in NHibernate dialect } public boolean dropConstraints() { return false; } public String getAddColumnString() { return "add column"; } public String getForUpdateString() { return ""; } public boolean supportsOuterJoinForUpdate() { return false; } public String getDropForeignKeyString() { throw new UnsupportedOperationException("No drop foreign key syntax supported by SQLiteDialect"); } public String getAddForeignKeyConstraintString(String constraintName, String[] foreignKey, String referencedTable, String[] primaryKey, boolean referencesPrimaryKey) { throw new UnsupportedOperationException("No add foreign key syntax supported by SQLiteDialect"); } public String getAddPrimaryKeyConstraintString(String constraintName) { throw new UnsupportedOperationException("No add primary key syntax supported by SQLiteDialect"); } public boolean supportsIfExistsBeforeTableName() { return true; } public boolean supportsCascadeDelete() { return false; } }
마지막으로 application.properties에서 다음 설정을 무시합니다.
spring.jpa.database-platform=your.package.SQLiteDialect spring.jpa.hibernate.ddl-auto=create-drop
첫 번째 설정은 Spring 부트가 Hibernate에게 위에 생성 된 SQLiteDialect를 사용해야 함을 알리기 위해서 필요하다.
-
==============================
2.@geoand가 제공 한 위대한 답변 외에도 DataSourceBuilder는 다음 클래스 중 하나가 클래스 경로에 있어야합니다.
@geoand가 제공 한 위대한 답변 외에도 DataSourceBuilder는 다음 클래스 중 하나가 클래스 경로에 있어야합니다.
org.apache.tomcat.jdbc.pool.DataSource com.zaxxer.hikari.HikariDataSource org.apache.commons.dbcp.BasicDataSource
또는 다음을 설정하여 클래스 검색을 무시할 수 있습니다. dataSourceBuilder.type (org.sqlite.SQLiteDataSource.class);
그렇지 않으면 지원되는 No DataSource type found 오류가 발생합니다.
또한 설정해야 할 수도 있습니다 hibernate.dialect = your.package.SQLiteDialect
from https://stackoverflow.com/questions/24232892/spring-boot-and-sqlite by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] IDE를 사용하여 스프링 부트 메인을 실행한다. (0) | 2018.12.14 |
---|---|
[SPRING] Spring에서 예약 된 작업을 조건부로 활성화 또는 비활성화하는 방법은 무엇입니까? (0) | 2018.12.14 |
[SPRING] JSON을 사용하여 중첩 된 객체를 Spring MVC 컨트롤러에 게시 (0) | 2018.12.14 |
[SPRING] Spring 캐시 @ 동일한 클래스에서 호출 할 때 캐시 가능한 메소드가 무시됩니다. (0) | 2018.12.14 |
[SPRING] 메서드 봄에 게시물 mvc에서 param을 얻는 방법? (0) | 2018.12.14 |