Java Hibernate:从SessionFactory获取数据源
正在尝试从Hibernate sessionFactory获取数据源,以便将其传递给flyway factory。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
以下是我正在使用的代码:
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
需要与服务器相关的信息,即指标。