2016-05-30 59 views
0

我在我的Spring Boot應用程序中使用Dynamic DataSource在運行時彈出輸出模式DDL到數據庫

問題是我需要從我的實體生成表。沒有與

spring.jpa.hibernate.ddl-auto=update

的方式,但因爲我需要連接到數據庫在運行時它不會爲我工作。 我需要知道的是,我可以調用一些方法來執行與Spring在應用程序啓動時使用上述選項所做的相同的操作。

+0

作爲記錄,該屬性只是要求Hibernate做它的事情,所以Spring Boot沒有做任何特殊的事情。 –

回答

0

Okey經過一番研究,我找到了答案。您只需要詢問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); 
    }