美文网首页
Spring Boot WebFlux(二):使用MongoDB

Spring Boot WebFlux(二):使用MongoDB

作者: redexpress | 来源:发表于2018-11-13 12:04 被阅读24次

实现

创建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

相关文章

网友评论

      本文标题:Spring Boot WebFlux(二):使用MongoDB

      本文链接:https://www.haomeiwen.com/subject/hzbkfqtx.html