Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate:从SessionFactory获取数据源_Java_Hibernate_Dropwizard - Fatal编程技术网

Java Hibernate:从SessionFactory获取数据源

Java Hibernate:从SessionFactory获取数据源,java,hibernate,dropwizard,Java,Hibernate,Dropwizard,正在尝试从Hibernate sessionFactory获取数据源,以便将其传递给flyway factory。 以下是我正在使用的代码: SessionFactoryImpl factory = (SessionFactoryImpl) sessionFactory; ConnectionProvider provider = factory.getConnectionProvider(); if(provider instanceof DatasourceConnectionProvide

正在尝试从Hibernate sessionFactory获取数据源,以便将其传递给flyway factory。
以下是我正在使用的代码:

SessionFactoryImpl factory = (SessionFactoryImpl) sessionFactory;
ConnectionProvider provider = factory.getConnectionProvider();
if(provider instanceof DatasourceConnectionProviderImpl) {
            System.out.println(">>>Dude, this is hack");
}
代码从不打印sysout语句

我在我的项目中不是Spring,我无法使用
SessionFactoryUtils


您可以从配置类中应有的
DataSourceFactory
获取
DataSource
。DataSourceFactory具有返回ManagedDataSource的,该ManagedDataSource实现DataSource接口

您可以在这里看到一个示例(第38行):

已编辑

您需要运行jersey服务器才能获得环境。如果您在需要数据源时没有运行服务器,则可以通过如下操作创建实例:

DropwizardAppRule规则=新的DropwizardAppRule(Application.class,ResourceHelpers.resourceFilePath(“test config.yml”)


ManagedDataSource ds=RULE.getConfiguration().getDataSourceFactory().build(RULE.getEnvironment().metrics(),“迁移”)

最后我做了这个,这对我来说很好:

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!");
        }
final ManagedDataSource dataSource=config.getDataSourceFactory().build(新MetricRegistry(),
“飞行路线服务”);
最终飞道=新飞道();
setLocations(config.getFlywayFactory().getLocations().get(0));
setDataSource(数据源);
修理//
flyway.migrate();
flyway.clean();

if(flyway.migrate()使用session factory builder构建会话工厂。我有sessionFactory,试图从中获取数据源。这是不可能的,会话工厂依赖于数据源,请手动创建数据源。这应该是可能的,因为SpringFactoryUtils提供了此功能。如果没有spin,我如何获得dropwizard的
环境
关闭jersey服务器?我知道
DropwizardAppRule
。在jersey服务器本身启动时试图避免它。我没有找到在不实际启动服务器的情况下获取数据源的方法,因为
ManagedDataSource
需要与服务器相关的信息,即指标。