Как Spring boot / Application.java может собрать Mongo AbstractMongoConfiguration в другой пакет?

1

Я хочу, чтобы мои классы были организованы в пакеты. Используя следующий пример:

https://spring.io/guides/gs/accessing-data-mongodb/

У меня есть Application.java в "my.main.package". Я определяю собственную реализацию AbstractMongoConfiguration ниже:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.config.AbstractMongoConfiguration;

import com.mongodb.Mongo;
import com.mongodb.MongoClient;

@Configuration
public class MyMongoConfig extends AbstractMongoConfiguration{
    @Override
    @Bean
    public Mongo mongo() throws Exception {
        return new MongoClient("remotehost:27018");
    }

    @Override
    protected String getDatabaseName() {
        return "mydb";
    }
}

Если я поместил класс в тот же пакет, что и приложение Application.java, оно будет работать. Если я поместил MyMongoConfig в свой собственный пакет, то есть "my.config.package.settings", тогда запуск Application.java будет использовать настройки соединения MongoDB по умолчанию, не используя "MyMongoConfig". Почему мое приложение не автоматически находит "MyMongoConfig", когда оно находится в другом пакете? Есть ли правильный способ или возможность сделать это, не перебирая их в одном пакете?

Теги:
spring-boot
spring

1 ответ

4
Лучший ответ

Рекомендуется, чтобы основной класс приложения Spring Boot находился в корневом пакете выше других классов, чтобы базовый "поисковый пакет" был корневым. Все пакеты из корня будут отсканированы для классов конфигурации.

Если вы решите разместить некоторые другие классы конфигурации в других пакетах, я считаю, что их нужно указать. Например, если у вас есть ваш основной класс приложения в пакете "demo" и ваш конфигурационный класс Mongo в пакете "another.demo", аннотация @ComponentScan для вашего основного класса приложения должна выглядеть так:

@Configuration
@ComponentScan(basePackages={"another.demo", "demo"})
@EnableAutoConfiguration
public class Application {
  • 0
    В настоящее время у меня есть Application.java в пакете "demo.main" и конфиг в моем посте в "demo.main.config". (Два пакета являются одноранговыми по отношению друг к другу в src / main / java. Похоже, что я получаю следующую ошибку: org.springframework.web.util.NestedServletException: сбой обработки запроса; вложенное исключение - java.lang.IllegalStateException: this Mongo закрыт. Этого не происходит, когда файл конфигурации находится в одном пакете. Есть ли какие-то другие аннотации, которые я должен добавить, или что-то, что я должен сделать?
  • 0
    Нет, этого должно быть достаточно. Какой у вас код для Application.java и какой код вы используете для доступа к Mongo, который выдает исключение?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню