我有 MySql 和 Mongo 数据库的不同属性文件,它们是在启动时根据maven配置文件加载的。
对于mongo,还需要注入另一个存储库: MongoRepository 而不是 CrudRepository ,因为它适用于MySQL。
是否可以使用 application.properties 中的属性来解决此问题,并基于此属性注入一个或另一个存储库?
我的应用程序是一个简单的spring-boot应用程序,存储库是从控制器注入的。
答案 0 :(得分:0)
我假设两个存储库都有一个通用接口,您希望加载实际的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;
}
答案 1 :(得分:0)
是的,这是非常可行的。在Spring Boot中,您可以通过profiles执行此操作。使用配置文件,您可以启用或停用@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=mysql