2016-05-30 6 views
0

私のSpringブートアプリケーションにDynamic DataSourceを使用しています。実行時にSpringエクスポートスキーマDDLをデータベースに追加

問題は私のエンティティからテーブルを生成する必要があります。そこ

spring.jpa.hibernate.ddl-auto=update

と方法があるが、私は、実行時にデータベースに接続する必要があるので、それは私のために動作しません。 私が知る必要があるのは、前述のオプションを使用してアプリケーションの起動時にSpringが行うのと同じことを行うメソッドを呼び出すことができます。

+0

レコードの場合、そのプロパティはHibernateにそのことを実行するよう要求しているため、Spring Bootは特別なことをしません。 –

答えて

0

いくつかの調査の後、私は答えを見つけました。 sessionFactoryBuilderにデータベースの更新スクリプトを生成し、JdbcTemplateよりも実行するように指示するだけです。

LocalSessionFactoryBuilder sessionFactory = new LocalSessionFactoryBuilder(dataSource); 
    sessionFactory.scanPackages("su"); 
    JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); 
    try{ 
     List<SchemaUpdateScript> scripts = sessionFactory.generateSchemaUpdateScriptList(new PostgreSQL9Dialect(), 
       new DatabaseMetadata(dataSource.getConnection(), new PostgreSQL9Dialect(), sessionFactory)); 
     log.info("Schema update scripts["+scripts.size()+"]"); 
     for (SchemaUpdateScript script:scripts) { 
      log.info(script.getScript()); 
      jdbcTemplate.execute(script.getScript()); 
     } 
    }catch (Exception e){ 
     log.error("error updating schema",e); 
    } 
関連する問題