更新时间:2025-07-24 gmt 08:00

开发业务代码-j9九游会登录

准备工作

  • 已并maven,根据以下步骤配置maven。
    1. 标签内添加自己的本地仓库位置路径,这个本地仓库位置是自己创建的。

      d:\apache-maven-3.8.6-bin\repository

      d:\apache-maven-3.8.6-bin\repository 
    2. 修改maven默认的jdk版本。

      标签下添加一个标签,修改maven默认的jdk版本。

           
          jdk-1.8       
                 
              true       
              1.8       
                 
                 
              1.8       
              1.8       
              1.8       
                 
      
  • 安装并配置intellij idea开发工具。
    1. 在intellij idea中选择file > settings > build,execution,deployment > build tools > maven。
    2. 在user settings file中配置setting.xml。
    3. 在local repository中配置自定义的maven仓库地址。
  • java开发环境的配置。

    appstage提供的sdk是基于java1.8版本开发的,如果spring cloud项目使用java11及以上版本,则不支持使用appstage提供的sdk进行应用开发。以下步骤以win7环境配置jdk8 64位为例,如果已经下载jdk并配置好环境请跳过本步骤。

    1. 下载jdk文件。
    2. 下载完成后按照提示安装,位置自选,比如安装到本地c:\program files\java\jdk1.8.0_131。
    3. 配置java环境变量,进行如下操作。
      1. 新建系统变量java_home,变量值为实际jdk安装位置。
      2. 在path中添加%java_home%\bin;%java_home%\jre\bin (注意用英文分号分隔)。
      3. 新建系统变量classpath,变量值为%java_home%\lib\dt.jar;%java_home%\lib\tools.jar。
      4. 打开命令行窗口,输入“java -version”,显示如图1表示配置成功。
        图1 配置成功示例
  • 获取sdk并进行完整性校验。
    • sdk:
    • 完整性校验:

