Hibernate:从SessionFactory获取数据源

时间:2015-08-03 17:13:10

标签: java hibernate dropwizard

尝试从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

  

2 个答案:

答案 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。