基于超图SuperMap iObjects JAVA的SpringBoot工程搭建与整合(二)—— SuperMap iObjects JAVA 在SpringBoot工程中如何进行参数化配置

基于超图SuperMap iObjects JAVA的SpringBoot工程搭建与整合(二)—— SuperMap iObjects JAVA 在SpringBoot工程中如何进行参数化配置

第一章:Nexus搭建与Maven引入
第二章:SuperMap iObjects JAVA 在SpringBoot工程中如何进行参数化配置
第三章:SuperMap iObjects JAVA如何与Spring的IOC结合
第四章:SuperMap iObjects JAVA作为Web后台的二开,在MVC中扮演什么角色,如何优雅的组织代码?
第五章:聊一聊SuperMap iObjects JAVA的奇葩设计,阅读避坑(持续更新~)



前言

为什么要啰嗦这个?
因为高内聚、低耦合是我们学生时代就常常听到的名词,但是在工作多年后依然发现身边有人在胡乱写着。不知道是懒还是没有意识
说到这里表达一下个人发现的小规律,关于程序员生活方面。

1.一般代码结构写的规整的程序员,他的办公桌台面通常比较规整,至少不乱。
2.代码缩进合理的人,一般电脑文件存储位置合理,且个人电脑桌面整洁(没有乱文件)。
3.喜欢给自己代码写注释的程序员,多少有点强迫症。同样,这种程序员写出得系统功能BUG率确实低,值得敬佩。

我见过初级开发人员,看到好多GIS开发人员写过的代码,配置信息直接写死到代码中,这样发布版本时候对于运维人员是很痛苦的。也无端增加了发布版本的耗时。
既然使用了SpringBoot,配置信息就选择写到yml或者数据库中吧。


一、配置信息有哪些?

SuperMap iObjects JAVA 的使用场景是扩展后台的GIS能力,所遵循的理论内容包含:工作空间、数据源、数据集、地图、场景等。
其中工作空间的名称与链接信息、数据源的名称与链接信息都应当作为应用系统的配置信息。例如:

超图空间库地址
超图空间库名称
超图空间库用户名
超图空间库用户密码
超图空间库实例名称

二、编写配置

application.yml

supermap:
  server: 192.168.1.110
  database: young
  user_database: SuperMap
  password_database: supermap@123
  name_database: young

三、编写config文件

在com.supermap.config路径下创建YoungSuperMapConfig.java文件

package com.supermap.config;

import lombok.Data;
import lombok.Setter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * 读取项目相关配置
 *
 * @author young
 */
@Component
@ConfigurationProperties(prefix = "supermap")
@Setter
@Data
public class YoungSuperMapConfig {
    /**
     * 超图空间库地址
     */
    private String server;

    /**
     * 超图空间库名称
     */
    private String database;

    /**
     * 超图空间库用户名
     */
    private String user_database;

    /**
     * 超图空间库用户密码
     */
    private String password_database;

    /**
     * 超图空间库实例名称
     */
    private String name_database;

    /**
     * 超图组件生成截图的路径
     */
    private String cad_picture;

}

四、工作空间初始化跟随工程启动

工作空间初始化之后需要在Spring工程其他地方使用,因此工作空间的实例化以及链接工作需要交由Spring工厂进行实例化。
在MVC模型下,以赋予其Service的角色较为合理。
注意: 为了兼容数据库型工作空间和文件型工作空间,特此编写! workspaceConnectionInfo.setType(config.getDatabase() == null ? WorkspaceType.SMWU : WorkspaceType.PGSQL);

com.supermap.service路径下创建WorkSpaceService.java


package com.supermap.service;

import com.supermap.config.YoungSuperMapConfig;
import com.supermap.data.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * 工作空间链接管理与数据源管理
 */
@Component
public class WorkSpaceService {

    @Autowired
    private YoungSuperMapConfig config;
    private Workspace workspace;
    private Datasources datasources;
    private Maps maps;


