Spring在运行时将模式DDL导出到数据库

时间:2016-05-30 10:13:32

标签: spring hibernate spring-boot

我在Spring Boot应用程序中使用Dynamic DataSource

问题是我需要从我的实体生成表。

有一种方法

spring.jpa.hibernate.ddl-auto=update

但它对我不起作用,因为我需要在运行时连接到数据库。 我需要知道的是,我可以调用一些方法来执行与Spring在应用程序启动时所做的相同的事情,并提及选项。

1 个答案:

答案 0 :(得分:1)

经过一番研究后,我找到了答案。您只需要 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);
    }