当前位置: 首页 > 面试题库 >

如何使用dropwizard上的guice自动连接HibernateBundle?

梁学真
2023-03-14
问题内容

我试图用guice / dropwizard配置hibernatebundle,需要帮助。我除了dropwizard lib之外,还使用hubspot /
dropwizard-guice / 0.7.0
3rd
party库。

下面的代码显然无法正常工作,需要帮​​助找出它。我该如何重写它,以便将hibernatebundle以及最终的会话工厂自动注入到需要它的任何bean中。

MyApplication.java

public class MyApplication extends Application<MyAppConfiguration> {

    private final HibernateBundle<MyAppConfiguration> hibernateBundle = new HibernateBundle<MyAppConfiguration>(MyModel.class) {
        @Override
        public DataSourceFactory getDataSourceFactory(MyAppConfiguration configuration) {
            return configuration.getDataSourceFactory();
        }
    };

    @Override
    public void initialize(Bootstrap<MyAppConfiguration> bootstrap) {
        bootstrap.addBundle(hibernateBundle);  // ???

        bootstrap.addBundle(
            GuiceBundle.<MyAppConfiguration>newBuilder()
                    .addModule(new MyAppModule())
                    .enableAutoConfig(getClass().getPackage().getName())
                    .setConfigClass(MyAppConfiguration.class)
                    .build()
        );
    }

}

MyAppModule.java

public class MyAppModule extends AbstractModule {

    @Provides
    public SessionFactory provideSessionFactory(MyAppConfiguration configuration) {
            // really wrong as it creates new instance everytime.
        return configuration.getHibernateBundle().getSessionFactory(); // ???
    }

}

MyAppConfiguration.java

public class MyAppConfiguration extends Configuration {
    @Valid
    @NotNull
    private DataSourceFactory database = new DataSourceFactory();

    @JsonProperty("database")
    public DataSourceFactory getDataSourceFactory() {
        return database;
    }

    @JsonProperty("database")
    public void setDataSourceFactory(DataSourceFactory dataSourceFactory) {
        this.database = dataSourceFactory;
    }

        // ???
    public HibernateBundle<MyAppConfiguration> getHibernateBundle() {
        return new HibernateBundle<MyAppConfiguration>(MyModel.class) {
            @Override
            public DataSourceFactory getDataSourceFactory(MyAppConfiguration configuration) {
                return database;
            }
        };
    }

}

问题答案:

这就是我最终要做的事情。我从这里或邮件列表中都没有得到答案,因此我会认为这种骇人听闻的方法,可能不是正确的方法,但对我有用。

在我的模块中(扩展了abstractmodule):

private final HibernateBundle<MyConfiguration> hibernateBundle =
        new HibernateBundle<MyConfiguration>(MyModel.class) {
            @Override
            public DataSourceFactory getDataSourceFactory(MyConfiguration configuration) {
                return configuration.getDataSourceFactory();
            }
        };

@Provides
public SessionFactory provideSessionFactory(MyConfiguration configuration,
                                            Environment environment) {

    SessionFactory sf = hibernateBundle.getSessionFactory();
    if (sf == null) {
        try {
            hibernateBundle.run(configuration, environment);
        } catch (Exception e) {
            logger.error("Unable to run hibernatebundle");
        }
    }

    return hibernateBundle.getSessionFactory();
}

修订:

public SessionFactory provideSessionFactory(MyConfiguration configuration,
                                            Environment environment) {

    SessionFactory sf = hibernateBundle.getSessionFactory();
    if (sf == null) {
        try {
            hibernateBundle.run(configuration, environment);
            return hibernateBundle.getSessionFactory();
        } catch (Exception e) {
            logger.error("Unable to run hibernatebundle");
        }
    } else {
        return sf;
    }
}


 类似资料:
  • 我一直想利用Guice 但是,我开始遇到 Governator 和 Dropwizard 之间的类路径问题。我不得不在我的pom.xml中排除以下模块: 注意:我正在使用管理程序版本 1.3.3 但是现在我遇到的问题是没有指定基本包,乍一看是NoSuchMethodError,我想这可能是另一个类路径问题: 但是,在我的应用程序中,我使用了他们在dropwizer-guice github页面上显

  • 问题内容: 当我尝试自动装配Spring RestTemplate时,出现以下错误: 在注释驱动的环境中使用Spring 4。 我的调度程序servlet的配置如下: 我尝试自动连接RestTemplate的类如下: 问题答案: 如果未定义错误,则会看到错误 考虑在配置中定义类型为“ org.springframework.web.client.RestTemplate”的bean。 要么 找不到

  • 下面是我到目前为止的代码: 有人能解释一下在和情况下我该做什么吗?以及如何知道网络已断开并重新连接?

  • 我想在弹簧靴中使用RedisTemplate。我可以成功地使用StringRedisTemplate,但我不能使用Redistemplate。这是密码。 然后,运行测试方法:testObject(),下面是错误报告:

  • 你好,我正在尝试使用dropwizard框架创建一个应用程序。我有DAO类impl,它需要一个连接管理器实例的句柄,然后用于获取数据库连接。我有一个多租户数据库应用程序。这个连接管理器将是一个自定义实现。 该应用程序使用hikari cp作为连接池和mysql数据库。我想使用dropwizard托管对象功能初始化数据源和连接池。一旦数据源被初始化,我想使用guice绑定在每个dao类中注入连接管理

  • 如何触发此示例 Spring 启动 OAuth2 应用程序的自动注销? 我尝试将以下代码从这个其他帖子的答案添加到应用程序的包中的新控制器类中: 但是,当我尝试启动应用程序时,调试日志会出现以下错误,表明它无法令牌存储: 当编译错误解决后,我打算从以下代码触发注销过程,这些代码将添加到<code>hello中。js控制器在上面的github链接中的应用程序: 示例应用的完整代码位于上面的 gith