开发业务代码-j9九游会登录
准备工作
- 已并maven,根据以下步骤配置maven。
- 在
标签内添加自己的本地仓库位置路径,这个本地仓库位置是自己创建的。 d:\apache-maven-3.8.6-bin\repository
d:\apache-maven-3.8.6-bin\repository - 修改maven默认的jdk版本。
在
标签下添加一个 标签,修改maven默认的jdk版本。 jdk-1.8 true 1.8 1.8 1.8 1.8
- 在
- 安装并配置intellij idea开发工具。
- 在intellij idea中选择file > settings > build,execution,deployment > build tools > maven。
- 在user settings file中配置setting.xml。
- 在local repository中配置自定义的maven仓库地址。
- java开发环境的配置。
appstage提供的sdk是基于java1.8版本开发的,如果spring cloud项目使用java11及以上版本,则不支持使用appstage提供的sdk进行应用开发。以下步骤以win7环境配置jdk8 64位为例,如果已经下载jdk并配置好环境请跳过本步骤。
- 下载jdk文件。
- 下载完成后按照提示安装,位置自选,比如安装到本地c:\program files\java\jdk1.8.0_131。
- 配置java环境变量,进行如下操作。
- 新建系统变量java_home,变量值为实际jdk安装位置。
- 在path中添加%java_home%\bin;%java_home%\jre\bin (注意用英文分号分隔)。
- 新建系统变量classpath,变量值为%java_home%\lib\dt.jar;%java_home%\lib\tools.jar。
- 打开命令行窗口,输入“java -version”,显示如图1表示配置成功。
图1 配置成功示例
- 获取sdk并进行完整性校验。
- sdk:
- 完整性校验:
操作步骤
- 打开本地spring cloud项目。
- 手动导入sdk jar包。
- 在项目目录下新建一个lib目录,存放jar包。
- 将本地的jar包复制粘贴至lib目录下。
- 将jar导入到项目中。
- 选择“file > project structure > project settings > module”。
- 单击“ ”,选择“jars or directories...”。
- 选中jar包,单击“apply”。导包完成。
- (可选)集成orgid登录功能。
demoorgidlogin项目用于对接orgid组织成员账号服务,对接后可以使用orgid服务完成自身应用的登录、组织管理功能。具体请参考。
- 配置微服务。
- 微服务接入sts。
sts提供了微服务之间请求认证以及敏感配置项管理的功能,sts是接入cloud map的前提条件,cloud map依赖sts认证能力。
- 将在appstagej9九游会登录首页中创建的demoorgidlogin、demoserviceaservice、demoservicebservice注册到运维中心的acms管理台中,具体请参见将微服务注册到acms。
图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 - 增加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
- 启动sts。
在微服务的启动类中添加注解,本实践是在serviceaspringbootapplication.java、servicebspringbootapplication.java和demoorgidlogin的orglogin.java文件中添加@enablestsautoinitialization(value = "application.properties")注解。注解的含义是启动sts自动初始化,其中value是指定sts的配置文件路径。
- 将在appstagej9九游会登录首页中创建的demoorgidlogin、demoserviceaservice、demoservicebservice注册到运维中心的acms管理台中,具体请参见将微服务注册到acms。
- 敏感信息配置项托管。
- 使用sts的敏感配置项管理功能 ,需要在acms中录入敏感配置项,具体请参见录入敏感配置。
- 在iac脚本中的业务配置项配置文件中指定敏感配置项取值路径。
- 在iac脚本中的业务配置项属性定义文件中,声明该配置项为敏感配置项。
- 在配置文件中增加敏感配置项名称的配置。
- 启动敏感配置项自动解密。
使用orgid登录时所需的客户端密钥,属于敏感配置项,需要使用sts的配置敏感配置项托管功能。本实践中配置如下:- 在acms中录入配置敏感配置项,如图3所示。
图3 录入敏感配置项
- 本实践在iac脚本demoorgidlogin的业务配置项文件config_records.yaml增加一个名为spring.redis.password的敏感配置项,这个敏感配置项是访问redis的密码。
spring.redis.password: microservice/jamesservice22a/demoorgidlogin/spring.redis.password/default #redis访问密码,属于敏感配置项,已被sts(acms)纳管,配置路径为:microservice/服务名/微服务名/敏感配置项名称/敏感配置项标签
- 本实践中访问redis的密码spring.redis.password为敏感配置项,在iac脚本demoorgidlogin的业务配置项属性定义文件config_schema.yaml中声明。
type: object properties: spring.redis.password: format: sensitive - 在application.yml配置文件中增加敏感配置项名称的配置。
nuwa: security: config: sensitivewords: spring.redis.password,org.app.protocol-login.oauth.clientsecret,org.app.jwt-key - 在demoorgidlogin的启动类中添加注解,启动敏感配置项自动解密。本实践是在orglogin.java文件中添加@enablestsencryptableproperties注解。
- 微服务接入cloud map。
spring cloud通常是使用其自带的eureka注册中心,接入appstage可以将eureka注册中心替换为cloud map,cloud map其优势为除了能够提供服务发现的功能,还可以提供数据库、敏感信息等的纳管功能。
- 在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 - 增加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访问命名空间 - 启动初始化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); httpentityentity = new httpentity<>(null, headers); responseentity responseentity = resttemplate.exchange(url, httpmethod.get, entity, userinfo.class); ; if (responseentity != null) { orderinfo.setuserinfo(responseentity.getbody()); } return orderinfo; } - 在appstage运维中心的cloud map中验证微服务注册,具体请参见查看注册到cloudmap的微服务列表。
图4 验证微服务注册
- 在demoorgidlogin、demoservicea、demoserviceb的pom.xml中添加cloud map依赖。
- 使用wisedba进行数据库纳管。
- 在appstage运维中心的wisedba中申请数据库并创建schema,具体请参见创建数据库实例及在wisedba中创建schema。
本实践中申请的数据库性能规格为:独享型/gaussdb.mysql.large.x86.8/2vcpus/16gb,数据库实例名称为:gauss-springclouddemo2,demoserviceaservice和demoservicebservice的schema名称分别为:springclouddemoa、springclouddemob。
- 在wisedba管理台配置连接信息,并注册到cloud map中,在创建数据库连接时,直接调用cloud map中的注册信息。
单击wisedba实例列表中的数据库实例名称,单击左侧导航栏的“sdk配置”,新增微服务和数据库的对应配置,具体请参见新增数据库sdk配置并注册到cloud map,本实践中配置如图5所示。图5 sdk配置
- 在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 - 初始化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;
- 在appstage运维中心的wisedba中申请数据库并创建schema,具体请参见创建数据库实例及在wisedba中创建schema。
- 微服务接入sts。
相关文档
意见反馈
文档内容是否对您有帮助?
如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