#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 boot4. Я не знаю, что у вас дважды напечатано сообщение. Я подозреваю, что у вас есть повторяющиеся классы конфигурации, где один правильно настроен в сочетании с 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;
}
}
Надеюсь, это поможет решить вашу проблему.