Как отключить spring-data-mongodb в spring-boot

102
12

Я новичок в SpringBoot. Я создал простое приложение, которое должно использовать ложные данные в среде разработки и подключаться к MongoDb в тестовой среде. Среда разработки не имеет настройки mongodb.

Я попытался использовать квалификаторы/профили Spring Boot для достижения этой цели.

У меня есть основной класс, который выглядит следующим образом:

@SpringBootApplication
public class Main {
public static void main(String[] args) {
SpringApplication.run(Main.class, args);
}
}

У меня есть интерфейс DAO StudentDao.java

public interface StudentDao {
Student getStudentById(String id);
}

Затем я создал несколько реализаций для DAO, одну для поддельных данных, а другую для данных из Mongo.

FakeStudentDaoImpl.java

@Repository
@Qualifier("fakeData")
public class FakeStudentDaoImpl implements StudentDao {

private static Map<String, Student> students;

static {

students = new HashMap<String, Student>(){
{
put("1", new Student("Ram", "Computer Science"));
}
};
}

@Override
public Student getStudentById(String id){
return this.students.get(id);
}
}

MongoStudentDaoImpl.java

@Repository
@Qualifier("mongoData")
public class MongoStudentDaoImpl implements StudentDao {

@Autowired
private MongoStudentRepo repo;

@Override
public Student getStudentById(String id) {
return repo.findById(id).get();
}
}

MongoStudentRepo - это простой интерфейс, расширяющий MongoRepository:

public interface MongoStudentRepo extends MongoRepository<Student, String> {
}

И мой POM файл имеет следующие зависимости:

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
</parent>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

Конечно, у меня есть другие классы контроллеров. Это прекрасно работает в тестовой среде, где есть MongoDb, и он может подключиться к нему. Однако, когда я пытаюсь запустить его в моей локальной среде, он не запускается, потому что он не находит MongoDb при запуске.

Как отключить часть MongoDb в моей локальной среде (и просто использовать поддельные данные)? Я хочу, чтобы один и тот же код работал в обеих средах.

Заранее спасибо.

спросил(а) 2021-01-19T18:19:41+03:00 8 месяцев назад
1
Решение
78

Несколько возможных вариантов:

1) Вы можете использовать пружинные профили. Сопоставьте один bean-компонент с @Profile("test) а второй - с @Profile("prod"). Чтобы указать, какой профиль использовать --spring.profiles.active=test

2) Вы можете иметь разные конфигурации.

application-prod.yml
--------------
mongo-url:produrl

application-test.yml
--------------
mongo-url:localhost

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

ответил(а) 2021-01-19T18:19:41+03:00 8 месяцев назад
46

Вы можете использовать встроенную базу данных MongoDB. Вот пример.

ответил(а) 2021-01-19T18:19:41+03:00 8 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема