使用Spring-MongoDB访问全球分布数据库Cosmos DB(2)

Spring-MongoDB属于Spring Data项目的一个子项目,是专门针对Java Spring开发人员对MongoDB的一个封装,使用方法,代码风格都和之前写Spring代码保持一致;Spring Boot是Spring社区最近比较热的一个快速代码构建项目,自动处理依赖,快速启动项目,"just run",实际上Spring社区希望大家现在开始任何Spring Application都从Spring boot开始。

目前共享单车比较流行,我们就用共享单车作为例子,使用Bike数据模型进行Cosmos DB MongoDB接口的的存储,访问。

Spring-MongoDB访问Cosmos DB

 

1. 打开你的Java开发IDE,你可以使用Spring STS(基于Eclipse免费),或者IntelliJ IDEA,本例中使用IDEA,选择新项目,Spring Initializer ,选择使用的JDK,然后下一步:

 

 

2. 出现Spring Boot基础maven配置页面,输入项目包名称,描述,类型等信息:

 

 

3. 选择需要支持的模型,我们选择NoSQL,然后选择"MongoDB":

 

 

4. 输入项目名称,点击完成,完成项目设置

 

 

5. 首先我们需要构建数据模型,我们这个例子使用目前流行的共享单车作为例子,我们定义单车的设备号,车辆型号,目前位置的经纬度,更新时间等信息:

 

  

public class Bike {

    @Id
    private String deviceID;

    private String bikeType;
    private String city;
    private String country;

    private Double latitude;
    private Double longitude;
    private Date updateDate;

    public Bike() {}

    public Bike(String deviceID, String bikeType, String city, String country)
    {
        this.deviceID = deviceID;
        this.bikeType = bikeType;
        this.city = city;
        this.country = country;
    }

    @Override
    public String toString() {
        return String.format(
                "Bike[id=%s, generation=%s, city=%s, latitude=%f, longitude=%f, updated=%s]",
                deviceID, bikeType, city, latitude, longitude, updateDate.toString());
    }

 

当然后面还会有一大堆的Getter和Setter方法,非常简单,在此就不占用篇幅了。

 

6. 然后我们来定义Bike Repository的搜索接口,Spring-MongoDB最为方便的地方就是你只需要定义接口,然后具体的方法会被auto wired,我们定义两个搜索方法,一个是按照设备号来搜索自行车,一个是按照城市来搜索自行车:

import org.springframework.data.mongodb.repository.MongoRepository;


public interface BikeRepo extends MongoRepository<Bike, String>
{

                                                            
    public List<Bike> findByDeviceID(String deviceID);
    public List<Bike> findByCity(String city);
}

 

 

 

7. 定义Cosmos DB的连接,运维Cosmos DB我们在创建配置的时候使用的是MongoDB接口,也就说连接Cosmos DB可以使用你以前的MongoDB程序而不用做任何修改,直接使用MongoDB的连接即可,使用我们在上一节创建CosmosDB之后得到的你的Java连接串替换以下代码中的连接串:
@Configuration
public class MongoDBConfig {

    public @Bean MongoClient mongoClient() {
        return new MongoClient(new MongoClientURI("mongodb://mycosmos:PASSWORD@mycosmos.documents.azure.cn:10255/?ssl=true&replicaSet=globaldb"));
  
    }

    public @Bean
    MongoTemplate mongoTemplate() {
        return new MongoTemplate(mongoClient(), "bike");
    }
}

 

8. 最后,我们来实现使用Spring Boot和Spring MongoDB来访问CosmosDB的代码,我们首先定义两个测试数据bike1和bike2,插入数据进行保存,然后搜索所有数据,接着测试两个搜索:使用通过deviceID进行搜索,最后测试使用city进行搜索:

@SpringBootApplication
public class DemoApplication implements CommandLineRunner{


@Autowired

private BikeRepo repository;

public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);

}


@Override

public void run(String... args) throws Exception {


repository.deleteAll();


Bike bike1= new Bike("bj001", "Gen2", "beijing", "China");

bike1.setLatitude(23.34);

bike1.setLongitude(24.76);

bike1.setUpdateDate(new Date());


Bike bike2= new Bike("sh001", "Gen3", "Shanghai", "China");

bike2.setLatitude(26.34);

bike2.setLongitude(27.76);

bike2.setUpdateDate(new Date());


//deploy new bicycles

repository.save(bike1);

repository.save(bike2);


//find all bikes as demo

System.out.println("Bicycles found with findAll():");

System.out.println("-------------------------------");
for (Bike bike : repository.findAll()) {
System.out.println(bike);

}
System.out.println();


//find Bike by deviceID

String deviceID = "sh001";

System.out.println("Found bikes with deviceID:" + deviceID);

System.out.println("-------------------------------");

for (Bike bike : repository.findByDeviceID(deviceID)) {
System.out.println(bike);

}
System.out.println();


//find Bike by city

String city = "beijing";

System.out.println("Found bikes by city:" + city);

System.out.println("-------------------------------");

for (Bike bike : repository.findByCity(city)) {
System.out.println(bike);

}
System.out.println();

}
}

 

 

 

8. 运行程序进行测试可以看到,使用标准的MongoDB接口,数据正确保存到了CosmosDB,并通过全部搜索,条件搜索都可以查询数据:

 

 

9.最后我们登录到管理界面,点击"数据资源管理器",选择Documents,可以看到我们刚才使用Spring插入的两条数据:

 

 

10. 最为方便的地方是Cosmos DB在图形化界面上直接提供了MongoDB shell和Mongo Query功能,方便于大家直接查询或者调试,例子如下:

使用Cosmos DB图形化的Mongo Query查询:

使用Cosmos DB图形化的Mongo Shell(预览阶段支持部分功能):

通过本示例可以看到,使用Cosmos DB的MongoDB模型数据服务:

 

  • 和MongoDB完全兼容,不用修改程序
  • PAAS服务,免维护,提供99.99%可用性
  • 自定义吞吐量,吞吐量和数据存储大小不限
  • 可定义的一致性级别
  • 使用partition key的分区支持

下一节介绍Cosmos DB的全球分布特性以及数据访问。

posted on 2017-10-18 10:29  StevenLian  阅读(519)  评论(0编辑  收藏  举报

导航