使用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
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); }
@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(); } }
使用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) 编辑 收藏 举报