
# 使用模板创建服务
#### 使用说明
您可以在"资产库"中自定义模板。当您的业务与模板中的场景相似度较高时，可以通过模板创建新的服务，减少重复开发，提高交付效率。
#### 前提条件
- 已完成模板创建，具体操作请参考[创建架构模板](https://support.huaweicloud.com/usermanual-astropro/astropro_05_0129.html)和[创建业务对象模板](https://support.huaweicloud.com/usermanual-astropro/astropro_05_0131.html)。
- 已[新建项目](https://support.huaweicloud.com/usermanual-astropro/astropro_05_0022.html)。
- 已[创建服务组](https://support.huaweicloud.com/usermanual-astropro/astropro_05_0027.html)。
 
#### 使用模板创建服务
1. 参考[登录AstroPro界面](https://support.huaweicloud.com/usermanual-astropro/astropro_05_0004.html)中操作，登录AstroPro界面。
2. 在左侧导航栏中，选择"后端开发平台 \> 服务管理 \> 服务"。
3. 选择项目和服务组，单击"新建服务"。 
   图1新增一个服务   
   ![](https://support.huaweicloud.com/usermanual-astropro/zh-cn_image_0000001968959668.png)
   
   
4. 设置服务的基本信息。
   
   图2设置服务基本信息   
   ![](https://support.huaweicloud.com/usermanual-astropro/zh-cn_image_0000001949278169.png)
   - 服务名称：设置待添加服务的名称，由英文字母、数字或"-"组成，且必须以字母开头，一般采用驼峰格式，长度最低为两位。
   
   - 服务类型：当前仅支持创建原子服务。原子服务是指对外提供业务对象管理API，有独立数据存储（一般为独立数据库）的服务。原子服务之间可以相互调用。
   
   - 服务组：选择服务所属的分组。
   
   - 服务单元化策略：服务在子域内的单元化策略。服务单元化策略必须在一个子域内定义，不能跨子域。 当前仅支持SINGLE，即单库，无论子域是否进行单元化部署，该服务只在一个单元（一般以region为单元）内部署。
     
   
   - API版本：指定服务的API版本，对应服务Service段的apiVersion字段，一般为v1、v2类型的值。
   
   - 描述：设置服务的描述信息。
   
   
   
   
5. 单击"确定"，即可完成服务的创建。此处创建服务的操作，相当于为服务搭建了一个框架。您需要根据自身业务的需求继续编辑服务。
6. 在服务列表中，单击已创建服务后的"编辑"。
7. 设置服务基本配置、详细配置及客户端配置。 
   - **基本配置**
     图3基本配置   
     ![](https://support.huaweicloud.com/usermanual-astropro/zh-cn_image_0000001968799832.png)
     - 基本配置：若本地已有配置好的服务元数据，可通过单击"导入元数据"，直接导入。
     
     - 微服务名称：自动关联[4]中创建的服务名称。
     
     - Group ID：服务所属项目中的组ID，会自动关联已[新建项目](https://support.huaweicloud.com/usermanual-astropro/astropro_05_0022.html)中Group的值。在Maven项目中用作工程组的标识，Group ID在一个组织或项目中通常是唯一的。
     
     - Package：设置生成代码的顶层包名，会自动关联已[新建项目](https://support.huaweicloud.com/usermanual-astropro/astropro_05_0022.html)中Package的值。
     
     - Artifact ID：在Maven项目中用作工程的标识，通常是工程的名称。
     
     - 版本：在Maven项目中用作工程的版本号。
     
     - 框架：选择微服务使用的开发框架，支持DEVSPORE(JDK 8 + SpringBoot 2)和DEVSPORE(JDK 17 + SpringBoot 3)。
       - DEVSPORE(JDK 8 + SpringBoot 2)：生成JDK8+SpringBoot2的代码框架。
       
       - DEVSPORE(JDK 17 + SpringBoot 3)：生成JDK17+SpringBoot3的代码框架。
        
      
   
   - **详细配置**
     图4详细配置   
     ![](https://support.huaweicloud.com/usermanual-astropro/zh-cn_image_0000002005480253.png)
     - 服务类型：当前仅支持创建原子服务。原子服务是指对外提供业务对象管理API，有独立数据存储（一般为独立数据库）的服务。原子服务之间可以相互调用。
     
     - 服务组：选择服务所属的分组。如何创建服务组，请参见[新建服务组](https://support.huaweicloud.com/usermanual-astropro/astropro_05_0027.html)。
     
     - 服务单元化策略：服务在子域内的单元化策略。服务单元化策略必须在一个子域内定义，不能跨子域。 创建服务仅支持SINGLE，即单库，无论子域是否进行单元化部署，该服务只在一个单元（一般以region为单元）内部署。编辑服务时可修改单元化策略。
       
     
     - API版本：服务的API版本，默认为[新增一个服务](https://support.huaweicloud.com/usermanual-astropro/astropro_05_0014.html)时配置的版本，如果需要升级API的版本，请参见[升级API版本](https://support.huaweicloud.com/usermanual-astropro/astropro_05_0032.html)。
     
     - 是否启用扩展拦截：通过引入devspore-horizon插件，用户自定义继承抽象类Approve并添加配置，在请求进入和返回时增强处理。 设置为"是"时，自动在pom文件中引入devspore-horizon插件，并在所有Service实现类的方法上添加"@Extension"注解。同时在plugin目录下，生成"DefaultRequestPlugin.java"示例文件。
       使用插件时，用户需要在配置文件中添加devspore.horizon.processors，即配置自己编写的扩展插件注入到Spring中的名称，多个插件之间使用英文逗号隔开，扩展插件需要继承com.huawei.devspore.horizon.approver.Approve抽象类，并重写其中的doApprove方法。
       
      
   
   - **客户端配置**
     - 是否生成客户端：是否生成客户端的代码。开启后，会生成服务的客户端代码，如[图5]。
       图5生成客户端的代码   
       ![](https://support.huaweicloud.com/usermanual-astropro/zh-cn_image_0000002005480249.png) 
     
     - 客户端类型：目前仅支持"OPEN_FEIGN"
      
   
   
   
   
8. 设置完成后，单击"下一步"，进入框架配置页面。
9. 在下拉框中选择已创建的模板，选择模板后，模板配置将自动带入，包括"框架配置"和"生成策略"，直接单击"下一步"即可。 
   图6选择架构模板   
   ![](https://support.huaweicloud.com/usermanual-astropro/zh-cn_image_0000002004657221.png)
   
   
10. 在业务设计页面，在顶部下拉框中选择业务对象模板。 
    图7选择业务对象模板   
    ![](https://support.huaweicloud.com/usermanual-astropro/zh-cn_image_0000002006182169.png)
    
    
11. 单击"下一步"。
12. 添加服务依赖后，单击"创建"。
13. 输入变更日志描述信息，单击"创建"。 
    系统开始创建服务，并生成该服务的代码。
    图8创建服务并生成代码包   
    ![](https://support.huaweicloud.com/usermanual-astropro/zh-cn_image_0000001968959780.png)
    
    
 
