У меня проблема с тем, что я пытаюсь добавить в базу данных вторую базу данных Монго.Я делаю это, добавляя второй MongoTemplate, который использует префикс конфигурации, а затем определенное имя bean-компонента.
У меня есть AbstractMongoConfig, такой как
public abstract class AbstractMongoConfig {
private String uri;
public void setUri(String uri) {
this.uri = uri;
}
public MongoDbFactory mongoDbFactory() throws Exception {
return new SimpleMongoDbFactory(new MongoClientURI(uri));
}
abstract public MongoTemplate getMongoTemplate() throws Exception; }
, который я расширяю в конкретную конфигурацию шаблонавот так ... Чтобы добавить еще одну БД mongo, я бы добавил еще одну из них, а затем аннотировал различные репозитории для использования другой конфигурации через templateRef, верно?
@Configuration
@ConfigurationProperties(prefix="server.mongodb")
public class ServerMongoConfig extends AbstractMongoConfig {
@Primary
@Override
@Bean(name="serverMongoTemplate")
public MongoTemplate getMongoTemplate() throws Exception {
return new MongoTemplate(mongoDbFactory());
}
}
С этим я должен иметь возможностьположить конфиги, как server.mongodb.uri = ...
У меня есть репозиторий, который использует это
@Repository
public interface MAPRepository extends MongoRepository<MAP, String> {
public List<MAP> findByName(String name);
}
И сущность
@Document(collection="maptest")
public class MAP {
@Id
private String id;
private String name;
}
У меня тогда естькласс обслуживания, использующий этот репозиторий
@EnableMongoRepositories(mongoTemplateRef="serverMongoTemplate")
@Service
public class TestService {
@Autowired
@Qualifier(value = "serverMongoTemplate")
private MAPRepository mrepo;
... use mrepo ...
}
Но при запуске я получаю сообщение об ошибке
Description:
Field mrepo in testpkg.svc.TestHandler required a bean of type 'testpkg.repo.MAPRepository' that could not be found.
Action:
Consider defining a bean of type 'testpkg.repo.MAPRepository' in your configuration.
и ниже ...
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'testpkg.repo.MAPRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true), @org.springframework.beans.factory.annotation.Qualifier(value=serverMongoTemplate)}
Сервисв другом пакете, чем хранилище, но я проверил импорт и все такое ... все это просто отлично.MAPRepository помечен @Repository, что означает, что он должен быть доступен в виде компонента, верно?
Что еще может происходить здесь, что приводит к тому, что компонент не видит компонент?Есть ли какой-нибудь класс, который я могу включить для отладки, чтобы выяснить, что происходит?
До того, как я добавил компонент ServerMongoConfig, он работал нормально.Он смог написать в эту БД без проблем.Просто сейчас он не может правильно его создать.