对于MySql和Mongo数据库,我有不同的属性文件,它们在启动时根据maven配置文件加载。
对于mongo来说,还需要注入另一个存储库:MongoRepository而不是CrudRepository,就像MySQL一样。
那么,是否可以使用application.properties中的一个属性来解决这个问题,并基于这个属性注入一个或另一个存储库呢?
我的应用程序是一个简单的弹簧引导应用程序,存储库是从控制器注入的。
发布于 2017-08-26 17:10:38
我假设这两个存储库都有一个公共接口,您希望在其中加载实际的bean。我会尝试这样的方法:(我没有测试)
@Autowired
MongoRepository mongoRepository;
@Autowired
CrudRepository crudRepository;
@Value("isMongo")
boolean isMongo;
private Repository actualRepository;
@PostConstruct
public void init() {
actualRepository = isMongo ? mongoRepository : crudRepository;
}如果需要在其他几个bean中使用这个存储库,甚至可以创建一个bean:
@Bean
public Repository actualRepository(@Value("isMongo") boolean isMongo, MongoRepository mongoRepository, CrudRepository crudRepository) {
isMongo ? mongoRepository : crudRepository;
}发布于 2017-08-27 05:30:10
是的那是非常可行的。在Spring中,您可以通过配置文件来完成这个任务。使用概要文件,您可以启用或禁用@Repository (和其他@Components)。
@Repository
@Profile("mongo")
public interface MyMongoRepo extends MongoRepository<SomeObject, String> {
}
@Repository
@Profile("mysql")
public interface MyMysqlRepo extends CrudRepository<SomeObject, String> {
}显然,您可以使用您想要的任何配置文件名称。配置文件可以通过命令行或通过application.properties文件进行设置。
spring.profiles.active=mysqlhttps://stackoverflow.com/questions/45897046
复制相似问题