【发布时间】:2020-04-01 16:02:28
【问题描述】:
我正在努力完成这门课,这将使我能够在存储库之间切换。我不知道该怎么做。我想通过 Spring Boot Injection 使用默认实例!我知道我做错了,我不能将 null 值传递给那些类 init。
@Configuration
public class ApiRepositoryConfig {
@Bean
@ConditionalOnProperty(name = "db.dialect", havingValue = "postgres", matchIfMissing = true)
public ApiRepository apiJpaRepository() {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("com.tw.api");
return new ApiJpaRepository(ApiApplication.class, emf.createEntityManager());
}
@Bean
@ConditionalOnProperty(name = "db.dialect", havingValue = "mongo")
public ApiRepository apiMongoRepository() {
return new ApiMongoRepository(null, null);
}
}
ApiJpaRepository 类
@NoRepositoryBean
public class ApiJpaRepository<T, Id>
extends SimpleJpaRepository<T, Id> implements ApiRepository<T, Id> {
public ApiJpaRepository(Class<T> domainClass, EntityManager entityManager) {
super(domainClass, entityManager);
}
}
ApiMongoRepository 类
public class ApiMongoRepository<T, Id> extends SimpleMongoRepository<T, Id> implements ApiRepository<T, Id> {
public ApiMongoRepository(MongoEntityInformation<T, Id> metadata, MongoOperations mongoOperations) {
super(metadata, mongoOperations);
}
}
基础接口类
public interface ApiRepository<T, Id> extends CrudRepository<T, Id> {
}
如果有人想要完整的图片,这里是项目链接, https://github.com/er310/boot-camp/tree/master/api
【问题讨论】:
-
medium.com/swlh/… 尝试查看这篇文章作为示例,我认为它足以开始研究
-
@Ishikawa Yoshi - 感谢您的回复,我查看了博客。这是更大的图景,但我想要一些简单的东西,比如在 application.properties 中定义 spring.db.dialact=mongodb。然后conf类相应地设置依赖。
-
当我理解正确时,this question 是相似的/有希望的
-
..在当前情况下,您可以(至少)尝试“自动连接”所需的参数(而不是
null, null? ..as the EntityManagerFactory!(不要创建它,“自动接线”它)) -
你也可以:将
@ConditionalOn..注解移动到实现类(*Repository)上(确保组件扫描这些,从@Configuration中省略它们)然后(如果条件正确且排他)弹簧将连接其余部分;)
标签: java spring-boot dependency-injection spring-data-jpa spring-data-mongodb