spring+hsqldb 사용설정

spring 2015. 7. 15. 13:46

hsqldb를 이용해서 프로그램 작업을 하는 경우 아래와 같이 applicationContext.xml에 설정을 추가 하면 됩니다.

메모리 디비를 사용하는 경우

 

<bean class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" id="dataSource">
        <property name="driverClassName" value="org.hsqldb.jdbcDriver" />
        <property name="url" value="jdbc:hsqldb:mem:test" />
        <property name="username" value="sa" />
        <property name="password" value="" />
 </bean>

 

메모리+파일시스템 을 같이 사용하는경우

<bean id="hsqldb" class="extra.HsqlDbSys" init-method="start">
          <constructor-arg>
               <value>
               server.database.0 = file:C:/workspace/sampleSpring/WebContent/WEB-INF/hsqldb/test
               server.dbname.0 = test
               server.remote_open = true
               server.port = 9002
               hsqldb.reconfig_logging = false
               </value>
          </constructor-arg>
     </bean>
     <bean class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" id="dataSource">
        <property name="driverClassName" value="org.hsqldb.jdbcDriver" />
        <property name="url" value="jdbc:hsqldb:hsql://localhost:9002/test" />
        <property name="username" value="sa" />
        <property name="password" value="" />
 </bean>

 

이때 start를 하기 위해서 HsqlDbSy 클래스를 만들어서 사용하게 됩니다.

 

 

 

package extra;

import java.io.IOException;
import java.util.Properties;

import org.hsqldb.Server;
import org.hsqldb.persist.HsqlProperties;
import org.hsqldb.server.ServerAcl.AclFormatException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.SmartLifecycle;

public class HsqlDbSys implements SmartLifecycle{
	private final Logger logger = LoggerFactory.getLogger(this.getClass());
    private HsqlProperties properties;
    private Server server;
    private boolean running = false;

    public HsqlDbSys(){}
    
    public HsqlDbSys(Properties props) {
         properties = new HsqlProperties(props);
    }

    public boolean isRunning() {
         if(server != null)
              server.checkRunning(running);
              return running;
         }

    public void start() {
         if(server == null) {
              logger.info("디비 시작");
              server = new Server();

              try {
                   server.setProperties(properties);
                   server.start();
                   running = true;
              } catch(AclFormatException afe) {
                   logger.error("start hsqldb", afe);
              } catch (IOException e) {
                   logger.error("start hsqldb", e);
              }
         }
    }

    public void stop() {
         logger.info("디비 종료");
         if(server != null) {
              server.stop();
              running = false;
         }
    }

    public int getPhase() {
         return 0;
    }

    public boolean isAutoStartup() {
         return true;
    }

    public void stop(Runnable runnable) {
         stop();
         runnable.run();
    }
}

반응형

'spring' 카테고리의 다른 글

aspect bofore 관련  (0) 2016.07.01
sessionFactory annotatedClasses/packagesToScan 방식  (0) 2015.07.27
스프링 관련 문서  (0) 2015.03.05
스프링 버전 변경시 에러 사항(3.1.1->3.2.1)  (0) 2015.03.03
s:message 태그 설명  (0) 2014.09.25
Posted by 질주하는구
,