尝试从Hibernate sessionFactory获取数据源,以便将其传递给flyway工厂 这是我正在使用的代码:
SessionFactoryImpl factory = (SessionFactoryImpl) sessionFactory;
ConnectionProvider provider = factory.getConnectionProvider();
if(provider instanceof DatasourceConnectionProviderImpl) {
System.out.println(">>>Dude, this is hack");
}
代码永远不会打印sysout语句。
我的项目中不是Spring,我无法使用
SessionFactoryUtils
。
答案 0 :(得分:1)
您可以从DataSource
获取配置类中应该拥有的DataSourceFactory
。 DataSourceFactory有一个build method,它返回一个实现DataSource接口的ManagedDataSource。
你可以在这里看到一个例子(第38行):https://github.com/dropwizard/dropwizard/blob/master/dropwizard-hibernate/src/main/java/io/dropwizard/hibernate/SessionFactoryFactory.java
<强> EDITED 强>
您需要运行的球衣服务器才能获得环境。如果您在需要DataSource时没有运行服务器,则可以通过执行以下操作来创建实例:
DropwizardAppRule<Configuration> RULE = new DropwizardAppRule<Configuration>( Application.class, ResourceHelpers.resourceFilePath("test-config.yml"));
ManagedDataSource ds = RULE.getConfiguration().getDataSourceFactory() .build(RULE.getEnvironment().metrics(), "migrations");
答案 1 :(得分:0)
最后我最终做到了这一点,这对我来说很好:
An official European Commission document (in a few of its official
languages):
Content-type: multipart/alternative
Content-Language: da, de, el, en, fr, it
这里final ManagedDataSource dataSource = config.getDataSourceFactory().build(new MetricRegistry(),
"flyway-service");
final Flyway flyway = new Flyway();
flyway.setLocations(config.getFlywayFactory().getLocations().get(0));
flyway.setDataSource(dataSource);
flyway.repair(); //
flyway.migrate();
flyway.clean();
if (flyway.migrate() <= 0) {
throw new RuntimeException("migration failed!");
}
是我通过解析配置yaml文件获得的Dropwizard。