SpringBoot+Maven整合SuperMap iObjects Java进行开发

之前曾经介绍过如何在Eclipse里通过iObjectsJava搭建Web开发环境,当时采用的还是传统的Java Web Application的方式进行开发。随着Java技术的发展,这种模式已经越来越跟不上开发的潮流了。

时下SpringBoot已经成为了事实上的开发标准,SpringCloud也正和Docker一起进行的如火如荼。所以,再不跟上时代的步伐,就要被这个时代所淘汰了。所以,笔者抓紧补充一篇文章,告诉大家如何通过SpringBoot的方式进行SuperMap iObjects Java的开发。

众所周知,想要进行SpringBoot开发,首先就得在本地搭建Maven运行环境,以及本地Maven仓库。Maven本地仓库环境的搭建网上有铺天盖地的资料,此处就不再赘述了。由于在SuperMap官网和主要的在线仓库中均没有找到SuperMap iObjects Java的包。所以首先介绍一下如何自行将SuperMap iObjects Java安装到本地的镜像仓库中。

首先找到要安装的iObjects Java的jar包,在命令行运行如下命令,就可以将对应的jar包安装到本地仓库中:

SpringBoot+Maven整合SuperMap iObjects Java进行开发_第1张图片

现在去本地的Maven仓库中便可找到刚才安装的jar包文件:

 SpringBoot+Maven整合SuperMap iObjects Java进行开发_第2张图片

好了,现在就可以开始使用刚才安装的iObjectsJava仓库包文件进行SpringBoot开发了。

首先, 需要创建SpringBoot工程,搭建一个基础的SpringBoot微服务环境。如果对此有疑问可自行查阅资料。搭建好SpringBoot开发环境后,需要在pom.xml中引用上面安装到本地仓库中的objects-data包进行开发,在pom.xml加入如下依赖:


	4.0.0
	com.supermap.springboot
	iobjectsdemo
	0.0.1-SNAPSHOT
	
		UTF-8
		UTF-8
		10.1.2.19530
	
	
	
		org.springframework.boot
		spring-boot-starter-parent
		2.4.4
	
	
		
			org.springframework.boot
			spring-boot-starter-web
		

		
		
			com.supermap.objects
			objects-data
			${supermap.version}
		
	

	
		
		
			
			
				maven-compiler-plugin
				
				
					1.8
					1.8
					UTF-8
				
			

			
			
				org.springframework.boot
				spring-boot-maven-plugin
			
		
	

然后就可以创建Controller类了:

package com.supermap.springboot.controllers;

import java.util.ArrayList;
import java.util.List;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import com.supermap.data.CursorType;
import com.supermap.data.Dataset;
import com.supermap.data.DatasetVector;
import com.supermap.data.Datasets;
import com.supermap.data.Datasource;
import com.supermap.data.DatasourceConnectionInfo;
import com.supermap.data.Datasources;
import com.supermap.data.FieldInfos;
import com.supermap.data.QueryParameter;
import com.supermap.data.Recordset;
import com.supermap.data.Workspace;

@RestController
public class QueryController {

