zoukankan      html  css  js  c++  java
  • 使用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的全球分布特性以及数据访问。

  • 相关阅读:
    Android中的回调Callback
    vim编辑器配置及常用命令
    自定义View 和 ViewGroup
    BluetoothClass详解
    BluetoothServerSocket详解
    NSData转换成NSDictionary
    SDWebImage缓存图片的机制(转)
    非ARC和ARC下创建单利模式的宏定义,可以直接套用
    详细例子构建自定义cell
    使用FMDB框架来加载数据库
  • 原文地址:https://www.cnblogs.com/cloudapps/p/7685399.html
Copyright © 2011-2022 走看看