2016-10-18 9 views
1

jpaデータとhsqldb 2.3.3(Centos 7)で動作するSpringブートアプリケーションがあり、アプリケーションはうまく動作しますが、HSQLDBデータベースマネージャを使用したいデータの状態を確認、しかし、それは失敗しました:SpringブートアプリケーションからサーバーモードでHSQLDBを起動する方法

application.properties:私はHSQLDBのSERVを使ってログインしようとした場合

java -cp /home/mycentos/.m2/repository/org/hsqldb/hsqldb/2.3.3/hsqldb-2.3.3.jar org.hsqldb.util.DatabaseManagerSwing 

spring.datasource.url=jdbc:hsqldb:mem:testdb 
spring.datasource.username=sa 
spring.datasource.password= 

spring.jpa.database-platform=org.hibernate.dialect.HSQLDialect 
spring.jpa.show-sql=true 
spring.jpa.hibernate.ddl-auto=create 

コマンドをHSQLDBを起動します

    :えーモード、それは Connection refusedエラー

    jdbc:hsqldb:hsql://localhost/testdb 
    

    私はインメモリDBにログインしようとした場合、私はログインできますが、ノーテーブルと

    jdbc:hsqldb:hsql:testdb 
    
    を示すデータ

    質問をポップ

  1. それを動作させるには?
  2. アプリケーションによって使用されているので、tomcat展開フォルダからhsqldb.jarを参照する必要がありますか?
  3. Springアプリケーションからサーバーモードまたはメモリ内モードでhsqldbを構成する構成の違いはありますか?
  4. どのような方法でも、このような状況でメモリ内モードを動作させることができます(db created spring bootによるデータチェック)?

答えて

4

Springブートアプリケーションで作成されたHSQL DBにアクセスするには、HSQLサーバーを起動する必要があります。例えば、ここで

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> 
<bean id="hqlServer" class="org.hsqldb.server.Server" init-method="start" destroy-method="stop"> 
    <property name="properties"><bean class="org.hsqldb.persist.HsqlProperties"> 
     <constructor-arg><props> 
     <prop key="server.database.0">mem:testdb</prop> 
     <prop key="server.dbname.0">testdb</prop><!--DB name for network connection--> 
     <prop key="server.no_system_exit">true</prop> 
     <prop key="server.port">9001</prop><!--default port is 9001 --> 
     </props></constructor-arg> 
    </bean></property> 
</bean> 
</beans> 

hsql_cfg.xml XML設定ファイルを作成するには、メインアプリケーションクラスでXMLコンフィギュレーションをインポートする例です。

@SpringBootApplication 
@ImportResource(value="classpath:/package/hsql_cfg.xml") 
public class MyApplication { 
} 

HSQLサーバーは、Springブートアプリケーションで起動します。他のアプリケーションは、JDBCのURLに

JDBCを使用してHSQLサーバーに接続できます。HSQLDB:HSQLを:// IP_ADDRESS:ポート/ TESTDBもちろん

hsqldb.jarは、JDBCドライバクラスをロードするために必要です。

1

ちょうどベッキンヤンの答えに加えて、ここに私のアプローチです。

ログをslf4jにリダイレクトするためのハックを含みます。

対応するデータソースを指定します。

 

    import org.hsqldb.jdbc.JDBCDataSource; 
    import org.hsqldb.server.Server; 
    import org.slf4j.Logger; 
    import org.slf4j.LoggerFactory; 
    import org.springframework.beans.factory.annotation.Value; 
    import org.springframework.boot.context.properties.ConfigurationProperties; 
    import org.springframework.context.annotation.Bean; 
    import org.springframework.context.annotation.Configuration; 
    import org.springframework.context.annotation.Primary; 

    import javax.sql.DataSource; 
    import java.io.ByteArrayOutputStream; 
    import java.io.PrintWriter; 

    @Configuration 
    public class DataSourceConfiguration { 

     private final Logger log = LoggerFactory.getLogger(getClass()); 

     @Bean(initMethod = "start", destroyMethod = "stop") 
     @ConfigurationProperties//(prefix = "alarms.idempotent.server") 
     public Server idempotentServer(@Value("${alarms.idempotent.server.path}") String path, @Value("${alarms.idempotent.port}") int port, @Value("${alarms.idempotent.name}") String name) { 

      Server server = new Server(); 
      server.setDatabaseName(0, name); 
      server.setDatabasePath(0, path); 
      server.setPort(port); 
      server.setLogWriter(slf4jPrintWriter()); 
      server.setErrWriter(slf4jPrintWriter()); 

      return server; 

     } 

     @Bean("idempotentDataSource") 
     @Primary 
     @ConfigurationProperties 
     public DataSource idempotentDataSource(@Value("${alarms.idempotent.datasource.url}") String urlNoPath, @Value("${alarms.idempotent.name}") String name) { 
      JDBCDataSource jdbcDataSource = new JDBCDataSource(); 
      String url = urlNoPath; 
      if (!url.endsWith("/")) { 
       url += "/"; 
      } 
      url += name; 
      jdbcDataSource.setUrl(url); 
      jdbcDataSource.setUser("sa"); 
      return jdbcDataSource; 
     } 

     private PrintWriter slf4jPrintWriter() { 
      PrintWriter printWriter = new PrintWriter(new ByteArrayOutputStream()) { 
       @Override 
       public void println(final String x) { 
        log.debug(x); 
       } 
      }; 
      return printWriter; 
     } 

    } 


関連する問題