'shutdown=true'에 해당되는 글 2

  1. 2011.02.11 HSQLDB
  2. 2009.04.06 Grails - 서버 재시작시 데이터 삭제되지 않게 하기

HSQLDB

http://hsqldb.org/doc/2.0/guide/running-chapt.html

1. HyperSQL Database 에는 데이터를 저장하는 형태에 따라 세가지 종류의 catalog가 있다.
  • mem:
  • file:
  • res:

2. 데이터에 접근하는 방식은 두가지가 있다.

2.1. In-Process 방식
Connection c = DriverManager.getConnection("jdbc:hsqldb:file:/opt/db/testdb", "SA", "");
Connection c = DriverManager.getConnection("jdbc:hsqldb:mem:mymemdb", "SA", "");

2.2. Server Modes

2.2.1. HyperSQL HSQL Server
java -cp hsqldb.jar org.hsqldb.server.Server --database.0 file:mydb --dbname.0 xdb
java -cp hsqldb.jar org.hsqldb.server.Server --database.0 mem:mydb --dbname.0 xdb

2.2.2. HyperSQL HTTP Server
java -cp hsqldb.jar org.hsqldb.server.WebServer --database.0 file:mydb --dbname.0 xdb

2.2.3. HyperSQL HTTP Servlet

2.2.4. Database Server에 접근하는 방법
Connection c = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/xdb", "SA", "");
Connection c = DriverManager.getConnection("jdbc:hsqldb:http://localhost/xdb", "SA", "");

3. 데이터베이스 종료 시키기
반드시 SHUTDOWN 명령이나 쿼리를 실행시켜서 종료시킬 것.
아니면 연결 문자열에 속성을 지정한다.[각주:1]
Connection c = DriverManager.getConnection("jdbc:hsqldb:file:testdb;shutdown=true", "SA", "");

In-Process, file: 카타로그로 실행시킨 경우 shutdown으로 정상종료시키지 않으면 script 파일에 기록되지 않는다.

  1. 이 옵션은 아마 1.8부터 될거야. [본문으로]

Grails - 서버 재시작시 데이터 삭제되지 않게 하기

> grails prod run-app //prodDb.script 에 데이터가 저장된다.
grails-app/conf/DataSource.groovy에서 development 설정을 production 과 동일하게 둔다.
hsqldb를 사용하므로 파일에 저장되도록 한다.
dbCreate = "create-drop" //update 로 수정한다.
url = "jdbc:hsqldb:mem:devDB" //jdbc:hsqldb:file:devDB;shutdown=true 로 수정한다. devDB.script 에 데이터가 저장된다.

또는 서버 시작시 데이터를 넣는다.
conf/BootStrap.groovy
class BootStrap {

    def init = { servletContext ->
        new Book(author:"Stephen King",title:"The Shining").save()
        new Book(author:"James Patterson",title:"Along Came a Spider").save()
    }
    def destroy = {
    }
}

- 참고 : each문 사용




class BootStrap {

    def init = { servletContext ->
        if(GrailsUtil.environment == "development"){

            new Tag(name:"Work").save()
            new Tag(name:"Home").save()
            new Tag(name:"Study").save()

            def admin = new User(userId:"admin", password:"grails").save()
            def testUser = new User(userId:"test", password:"test").save()
            def testUser2 = new User(userId:"testA", password:"test").save()

            (1..11).each{
                new Entry(title:"$it", content:"content$it", user:admin).save()
            }
            new Entry(title:"test", content:"content", user:testUser).save()
            new Entry(title:"123", content:"456", user:testUser2).save()
        }
    }
    def destroy = {
    }
}