qdata是一个很全面的国产数据中台治理系统,但很可惜,网上的支持很少,而且,系统也有很多问题,我折腾了两天,终于基本可以用了,现分享给大家。
我们是用K8S平台安装的,所以先要构建docker镜像。但直接构建会有很多问题,我修正了不少,代码在这里:
https://gitee.com/johnnyzhou/qData/tree/1.1.2-fix/
用1.1.2-fix分支
原版有几个问题:
1、直接依赖spring-boot-starter-test,会导致打包时找不到一个json-smart-2.3.0-SNAPSHOT的包,我改成 test scope了,修复了代码中直接使用test的类
2、增加了actuator,以便k8s健康检查
3、原系统异常处理混乱,很多异常被吃掉了,找不到问题根源,我作了大量修改
4、原系统根本没使用到es, 但引入了es包,导致出错,我清理了
5、服务管理模块的apiId属性错误,导致无法修改和新增,我修复了。
6、增加了Dockerfile及构建镜像的脚本

下面是k8s部署文档:

apiVersion: v1
kind: ConfigMap
metadata:
  name: qdata-config
  namespace: qdata
data:
  application-prod.yml: |
    datasource:
      type: mysql
    
    # Spring配置
    spring:
      # redis 配置
      redis:
        # 地址
        host: 10.16.10.103
        # 端口,默认为6379
        port: 6379
        # 数据库索引
        database: 2
        # 密码
        password: risk@tmp
        # 连接超时时间
        timeout: 10s
        lettuce:
          pool:
            # 连接池中的最小空闲连接
            min-idle: 0
            # 连接池中的最大空闲连接
            max-idle: 8
            # 连接池的最大数据库连接数
            max-active: 8
            # #连接池最大阻塞等待时间(使用负值表示没有限制)
            max-wait: -1ms
      rabbitmq:
        host: 10.16.10.103
        port: 5672
        username: guest
        password: guest
        listener:
          simple:
            acknowledge-mode: manual
            concurrency: 1
            max-concurrency: 10
      datasource:
        druid:
          stat-view-servlet:
            # 是否启用Druid的监控统计功能
            enabled: false
            # 访问Druid监控页面的用户名
            loginUsername: qdata
            # 访问Druid监控页面的密码
            loginPassword: 123456
        dynamic:
          druid:
            # 连接池初始化时创建的连接数量
            initial-size: 5
            # 连接池中最小空闲连接数
            min-idle: 5
            # 连接池中最大活动连接数
            maxActive: 20
            # 连接池等待连接的最长时间(毫秒)
            maxWait: 60000
            # 数据库连接超时时间(毫秒)
            connectTimeout: 30000
            # Socket超时时间(毫秒)
            socketTimeout: 60000
            # 空闲连接的检测周期(毫秒)
            timeBetweenEvictionRunsMillis: 60000
            # 最小空闲连接的存活时间(毫秒)
            minEvictableIdleTimeMillis: 300000
            # 用于检测连接是否有效的SQL语句
            validationQuery: SELECT 1 FROM DUAL
            # 是否在空闲时检测连接的有效性
            testWhileIdle: true
            # 借用连接时是否测试连接的有效性
            testOnBorrow: false
            # 归还连接时是否测试连接的有效性
            testOnReturn: false
            # 是否打开连接池的PreparedStatement缓存
            poolPreparedStatements: true
            # 每个连接池的PreparedStatement缓存上限
            maxPoolPreparedStatementPerConnectionSize: 20
            # 配置Druid的过滤器
            filters: stat,slf4j
            # Druid连接属性配置
            connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
          datasource:
            # 主库数据源配置
            master:
              # 动态加载的配置属性
              driver-class-name: ${${datasource.type}.driver-class-name}
              url: ${${datasource.type}.url}
              username: ${${datasource.type}.username}
              password: ${${datasource.type}.password}
    #        test:
    #          driver-class-name: dm.jdbc.driver.DmDriver
    #          url: jdbc:dm://127.0.0.1:5236/MOON?STU&zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8&schema=MOON&serverTimezone=Asia/Shanghai
    #          username: MOON
    #          password: 1234567890
    
    # 达梦配置文件
    dm8:
      # JDBC驱动类名
      driver-class-name: dm.jdbc.driver.DmDriver
      # 主库JDBC连接URL
      url: jdbc:dm://127.0.0.1:5236/QDATA?STU&zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8&schema=QDATA&serverTimezone=Asia/Shanghai
      # 主库用户名
      username: QDATA
      # 主库密码
      password: 密码
    
    # 人大金仓配置文件
    kingbase8:
      # JDBC驱动类名
      driver-class-name: com.kingbase8.Driver
      # 主库JDBC连接URL
      url: jdbc:kingbase8://127.0.0.1:54321/qdata_dev?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC&currentSchema=qdata
      # 主库用户名
      username: kingbase
      # 主库密码
      password: 123456
    
    # Oracle12c 配置文件
    oracle:
      # JDBC驱动类名
      driver-class-name: oracle.jdbc.OracleDriver
      # 主库JDBC连接URL
      url: jdbc:oracle:thin:@127.0.0.1:1521:xe?oracle.jdbc.timezoneAsRegion=true&oracle.jdbc.defaultTimezone=Asia/Shanghai&currentSchema=ANIVIA
      # 主库用户名
      username: ANIVIA
      # 主库密码
      password: ANIVIA
    
    # 调度器相关配置
    ds:
      # 调度器api前缀
      base_url: http://10.16.10.102:12345/dolphinscheduler
      # 数据质量服务组件HTTP地址
      quality_url: http://127.0.0.1:8083/quality/qualityTaskExecutor/runExecuteTask
      # 数据质量任务dolphinscheduler项目编码
      http_quality_projectCode: 134799536571008
      # 调度器令牌(可以自行修改)
      token: 93011f9ab90a5e14bb448fad57582c51
      # 资源中心路径
      resource_url: /dolphinscheduler/
      # spark相关配置
      spark:
        #spark-master的地址
        master_url: spark://127.0.0.1:7077
        #jar包在ds的路径
        main_jar: file:/dolphinscheduler/default/resources/spark-jar/qdata-etl-3.8.8.jar
        #jar main入口
        main_class: tech.qiantong.qdata.spark.etl.EtlApplication
      # hdfs相关配置
      hdfs:
        #NameNode RPC地址(客户端连接 HDFS 的入口地址)
        url: hdfs://127.0.0.1:8020
      # 调度器 Redis 配置(用于获取最新数据源信息,保障任务执行)
      redis:
        # 地址
        host: 127.0.0.1
        # 端口,默认为6379
        port: 6379
        # 数据库索引
        database: 0
        # 密码
        password:
    
    path:
      # 数据质量服务前缀
      quality_url: http://127.0.0.1:8083/quality/qualityTaskExecutor


    mysql:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://10.16.10.103:3307/qdata?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
      username: qdata
      password: Qd123#@!
    
    
    # Redis配置
    redis:
      host: 10.16.10.103
      port: 6379
      database: 2
    
    # Spark配置(如果用到数据汇聚模块)
    spark:
      master_url: spark://<Spark Master IP>:7077
    # 日志级别
    logging:
      level:
        tech.qiantong: INFO
  application.yml: |
    qdata:
      # 名称
      name: qData
      # 版本
      version: 3.8.8
      # 版权年份
      copyrightYear: 2024
      # 文件路径 示例( Windows配置D:/qdata/uploadPath,Linux配置 /home/qdata/uploadPath) -- 需要和 file 模块保持一致
      profile: ${user.dir}/upload/
      # 获取ip地址开关
      addressEnabled: false
      # 验证码类型 math 数字计算 char 字符验证
      captchaType: math
    # 开发环境配置
    server:
      # 服务器的HTTP端口,默认为8080
      port: 8080
      servlet:
        # 应用的访问路径
        context-path: /
      tomcat:
        # tomcat的URI编码
        uri-encoding: UTF-8
        # 连接数满后的排队数,默认为100
        accept-count: 1000
        threads:
          # tomcat最大线程数,默认为200
          max: 800
          # Tomcat启动初始化的线程数,默认值10
          min-spare: 100

    # 日志配置
    logging:
      level:
        tech.qiantong: debug
        org.springframework: warn

    # 用户配置
    user:
      password:
        # 密码最大错误次数
        maxRetryCount: 5
        # 密码锁定时间(默认10分钟)
        lockTime: 10
        #万能密码 配置为空则不生效
        universalPassword: gfh78h23789#$gfdy845

    # Spring配置
    spring:
      cache:
        type: jcache
        jcache:
          config: classpath:ehcache.xml
      thymeleaf:
        prefix: classpath:/dist/
        mode: HTML
        encoding: utf-8
        cache: false
      # 资源信息
      messages:
        # 国际化资源文件路径
        basename: i18n/messages
      profiles:
        active: dev  # 默认激活的环境,可以在启动时覆盖
      config:
        import:
          - "application-${spring.profiles.active}.yml"
          - "classpath:application-auth-${spring.profiles.active}.yml"
          - "classpath:application-file-${spring.profiles.active}.yml"
          # 示意:引入业务模块配置文件(请按照项目情况调整)
          - "classpath:application-system-${spring.profiles.active}.yml"
      # 文件上传
      servlet:
        multipart:
          # 单个文件大小
          max-file-size: 3000MB
          # 设置总上传的文件大小
          max-request-size: 3000MB
      elasticsearch: 
        uris: http://10.16.10.96:9200,http://10.16.10.97:9200,http://10.16.10.98:9200
      # 服务模块
      devtools:
        restart:
          # 热部署开关
          enabled: false

    # token配置
    token:
      # 令牌自定义标识
      header: Authorization
      # 令牌自定义标识
      rpHeader: token
      # 令牌密钥
      secret: abcdefghijklmnopqrstuvwxyz
      # 令牌有效期(默认30分钟)
      expireTime: 600
      
      # MyBatis配置
      # mybatis:
      # 搜索指定包别名
      # typeAliasesPackage: tech.qiantong.**.domain
      # 配置mapper的扫描,找到所有的mapper.xml映射文件
      # mapperLocations: classpath*:mapper/**/*Mapper.xml
      # 加载全局的配置文件
      # configLocation: classpath:mybatis/mybatis-config.xml

    # MyBatis Plus配置
    mybatis-plus:
      # 搜索指定包别名
      typeAliasesPackage: tech.qiantong.**.dataobject,tech.qiantong.**.dataobject.assetchild, tech.qiantong.**.domain
      # 配置mapper的扫描,找到所有的mapper.xml映射文件
      mapperLocations: classpath*:mapper/**/*Mapper.xml
      # 加载全局的配置文件
      configLocation: classpath:mybatis/mybatis-config.xml
      global-config:
        # 关闭 MyBatis-Plus 的 Banner
        banner: false
        db-config:
          # 主键类型 AUTO 自增 NONE 空 INPUT 用户输入 ASSIGN_ID 雪花 ASSIGN_UUID 唯一 UUID
          idType: AUTO
          # 全局逻辑删除字段名
          logic-delete-field: delFlag
          # 逻辑已删除值(默认为1)
          logic-delete-value: 1
          # 逻辑未删除值(默认为0)
          logic-not-delete-value: 0
          # 字段验证策略之 insert,在 insert 的时候的字段验证策略 IGNORED 忽略 NOT_NULL 非NULL NOT_EMPTY 非空 DEFAULT 默认 NEVER 不加入 SQL
          insertStrategy: NOT_NULL
          # 字段验证策略之 update,在 update 的时候的字段验证策略
          updateStrategy: NOT_NULL
          # 字段验证策略之 select,在 select 的时候的字段验证策略既 wrapper 根据内部 entity 生成的 where 条件
          where-strategy: NOT_NULL

    mybatis-plus-join:
      # 是否打印 mybatis plus join banner,默认true
      banner: false
      # 全局启用副表逻辑删除,默认true。关闭后关联查询不会加副表逻辑删除
      sub-table-logic: true
      # 拦截器MappedStatement缓存,默认 true
      ms-cache: true
      # 表别名(默认 t)
      table-alias: t
      # 副表逻辑删除条件的位置,支持 WHERE、ON,默认 ON
      logic-del-type: on

    # PageHelper分页插件
    pagehelper:
      helperDialect: mysql
      supportMethodsArguments: true
      params: count=countSql

    # 防止XSS攻击
    xss:
      # 过滤开关
      enabled: true
      # 排除链接(多个用逗号分隔)
      excludes: /system/notice
      # 匹配链接
      urlPatterns: /system/*,/monitor/*,/tool/*

    # Swagger 分组配置
    springdoc:
      swagger-ui:
        path: /swagger-ui.html
        tags-sorter: alpha
        operations-sorter: alpha
      api-docs:
        path: /v3/api-docs
      group-configs:
        - group: 'system'
          paths-to-match: '/**'
          packages-to-scan: tech.qiantong.qdata.module.system.controller
        - group: 'example'
          paths-to-match: '/**'
          packages-to-scan: tech.qiantong.qdata.module.example.controller
        - group: 'ai'
          paths-to-match: '/**'
          packages-to-scan: tech.qiantong.qdata.module.ai.controller
    # Swagger 增强配置
    knife4j:
      enable: true
      documents:
        -
          group: 2.X版本
          name: 接口签名
          locations: classpath:sign/*
      setting:
        language: zh-CN
        enable-swagger-models: true
        enable-document-manage: true
        swagger-model-name: 实体类列表
        enable-version: false
        enable-reload-cache-parameter: false
        enable-after-script: true
        enable-filter-multipart-api-method-type: POST
        enable-filter-multipart-apis: false
        enable-request-cache: true
        enable-host: false
        enable-host-text: 127.0.0.1:8080
        enable-home-custom: true
        home-custom-path: classpath:markdown/home.md
        enable-search: false
        enable-footer: false
        enable-footer-custom: true
        footer-custom-content: Apache License 2.0 | Copyright  2025-[江苏千桐科技有限公司])
        enable-dynamic-parameter: false
        enable-debug: true
        enable-open-api: true
        enable-group: true
      cors: false
      production: false
      basic:
        enable: true
        username: test
        password: 12313

    ## 工作流模块的访问地址
    flyflow:
      url: http://127.0.0.1:26859/

    #ID生成器使用 为以后分布式不重复ID做应用
    #工作机器ID(0~31)
    id.workerId: 1
    #数据中心ID(0~31)
    id.datacenterId: 1
    management:
      endpoint:
        health:
          enabled: true
        env:
          enabled: true
      health:
        elasticsearch:
          enabled: false

qdata-server.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: qdata-server
  namespace: qdata
  labels:
    app: qdata-server
spec:
  replicas: 1
  selector:
    matchLabels:
      app: qdata-server
  template:
    metadata:
      labels:
        app: qdata-server
    spec:
      containers:
        - name: qdata-server
          image: 10.16.10.28:8088/qdata/qdata-server:1.1.2.1  # 替换为你的镜像地址
          imagePullPolicy: Always
          ports:
            - containerPort: 8080
              name: http
          env:
            - name: SPRING_PROFILES_ACTIVE
              value: "prod"
            - name: SPRING_CONFIG_LOCATION
              value: "file:/app/config/"  # 显式指定路径
          volumeMounts:
            - name: config
              mountPath: /app/config  # 挂载配置文件
          resources:
            requests:
              memory: "2Gi"
              cpu: "200m"
            limits:
              memory: "4Gi"
              cpu: "2000m"
          readinessProbe:
            httpGet:
              path: /actuator/health
              port: 8080
            initialDelaySeconds: 10
            periodSeconds: 10
            failureThreshold: 10
          livenessProbe:
            httpGet:
              path: /actuator/health
              port: 8080
            initialDelaySeconds: 10
            periodSeconds: 5
            failureThreshold: 20
      volumes:
        - name: config
          configMap:
            name: qdata-config
---
apiVersion: v1
kind: Service
metadata:
  name: qdata-server-service
  namespace: qdata
spec:
  selector:
    app: qdata-server
  ports:
    - protocol: TCP
      port: 8080
      targetPort: 8080
      name: http
  type: ClusterIP
Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