Spring Boot WebFlux(二):使用MongoDB
2018-11-13 本文已影响24人
redexpress
实现
创建UserRepository
public interface UserRepository extends ReactiveCrudRepository<User, String> {
Mono<User> findByName(String name);
}
添加MongoDB的配置
@EnableReactiveMongoRepositories
public class MongoConfig extends AbstractReactiveMongoConfiguration {
@Bean
@Override
public MongoClient reactiveMongoClient() {
return MongoClients.create();
}
@Override
protected String getDatabaseName() {
return "test";
}
}
单元测试
在单元测试的时候,我们使用EmbeddedMongoDB,这样就可不依赖MongoDB环境运行。
我们使用的端口是17017,为的是不和MongoDB默认的端口冲突。
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserRepositoryTest {
private static MongodExecutable mongodExecutable;
private static MongoTemplate mongoTemplate;
@Autowired
private UserRepository repository;
@BeforeClass
public static void beforeAll() throws Exception{
String ip = "localhost";
int port = 17017;
IMongodConfig mongodConfig = new MongodConfigBuilder().version(Version.Main.PRODUCTION)
.net(new Net(ip, port, Network.localhostIsIPv6()))
.build();
MongodStarter starter = MongodStarter.getDefaultInstance();
mongodExecutable = starter.prepare(mongodConfig);
mongodExecutable.start();
mongoTemplate = new MongoTemplate(new MongoClient(ip, port), "test");
}
@AfterClass
public static void afterAll(){
mongodExecutable.stop();
}
@Test
public void test(){
repository.deleteAll();
User user = new User();
user.setName("Yang");
Mono<User> monoUser = repository.save(user);
assertThat(monoUser.block().getName()).isEqualTo("Yang");
user = repository.findByName("Yang").block();
assertThat(user.getName()).isEqualTo("Yang");
String id = user.getId();
Mono<User> m = repository.findById(id);
User u = new User();
u.setId(id);
u.setName("Gavin");
monoUser = repository.save(u);
assertThat(monoUser.block().getName()).isEqualTo("Gavin");
}
}
本文的完整代码在https://github.com/redexpress/spring-webflux/tree/master/chapter2-mongodb