我正在我的 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);
}