    /**
     * 初始化工作空间和数据源
     */
    private void init() {
        workspace = new Workspace();
        WorkspaceConnectionInfo workspaceConnectionInfo = new WorkspaceConnectionInfo();
        //        兼容pg工作空间
        workspaceConnectionInfo.setType(config.getDatabase() == null ? WorkspaceType.SMWU : WorkspaceType.PGSQL);
        workspaceConnectionInfo.setVersion(WorkspaceVersion.UGC70);
        workspaceConnectionInfo.setServer(config.getServer());
        workspaceConnectionInfo.setDatabase(config.getDatabase());
        workspaceConnectionInfo.setUser(config.getUser_database());
        workspaceConnectionInfo.setPassword(config.getPassword_database());
        workspaceConnectionInfo.setName(config.getName_database());
//        打开工作空间
        workspace.open(workspaceConnectionInfo);
        datasources = workspace.getDatasources();
    }

    /**
     * 检查工作空间
     */
    private synchronized void checkWorkspace() {
        if (workspace == null) {
            init();
        }
    }

    /**
     * 检查数据源
     */
    private synchronized void checkDatasources() {
        if (datasources == null) {
            init();
        }
    }

    /**
     * 检查地图
     */
    private synchronized void checkMaps() {
        if (maps == null) {
            init();
        }
    }


    /**
     * 关闭数据源
     *
     * @param name
     */
    public synchronized void closeDatasource(String name) {
        checkDatasources();
        datasources.close(name);
    }

    /**
     * 获取工作空间
     *
     * @return
     */
    public synchronized Workspace getWorkspace() {
        checkWorkspace();
        return workspace;
    }

    /**
     * 获取数据源
     *
     * @return
     */
    public synchronized Datasource getDatasource(String name) {
        checkDatasources();
        Datasource datasource = datasources.get(name);
        return datasource;
    }

    /**
     * 获取地图集合
     *
     * @return
     */
    public synchronized Maps getMaps() {
        checkMaps();
        return maps;
    }
}

五、测试工作空间的使用情况

这个时候就可以在test或者controller中使用工作空间中、数据源了,可以对其数据集中的内容进行管理了。
来编写一个TestController测试一下

com.supermap.controller路径下创建TestController.java文件

package com.supermap.controller;

import com.supermap.entity.SmLineQDGX;
import com.supermap.service.WorkSpaceService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


@RestController
@RequestMapping("/test")
public class TestController {

    @Autowired
    private WorkSpaceService workSpaceService;

    // 由于ShiroConfig中配置了该路径可以匿名访问,所以这接口不需要登录就能访问
    @GetMapping("/hello")
    public String hello() {
        workSpaceService.getWorkspace();
        SmLineQDGX smLineQDGX = new SmLineQDGX();
        smLineQDGX.getGeometry();
        smLineQDGX.set入库时间("2023");
        System.out.println(smLineQDGX.get入库时间());
        return "hello spring boot and supermap startup success!";
    }


}

当 workSpaceService.getWorkspace();执行成功后,意味着超图的组件启动成功,且访问工作空间完毕。

在这里插入图片描述

六、运行报错优先考虑是否配置了超图的许可

许可申请与配置要联系超图的技术支持人员
下面说一下怎么配置SuperMap iObjects JAVA 的环境变量

有的朋友会告诉你,超图的组件路径要配置到环境变量中,其实这是一个很low的方式。 为什么这么讲?因为作为GIS后端开发,可能电脑上有很多SuperMap iObjects JAVA 的版本包,我们是不愿意在切换项目开发的时候去修改环境变量的。而且,我们会经常修改Maven引入的iObjects 版本包,因此,我们更希望超图的组件像Maven一样因系统而异

在这里插入图片描述

总结

这个系列文章所涉及的源代码,会放到资源库中供大家下载

欢迎GIS开发的小伙伴留言交流!
下一章:SuperMap iObjects JAVA如何与Spring的IOC结合

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Young-weiai

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值