Настраиваемые URL и имя базы данных Mongo в приложении Spring Boot

#java #spring #mongodb #spring-boot

#java #spring #mongodb #spring-загрузка

Вопрос:

Я пытаюсь настроить свойства mongodb через application-{environment-name}.properties для подключения к mongodb.

Вот мой код для подключения к mongo:

 @Configuration
@EnableAutoConfiguration
public class SpringMongoConfig {

    @Value("${db.connectionURL}")
    private String databaseURL;

    @Value("${db.name}")
    private String databaseName;

    @Bean
    public MongoDbFactory mongoDbFactory() throws Exception {
        System.out.println("database url: "   databaseURL   " db name: "   databaseName);
        return new SimpleMongoDbFactory(new MongoClient(databaseURL), databaseName);
    }

    @Bean
    public MongoTemplate mongoTemplate() throws Exception {
        MongoTemplate mongoTemplate = new MongoTemplate(mongoDbFactory());
        return mongoTemplate;
    }
}
  

Вот мой application-test.properties файл:

 db.connectionURL=localhost
db.name=rahab
  

Я получаю нулевые значения для databaseURL и databaseName . Моя идея заключается в том, что значения по-прежнему недоступны во время создания компонента. Но у меня нет ни малейшей идеи, как этого добиться.

Комментарии:

1. Вы активировали test профиль? Попробуйте указать spring.profiles=test в application.properties , чтобы увидеть, по-прежнему ли это не работает

2. @OriDar пытался это сделать. В терминале я вижу, что URL и имя базы данных печатаются дважды. Один с фактическими значениями, за которыми следуют значения null, после чего я получаю это сообщение на терминале: java.lang.IllegalArgumentException: Database name must not be empty!

3. Вы также должны активировать профиль, добавив его @Profile("test") в SpringMongoConfig . Однако обратите внимание, что указанная конфигурация mongo будет доступна только для тестового профиля. Для лучшего понимания вам следует прочитать разделы 24 (конфигурация), 25 (профили) и раздел mongodb справочной документации Spring boot

4. Я не знаю, что у вас дважды напечатано сообщение. Я подозреваю, что у вас есть повторяющиеся классы конфигурации, где один правильно настроен в сочетании с profile, а другой нет

Ответ №1:

вы можете использовать PropertySource в конфигурации, чтобы указать местоположение созданного вами файла свойств. Пример кода приведен ниже:

 @Configuration
@EnableAutoConfiguration
@PropertySource("application-test.properties")
public class SpringMongoConfig {

@Value("${db.connectionURL}")
private String databaseURL;

@Value("${db.name}")
private String databaseName;

@Bean
public MongoDbFactory mongoDbFactory() throws Exception {
    System.out.println("database url: "   databaseURL   " db name: "   databaseName);
    return new SimpleMongoDbFactory(new MongoClient(databaseURL), databaseName);
}

@Bean
public MongoTemplate mongoTemplate() throws Exception {
    MongoTemplate mongoTemplate = new MongoTemplate(mongoDbFactory());
    return mongoTemplate;
}
}
  

Надеюсь, это поможет решить вашу проблему.