首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以基于application.properties注入不同的存储库类?

问是否可以基于application.properties注入不同的存储库类?
EN

Stack Overflow用户
提问于 2017-08-26 15:35:00
回答 2查看 753关注 0票数 0

对于MySql和Mongo数据库,我有不同的属性文件,它们在启动时根据maven配置文件加载。

对于mongo来说,还需要注入另一个存储库:MongoRepository而不是CrudRepository,就像MySQL一样。

那么,是否可以使用application.properties中的一个属性来解决这个问题,并基于这个属性注入一个或另一个存储库呢?

我的应用程序是一个简单的弹簧引导应用程序,存储库是从控制器注入的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-26 17:10:38

我假设这两个存储库都有一个公共接口,您希望在其中加载实际的bean。我会尝试这样的方法:(我没有测试)

代码语言:javascript
复制
@Autowired
MongoRepository mongoRepository;
@Autowired
CrudRepository crudRepository;

@Value("isMongo")
boolean isMongo;

private Repository actualRepository;

 @PostConstruct
  public void init() {
    actualRepository = isMongo ? mongoRepository : crudRepository;
  }

如果需要在其他几个bean中使用这个存储库,甚至可以创建一个bean:

代码语言:javascript
复制
@Bean
public Repository actualRepository(@Value("isMongo") boolean isMongo, MongoRepository mongoRepository, CrudRepository crudRepository) {
  isMongo ? mongoRepository : crudRepository;
}
票数 0
EN

Stack Overflow用户

发布于 2017-08-27 05:30:10

是的那是非常可行的。在Spring中,您可以通过配置文件来完成这个任务。使用概要文件,您可以启用或禁用@Repository (和其他@Components)。

代码语言:javascript
复制
@Repository
@Profile("mongo")
public interface MyMongoRepo extends MongoRepository<SomeObject, String> {

}


@Repository
@Profile("mysql")
public interface MyMysqlRepo extends CrudRepository<SomeObject, String> {

}

显然,您可以使用您想要的任何配置文件名称。配置文件可以通过命令行或通过application.properties文件进行设置。

代码语言:javascript
复制
spring.profiles.active=mysql
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45897046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档