Spring boot是對Spring的進一步封裝,旨在簡化Spring的安裝和配置過程。我們知道使用Spring搭建項目環境,往往需要引用很多jar包,並隨著業務的逐漸複雜,建立出很多的xml檔案。Spring boot封裝了Spring整合的很多服務元件,並自動建立這些對象的執行個體,你只用將所需使用的服務元件的jar包引入即可快速構建開發環境。
Spring boot所整合的服務元件,可在官網找到,你可以勾選所使用的服務元件,並把相應maven 項目下載到本地。
Spring boot同樣整合了對MongoDB等Nosql的支援,下面介紹通過Spring boot串連和操作MongoDB。 建立Spring boot項目
本文使用的IDE是idea,其Spring initializr是建立Spring Boot項目的快速可視化組件,當然你也可以構建maven項目,然後在Spring boot官網將相關pom引入。
建立Spring boot項目,輸入spring boot組件自動設定網址,點擊next。
輸入maven項目的的相關資訊,並選擇jdk版本。
選擇需要的服務元件。
建立出的Spring boot的項目是個空的maven項目,pom內包含需要的jar包。 Spring boot串連mongoDB
Spring data提供了操作多種資料庫的支援,其api簡潔,調用方便。我們使用Spring data進行MongoDB串連。在此介紹兩種串連mongodb的方式。Spring boot有意簡化甚至消除原生Spring架構的xml配置,所以spring boot項目推崇盡量不使用xml設定檔進行bean的管理。 第一種方式是使用properties進行mongoDB的串連配置
在application.properties中進行mongoDB連接字串配置,org.springframework.boot.autoconfigure.mongo提供了對mongoDB連接字串的配置支援。我們對指定屬性進行配置即可。
注意mongo 2.4以上版本已經不支援如下配置了。
spring.data.mongodb.host=127.0.0.1spring.data.mongodb.port=27017spring.data.mongodb.username=rootspring.data.mongodb.password=rootspring.data.mongodb.database=gis
2.4以上版本使用如下串連配置:
spring.data.mongodb.uri=mongodb://root(userName):root(password)@localhost(ip地址):27017(連接埠號碼)/gis(collections/資料庫)
建立資料庫操作測試類別。
@Componentpublic class DBDaoTest { @Autowired private MongoTemplate mongoTemplate; public void save(Polygon polygon){ mongoTemplate.save(polygon); } public void saveRegions(List<GisRegion> gisRegionList){ mongoTemplate.insert(gisRegionList,GisRegion.class); } public <T> T findById(Class<T> entityClass, String id) { return mongoTemplate.findById(id, entityClass); } public <T> List<T> findAll(Class<T> entityClass) { return mongoTemplate.findAll(entityClass); } public <T> void remove(T entity) { mongoTemplate.remove(entity); } public <T> void add(T entity) { mongoTemplate.insert(entity); } public <T> void addAll(List<T> entity) { mongoTemplate.insertAll(entity); } public <T> void saveOrUpdate(T entity) { mongoTemplate.save(entity); } public <T> T findOne(Class<T> entityClass) { return mongoTemplate.findOne(new Query(), entityClass); } public List<Polygon> findIntersective(GeoJson geoJson){ Query query=new Query(Criteria.where("geometry").intersects(geoJson)); List<Polygon> list=mongoTemplate.find(query,Polygon.class); return list; } public boolean isExistIntersective(GeoJson geoJson){ Query query=new Query(Criteria.where("geometry").intersects(geoJson).and("_id").is(100000)); boolean res=mongoTemplate.exists(query,GisRegion.class); return res; }}
org.springframework.data.mongodb.core包的MongoTemplate類提供對mongodb的所有操作方法,並且會自動裝配串連資料庫的MongoDbFactory類對象,我們在application.properties中定義了MongoDbFactory對象所需要的參數,Spring boot會自動幫我們建立該對象供MongoTemplate使用,如果我們沒有指定連接字串,Spring boot在@Autowired自動裝配MongoTemplate對象時,會預設使用127.0.0.1:27017地址、test資料庫和無密碼訪問方式。
更多資料庫操作方式,請查看MongoTemplate類的具體內容。 第二種方式是建立配置類進行mongoDB的串連配置
在maven resource檔案夾下建立database.properties檔案,定義資料庫連接字串。
mongodb.uri=127.0.0.1:27017mongodb.username=rootmongodb.password=rootmongodb.schema=gis
考慮在項目實際開發過程中經常會切換環境,所以可以採用引用外部配置參數的辦法,Spring boot在propertis檔案中使用@…@預留位置指定外部參數。在pom檔案profile中定義外部參數,供propertis檔案引用。pom.xml的profile檔案配置如下:
<project>... <profiles> <profile> <id>dev</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <db.mongo.server>127.0.0.1:27017</db.mongo.server> <db.mongo.schema>gis</db.mongo.schema> <db.mongo.user>root</db.mongo.user> <db.mongo.password>root</db.mongo.password> </properties> </profile> </profiles></project>
database.properties檔案:
#mongodb.uri=@db.mongo.server@#mongodb.username=@db.mongo.user@#mongodb.password=@db.mongo.password@#mongodb.schema=@db.mongo.schema@
建立MongoDBConfig類,執行個體化MongoDbFactory bean:
@Configuration //等價於XML中配置bean@PropertySource(value = "classpath:database.properties",ignoreResourceNotFound = true)public class MongoDBConfig { @Value("${mongodb.schema}") private String databaseName; @Value("${mongodb.uri}") private String uri; @Value("${mongodb.username}") private String userName; @Value("${mongodb.password}") private String password; @Bean public MongoDbFactory mongoDbFactory() throws UnknownHostException { String uriStr="mongodb://"+userName+":"+password+"@"+uri+"/"+databaseName; System.out.println(uriStr); MongoClientURI mongoClientURI=new MongoClientURI(uriStr); MongoDbFactory mongoDbFactory=new SimpleMongoDbFactory(mongoClientURI); return mongoDbFactory; }}
Spring架構會在@Autowired自動裝配MongoTemplate時,使用該MongoDbFactory bean。