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



我正在我的 Spring Boot 应用程序中使用动态数据源

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

spring.jpa.hibernate.ddl-auto=update

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

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);
    }

最新更新