	@GetMapping(path = "/query")
	public String queryData(String name) {
		StringBuilder strResult = new StringBuilder("[");

		Workspace workspace = new Workspace();
		Datasources datasources = workspace.getDatasources();
		DatasourceConnectionInfo datasourceConnectionInfo = new DatasourceConnectionInfo(
				"D:\\ProgramFiles\\SuperMap\\10i\\supermap-iobjectsjava-10.1.2-19530-86195-win-all\\SampleData\\World\\World.udbx",
				"sqlquery", "");
		Datasource datasource = datasources.open(datasourceConnectionInfo);

		// 得到数据集集合类,得到面数据集,通过数据源复制数据集
		DatasetVector datasetVector = (DatasetVector) datasource.getDatasets().get("World");
		// 构造查询参数类,设置查询条件
		QueryParameter queryParameter = new QueryParameter();
		queryParameter.setAttributeFilter("Country='" + name + "'");
		queryParameter.setCursorType(CursorType.STATIC);
		queryParameter.setHasGeometry(false);

		// 查询得到结果记录集
		Recordset recordset = datasetVector.query(queryParameter);
		FieldInfos fieldInfos = recordset.getFieldInfos();
		int count = fieldInfos.getCount();
		List lstFields = new ArrayList();
		for (int i = 0; i < count; i++) {
			String fieldname = fieldInfos.get(i).getName();
			lstFields.add(fieldname);
		}
		for (recordset.moveFirst(); !recordset.isEOF(); recordset.moveNext()) {
			strResult.append("{");
			for (int i = 0; i < lstFields.size(); i++) {
				String fieldName = lstFields.get(i);
				String fieldValue = recordset.getString(fieldName);
				strResult.append("\"" + fieldName + "\":\"" + fieldValue + "\",");
			}
			if (strResult.length() > 0)
				strResult.deleteCharAt(strResult.length() - 1);
			strResult.append("},");
		}
		if (strResult.length() > 0)
			strResult.deleteCharAt(strResult.length() - 1);
		strResult.append("]");
		recordset.close();
		datasource.close();
		workspace.close();
		return strResult.toString();
	}
}

此时运行工程,访问服务时一定会遇到如下错误:

SpringBoot+Maven整合SuperMap iObjects Java进行开发_第3张图片

这是因为没有配置iObjectsJava环境变量, 首先定义iObjectsJava的环境变量(名称随意):

SpringBoot+Maven整合SuperMap iObjects Java进行开发_第4张图片

将上述变量添加到Path的最前方:

SpringBoot+Maven整合SuperMap iObjects Java进行开发_第5张图片 

重新打开Eclipse工程开发环境,然后再次启动项目运行。此时再去请求服务:

 SpringBoot+Maven整合SuperMap iObjects Java进行开发_第6张图片

说明:上图中的结果是因为笔者使用了chrome的JSONView插件,如果未安装该插件就会以文本的方式输出,但无妨。 

OK。此时开发工作基本结束了。下面还有一个工作:如何实现工程打包及绿色部署。

首先在开发环境中通过Maven的install命令生成可运行的jar包:

SpringBoot+Maven整合SuperMap iObjects Java进行开发_第7张图片

 但此时能运行是因为我在path里为其配置了SuperMap iObjects Java的环境变量。如何能像iServer一样不往path里配置iObjects Java的路径,直接拷贝后就可以启动哪?通过参考iServer的启动方式,笔者发现通过将JRE及iObjects Java的包拷贝的可执行jar包相同的路径下,SpringBoot+Maven整合SuperMap iObjects Java进行开发_第8张图片

 

然后再编写一下启动脚本文件(startup.bat)即可:

set WEBAPP_ROOT=%cd%
set "JRE_HOME=%WEBAPP_ROOT%\support\jre"
set "UGO_HOME=%WEBAPP_ROOT%\support\objectsjava" 
set Path=%UGO_HOME%\bin;%UGO_HOME%\third_lib;%JRE_HOME%\bin;%Path%
java -jar iobjectsdemo-0.0.1-SNAPSHOT.jar

linux下的启动脚本(startup.sh)为:

export JRE_HOME=./support/jre
export LD_LIBRARY_PATH=./support/objectsjava/bin:$LD_LIBRARY_PATH
export PATH=./support/objectsjava/bin:$JRE_HOME/bin:$PATH
export CLASSPATH=.:/support/objectsjava/bin:$JRE_HOME/lib:support/objectsjava/bin:$JRE_HOME/lib:$JRE_HOME/lib/tools.jar
java -jar iobjectsdemo-0.0.1-SNAPSHOT.jar &

OK,将其拷贝到没有任何SuperMap iObjects Java的新环境下,配置好许可后,双击(或在linux下运行sh命令),即可成功启动:

SpringBoot+Maven整合SuperMap iObjects Java进行开发_第9张图片

 这样,就可以让SuperMap iObjects Java搭乘SpringCloud+SpringBoot+Docker的东风实现弹性伸缩部署了。

你可能感兴趣的:(SuperMap,ObjectsJava开发,SpringBoot,maven,spring,boot,intellij-idea)