我是 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 部分(并且只使用假数据)?我想让相同的代码在两种环境中工作。
提前致谢。