操作步骤

  1. 打开本地spring cloud项目。
  2. 手动导入sdk jar包。
    1. 在项目目录下新建一个lib目录,存放jar包。
    2. 将本地的jar包复制粘贴至lib目录下。
    3. 将jar导入到项目中。
      1. 选择“file > project structure > project settings > module”
      2. 单击“ ”,选择“jars or directories...”
      3. 选中jar包,单击“apply”。导包完成。
  3. (可选)集成orgid登录功能。

    demoorgidlogin项目用于对接orgid组织成员账号服务,对接后可以使用orgid服务完成自身应用的登录、组织管理功能。具体请参考。

  4. 配置微服务。
    1. 微服务接入sts。

      sts提供了微服务之间请求认证以及敏感配置项管理的功能,sts是接入cloud map的前提条件,cloud map依赖sts认证能力。

      1. 将在appstagej9九游会登录首页中创建的demoorgidlogin、demoserviceaservice、demoservicebservice注册到运维中心的acms管理台中,具体请参见将微服务注册到acms
        图2 注册微服务
      2. 在demoorgidlogin、demoservicea、demoserviceb的pom.xml中添加sts依赖。

        如果将sdk放到外部maven仓中,则只需要添加sts-spring-boot依赖。

        本例是以本地依赖的方式引入sdk,即手动将本地下载的sdk jar包引入到工程的lib目录下,需要添加的依赖如下所示。实际需要依赖的包只有sts-spring-boot,其他均是间接依赖,如果启动过程中需要其他开源依赖也需要手动加入。

              
             com.huawei.wisecloud.sts
             sts-spring-boot
             1.1.19.100
             system
             ${project.basedir}/lib/sts-spring-boot-1.1.19.100.jar
        
              
             com.huawei.wisecloud.sts
             sts-key-sdk
             1.1.19.100
             system
             ${project.basedir}/lib/sts-key-sdk-1.1.19.100.jar
        
              
             com.huawei.wisecloud.sts
             sts-sdk-base
             1.1.19.100
             system
             ${project.basedir}/lib/sts-sdk-base-1.1.19.100.jar
        
              
             com.huawei.wisecloud.kms
             cloudsoa-security
             1.1.14.101
             system
             ${project.basedir}/lib/cloudsoa-security-1.1.14.101.jar
        
      3. 增加sts配置项。

        在demoorgidlogin、demoservicea、demoserviceb的classpath下增加application.properties配置文件,本实践配置项如下:

        sts.server.domain=10.33.102.162:8080      #sts接入地址
        sts.config.path=/opt/huawei/certs/jamesservice22a/demoserviceaservice/demoserviceaservice.ini       #sts微服务证书路径,iac3.0会将证书放在固定路径下,格式为/opt/huawei/certs/服务名/微服务名/微服务名.ini
      4. 启动sts。

        在微服务的启动类中添加注解,本实践是在serviceaspringbootapplication.java、servicebspringbootapplication.java和demoorgidlogin的orglogin.java文件中添加@enablestsautoinitialization(value = "application.properties")注解。注解的含义是启动sts自动初始化,其中value是指定sts的配置文件路径。

    2. 敏感信息配置项托管。
      1. 使用sts的敏感配置项管理功能 ,需要在acms中录入敏感配置项,具体请参见录入敏感配置
      2. 在iac脚本中的业务配置项配置文件中指定敏感配置项取值路径。
      3. 在iac脚本中的业务配置项属性定义文件中,声明该配置项为敏感配置项。
      4. 在配置文件中增加敏感配置项名称的配置。
      5. 启动敏感配置项自动解密。
      使用orgid登录时所需的客户端密钥,属于敏感配置项,需要使用sts的配置敏感配置项托管功能。本实践中配置如下:
      1. 在acms中录入配置敏感配置项,如图3所示。
        图3 录入敏感配置项
      2. 本实践在iac脚本demoorgidlogin的业务配置项文件config_records.yaml增加一个名为spring.redis.password的敏感配置项,这个敏感配置项是访问redis的密码。
        spring.redis.password: microservice/jamesservice22a/demoorgidlogin/spring.redis.password/default  #redis访问密码,属于敏感配置项,已被sts(acms)纳管,配置路径为:microservice/服务名/微服务名/敏感配置项名称/敏感配置项标签
      3. 本实践中访问redis的密码spring.redis.password为敏感配置项,在iac脚本demoorgidlogin的业务配置项属性定义文件config_schema.yaml中声明。
        type: object
        properties:
           spring.redis.password:
             format: sensitive
      4. 在application.yml配置文件中增加敏感配置项名称的配置。
        nuwa:
           security:
             config:
               sensitivewords: spring.redis.password,org.app.protocol-login.oauth.clientsecret,org.app.jwt-key
      5. 在demoorgidlogin的启动类中添加注解,启动敏感配置项自动解密。本实践是在orglogin.java文件中添加@enablestsencryptableproperties注解。
    3. 微服务接入cloud map。
      spring cloud通常是使用其自带的eureka注册中心,接入appstage可以将eureka注册中心替换为cloud map,cloud map其优势为除了能够提供服务发现的功能,还可以提供数据库、敏感信息等的纳管功能。
      1. 在demoorgidlogin、demoservicea、demoserviceb的pom.xml中添加cloud map依赖。

        如果将sdk放到外部maven仓中,则只需要添加nuwa-cloudmap-core依赖。

        本例是以本地依赖的方式引入sdk,即手动将本地下载的sdk jar包引入到工程的lib目录下,需要添加的依赖如下所示。实际需要依赖的包只有nuwa-cloudmap-core,其他均是间接依赖,如果启动过程中需要其他开源依赖也需要手动加入。

             
             com.huawei.wisecloud.nuwa
             spring-cloud-starter-cloudmap-discovery
             1.0.12.100
             system
             ${project.basedir}/lib/spring-cloud-starter-cloudmap-discovery-1.0.12.100.jar
        
             
             com.huawei.wisecloud.nuwa
             nuwa-cloudmap-core
             1.0.12.100
             system
             ${project.basedir}/lib/nuwa-cloudmap-core-1.0.12.100.jar
        
             
             com.huawei.wisecloud.nuwa
             nuwa-cloudmap-spring-boot-starter
             1.0.12.100
             system
             ${project.basedir}/lib/nuwa-cloudmap-spring-boot-starter-1.0.12.100.jar
        
      2. 增加cloud map配置项。

        本实践分别在demoservicea、demoserviceb的application.yaml配置文件及demoorgidlogin的application.yml文件中添加以下配置项:

        nuwa:
          cloudmap:
            read: cloudmap                              #使用cloud map方式进行微服务间通信
            clustername: springclouddemo                #微服务注册到cloud map的集群 
            provider:
              cluster: springclouddemo                  #提供服务的其他同样被注册到cloud map的微服务集群名 
            serveraddr: http://10.34.32.243:80          #cloud map访问地址
            version: 1.0.0.100                          #微服务版本号
            namespacename: cn_dev_default               #cloud map访问命名空间
      3. 启动初始化cloud map,将微服务注册到cloud map。

        在微服务的启动类中添加注解,本实践是在serviceaspringbootapplication.java、servicebspringbootapplication.java和demoorgidlogin的orglogin.java文件中添加@enablediscoveryclient注解。同时在启动类中完成将resttemplate注册到spring容器中,后续微服务间调用使用注册到spring容器中的resttemplate,代码如下:

        package com.huawei.demo.servicea;
        import org.springframework.boot.springapplication;
        import org.springframework.boot.autoconfigure.springbootapplication;
        import org.springframework.cloud.client.discovery.enablediscoveryclient;
        import org.springframework.cloud.client.loadbalancer.loadbalanced;
        import org.springframework.context.annotation.bean;
        import org.springframework.web.client.resttemplate;
        import com.huawei.wisesecurity.sts.springboot.security.annotation.enablestsautoinitialization;
        @springbootapplication
        @enablestsautoinitialization(value = "application.properties")
        @enablediscoveryclient
        public class serviceaspringbootapplication {
            public static void main(string[] args) {
                springapplication.run(serviceaspringbootapplication.class, args);
            }
            @bean
            @loadbalanced
            public resttemplate resttemplate() {
                return new resttemplate();
            }
        }

        微服务间调用:

        public orderinfo findorder(string orderid, httpservletrequest request) {
                orderinfo orderinfo = ordermapper.getorderbyid(orderid);
                string url = demoserviceaurl   "/user/"   orderinfo.getuserid();
                httpheaders headers = createheaders(request);
                httpentity entity = new httpentity<>(null, headers);
                responseentity responseentity = resttemplate.exchange(url, httpmethod.get, entity, userinfo.class); ;
                if (responseentity != null) {
                    orderinfo.setuserinfo(responseentity.getbody());
                }
                return orderinfo;
            }
      4. 在appstage运维中心的cloud map中验证微服务注册,具体请参见查看注册到cloudmap的微服务列表
        图4 验证微服务注册
    4. 使用wisedba进行数据库纳管。
      1. 在appstage运维中心的wisedba中申请数据库并创建schema,具体请参见创建数据库实例及在wisedba中创建schema

        本实践中申请的数据库性能规格为:独享型/gaussdb.mysql.large.x86.8/2vcpus/16gb,数据库实例名称为:gauss-springclouddemo2,demoserviceaservice和demoservicebservice的schema名称分别为:springclouddemoa、springclouddemob。

      2. 在wisedba管理台配置连接信息,并注册到cloud map中,在创建数据库连接时,直接调用cloud map中的注册信息。
        单击wisedba实例列表中的数据库实例名称,单击左侧导航栏的“sdk配置”,新增微服务和数据库的对应配置,具体请参见新增数据库sdk配置并注册到cloud map,本实践中配置如图5所示。
        图5 sdk配置
      3. 在demoservicea和demoserviceb的pom.xml中添加rainbow sdk依赖。

        如果将sdk放到外部maven仓中,则只需要添加rainbow-proxy依赖。

        本例是以本地依赖的方式引入sdk,即手动将本地下载的sdk jar包引入到工程的lib目录下,需要添加的依赖如下所示。实际需要依赖的包只有rainbow-proxy,其他均是间接依赖,如果启动过程中需要其他开源依赖也需要手动加入。

                  
             com.huawei.wisecloud.nuwa
             rainbow-proxy
             1.2.18.102
             system
             ${project.basedir}/lib/rainbow-proxy-1.2.18.102.jar
        
                  
             com.huawei.wisecloud.nuwa
             rainbow-core-drds
             1.2.18.201
             system
             ${project.basedir}/lib/rainbow-core-drds-1.2.18.201.jar
        
                
             com.huawei.wisecloud.gpaas
             gpaas-middleware-common
             2.2.6.100
             system
             ${project.basedir}/lib/gpaas-middleware-common-2.2.6.100.jar
        
      4. 初始化rainbow。
        在demoservicea、demoserviceb的com/huawei/demo/servicea/config/下添加applicationautoconfig.java文件,代码如下:
        package com.huawei.demo.serviceb.config;
        import javax.sql.datasource;
        import org.mybatis.spring.sqlsessionfactorybean;
        import org.mybatis.spring.mapper.mapperscannerconfigurer;
        import org.springframework.context.environmentaware;
        import org.springframework.context.annotation.bean;
        import org.springframework.context.annotation.configuration;
        import org.springframework.context.annotation.dependson;
        import org.springframework.context.annotation.import;
        import org.springframework.core.ordered;
        import org.springframework.core.annotation.order;
        import org.springframework.core.env.environment;
        import org.springframework.jdbc.core.jdbctemplate;
        import org.springframework.jdbc.datasource.datasourcetransactionmanager;
        import org.springframework.transaction.support.transactiontemplate;
        import com.huawei.nuwa.map.client.nuwamapclient;
        import com.huawei.nuwa.map.spring.boot.autoconfigure.nuwacloudmapautoconfiguration;
        import com.huawei.rainbow.jdbc.dbgroupdatasource;
        import com.huawei.wisesecurity.sts.springboot.security.configuration.stsencryptablepropertiesconfiguration;
        /**
         * rainbow启动
         */
        @configuration
        @order(ordered.highest_precedence)
        @import(value = {nuwacloudmapautoconfiguration.class, stsencryptablepropertiesconfiguration.class})
        public class applicationautoconfig implements environmentaware {
            private environment environment;
            /**
             * rainbow需要依赖sts和cloud map启动,创建datasource
             *
             * @param client nuwamapclient值对象
             * @return datasource 初始化完成的数据源数据源
             */
            @bean
            @dependson({"stsbootstrap"})
            public datasource createdatasource(nuwamapclient client) {
                dbgroupdatasource datasource = new dbgroupdatasource();
                datasource.setusests(true);
                datasource.setappname(environment.getproperty("wisedba.appname"));
                datasource.setdbgroupkey(environment.getproperty("wisedba.groupkey"));
                datasource.setdbname(environment.getproperty("wisedba.dbname"));
                datasource.init();
                return datasource;
            }
            /**
             * 事务管理创建
             *
             * @param datasource 数据源
             * @return datasourcetransactionmanager 事务管理
             */
            @bean
            public datasourcetransactionmanager createtransaction(datasource datasource) {
                datasourcetransactionmanager transaction = new datasourcetransactionmanager();
                transaction.setdatasource(datasource);
                return transaction;
            }
            @bean
            public jdbctemplate createjdbctemplate(datasource datasource) {
                return new jdbctemplate(datasource);
            }
            @bean("sqlsessionfactorybean")
            public sqlsessionfactorybean createmybatissqlsessionfactorybean(datasource datasource) {
                sqlsessionfactorybean sessionfactorybean = new sqlsessionfactorybean();
                sessionfactorybean.setdatasource(datasource);
                // 数据源配置项
                org.apache.ibatis.session.configuration configuration = new org.apache.ibatis.session.configuration();
                //允许jdbc自动生成主键
                configuration.setusegeneratedkeys(true);
                // 使用列标签代替列名
                configuration.setusecolumnlabel(true);
                // 打开下划线命名自动转换为驼峰命名开关
                configuration.setmapunderscoretocamelcase(true);
                sessionfactorybean.setconfiguration(configuration);
                return sessionfactorybean;
            }
            @bean
            public transactiontemplate createtransactiontemplate(datasourcetransactionmanager datasourcetransactionmanager) {
                transactiontemplate template = new transactiontemplate();
                template.settransactionmanager(datasourcetransactionmanager);
                return template;
            }
            @bean
            public mapperscannerconfigurer createmapperscannerconfigurer() {
                mapperscannerconfigurer configurer = new mapperscannerconfigurer();
                configurer.setbasepackage("com.huawei.demo");
                configurer.setsqlsessionfactorybeanname("sqlsessionfactorybean");
                return configurer;
            }
            @override
            public void setenvironment(environment environment) {
                this.environment = environment;

相关文档

网站地图