0%

实习-02-YMS示例工程搭建

SpringBoot项目创建

SpringBoot工程创建

image-20230115184814451

image-20230115185245172

pom.xml文件配置

持久化框架选择

个人使用mybatis plus框架

1
2
3
4
5
6
<!--    mybatis-plus   -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.2</version>
</dependency>

配置扫描

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<build>
<!--根据文档添加配置扫描-->
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>

<!--plugins标签内容见下文-->
<plugins...>
</build>

application.properties文件配置

配置数据源(即数据库相关配置)

1
2
3
4
spring.datasource.url: jdbc:mysql://localhost:3306/test?serverTimezone=UTC
spring.datasource.username: root
spring.datasource.password: root
spring.datasource.driver-class-name: com.mysql.cj.jdbc.Driver

添加增删改查代码内容

以下内容作为参考

  • 项目结构

    user2结构及内容同user1

    image-20230115190137058

  • 代码示例

    添加一套简单的对数据库表增删改查逻辑

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    ## User1Controller.java

    /**
    * 实现一套简单的增删改查逻辑代码
    */
    @Slf4j
    @RestController
    @RequestMapping("/user1")
    public class User1Controller {

    @Autowired
    private User1Service user1Service;

    //新增用户1
    //增
    @PostMapping
    public String save(@RequestBody User1 user1){
    log.info("新增用户1,信息:{}", user1.toString());
    user1Service.save(user1);

    return "success";
    }

    //根据id查询用户
    //查
    @GetMapping("/{id}")
    public User1 get(@PathVariable Long id){
    User1 user1 = user1Service.getById(id);
    if(user1 != null){
    return user1;
    }else{
    log.info("查询失败");
    return null;
    }
    }

    //根据id更改用户信息
    //改
    @PutMapping
    public String update(@RequestBody User1 user1){
    log.info("更改用户信息:{}", user1.toString());
    user1Service.updateById(user1);

    return "success";
    }

    //根据id删除用户信息
    //删
    @DeleteMapping("/{id}")
    public String delete(@PathVariable Long id){
    user1Service.removeById(id);

    return "success";
    }

    }

    ## User1.java
    /**
    * 用户1信息
    */
    @Data
    public class User1 implements Serializable {

    private static final long serialVersionUID = 1L;

    private Long id;

    //姓名
    private String name;

    //手机号
    private String phone;

    //性别 0 女 1 男
    private String sex;

    //身份证号
    private String idNumber;

    //头像
    private String avatar;

    //状态 0:禁用,1:正常
    private Integer status;
    }

    ## User1Mapper.java
    @Mapper
    public interface User1Mapper extends BaseMapper<User1> {
    }

    ## User1ServiceImpl.java
    @Service
    public class User1ServiceImpl extends ServiceImpl<User1Mapper, User1> implements User1Service {
    }

    ## User1Service.java
    public interface User1Service extends IService<User1> {
    }

项目总体结构

image-20230115191613761

数据库建表sql

可使用Mysql可视化工具操作,选中本地test数据库

1
2
3
4
5
6
7
8
9
10
CREATE TABLE `user1` (
`id` bigint NOT NULL COMMENT '主键',
`name` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '姓名',
`phone` varchar(100) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '手机号',
`sex` varchar(2) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '性别',
`id_number` varchar(18) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '身份证号',
`avatar` varchar(500) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '头像',
`status` int DEFAULT '0' COMMENT '状态 0:禁用,1:正常',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin COMMENT='用户1信息'
1
2
3
4
5
6
7
8
9
10
CREATE TABLE `user2` (
`id` bigint NOT NULL COMMENT '主键',
`name` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '姓名',
`phone` varchar(100) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '手机号',
`sex` varchar(2) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '性别',
`id_number` varchar(18) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '身份证号',
`avatar` varchar(500) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '头像',
`status` int DEFAULT '0' COMMENT '状态 0:禁用,1:正常',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin COMMENT='用户2信息'

测试

此时可以使用Postman测试SpringBoot项目的增删改查功能,如下

image-20230115192530152

SpringBoot项目改为YMS项目

改造启动类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@EnableAspectJAutoProxy
@EnableTransactionManagement(proxyTargetClass = true)
@MapperScan("com.example.demoyms.*.mapper")
public class DemoYmsApplication extends SpringBootServletInitializer {

public static void main(String[] args) {
// SpringApplication.run(DemoYmsApplication.class, args);
SpringApplication springApplication = new SpringApplicationBuilder(DemoYmsApplication.class).build();
springApplication.setAllowBeanDefinitionOverriding(true);
springApplication.run(args);
System.out.println("DemoYmsApplication启动完成...........");
}

}

改造pom.xml文件

配置统一依赖管理iuap-pom-with-ucf-parent

请参照YMS用户使用指南V0.2

根据我们的环境和需要选择一个iuap-pom-with-ucf-parent的版本,以下是iuap-pom-with-ucf-parent的版本以及对应的iuap-boot-starter、yms版本、流水线镜像对应版本如下:

image-20230115193703159

具体内容参照用户指南2.2.1

本示例工程使用版本如下:

1
2
3
4
5
<parent>
<groupId>com.yonyou.iuap</groupId>
<artifactId>iuap-2nd-party</artifactId>
<version>6.0.0-SNAPSHOT</version>
</parent>

业务工程配置iuap-boot-starter组件依赖

1
2
3
4
<dependency>
<groupId>com.yonyou.iuap.yms</groupId>
<artifactId>iuap-boot-starter</artifactId>
</dependency>

其他依赖

示例工程采用其他依赖

均为参考其他工程所得,可忽略

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<dependency>
<artifactId>TwoCoordnate</artifactId>
<groupId>com.yonyou.cloud</groupId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>com.yonyou.cloud.middleware</groupId>
<artifactId>mwclient</artifactId>
<type>pom</type>
</dependency>
<dependency>
<groupId>com.yonyou.cloud.middleware</groupId>
<artifactId>iris-spring-support</artifactId>
</dependency>

<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.6</version>
</dependency>

<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.21</version>
</dependency>

打包插件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<plugins>
<plugin>
<groupId>com.yonyou.iuap.yms</groupId>
<artifactId>yms-module-maven-plugin</artifactId>
<!-- 填写iuap-pom-with-ucf-parent里iuap-boot-starter对应的版本-->
<version>2.0.0-SNAPSHOT</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
<configuration>
<!-- 模块信息必须和spring.application.name的值一致-->
<moduleName>datasourceDemoWjc</moduleName>
<!-- 配置http/https访问该模块的根路径-->
<contextPath>/datasourceDemoWjc</contextPath>
<exteranlDependencies>
<dependency>
<artifactId>yms-external</artifactId>
<groupId>com.yonyou.cloud</groupId>
<!-- 与插件版本保持一致-->
<version>2.0.0-SNAPSHOT</version>
</dependency>
</exteranlDependencies>
<middleDependencies>
<dependency>
<artifactId>yms-middleware</artifactId>
<groupId>com.yonyou.cloud</groupId>
<!-- 与插件版本保持一致-->
<version>2.0.0-SNAPSHOT</version>
</dependency>
</middleDependencies>
</configuration>
</plugin>
</plugins>

application.properties文件配置

微服务配置 ak

1
2
3
4
access.key= IlJ0b5Di4xZuWnoX
access.secret= JqWjqpkSmManqVv53WIGDGo4kOggVn
app.domain=https://developer.yonyoucloud.com
portal.auth.url=${app.domain}/portal/api/v1/res/checkUserAuth

spring.application.name

微服务名称,后面配置YMS控制台会用到

环境标识

YMS是测试环境的话写test 开发环境写dev

1
spring.profiles.active=test

文件截图及注意事项

image-20230115194919568

注意:文件尽量使用.properties,不要使用.yml

代码上传至git

暂未操作

​ Git地址:http://git.yonyou.com

​ 用户名:用友域账号

​ 密码:用友域账号的密码

项目结构

image-20230115195217049

此后项目启动成功即可,成功截图未放

常见问题

parent引入失败

  • 开发前,请先根据相关文档配置maven–settings.xml文件

    参考文档,Jfrog私服开发配置流程,https://yundoc.yonyou.com/view/l/tjrxb14

  • 生成自己的settings.xml文件后,替换下图3中的路径文件

image-20230115195728465

parent和插件版本匹配问题

经过个人的尝试选择上述版本,过程中项目启动过程报错需要yms什么manager,回退了版本后不报错

项目启动过程遇到报错没有找到User1Mapper bean

经查找问题发现是包扫描路径出错

数据源组件创建

本地代码改造

创建配置类

1
2
3
4
5
6
7
8
9
10
@Slf4j
@Configuration
public class CustomDSConfiguration {

@Bean("master")
public DataSource masterDataSource(){
return new HikariDataSource();
}

}

关闭SpringBoot自动加载

1
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})

此注解禁止 SpringBoot 自动注入数据源配置,关闭自动查找 application.yml 或者 properties 文件里的 spring.datasource.* 相关属性并自动配置单数据源

准备工作

准备YMS控制台账号

访问http://dc.yms.app.yyuap.com/confcenter/

账号密码请自行联系获得即可登录

获得YonBIP开发者平台使用权限

获取流程请参考以下操作:

  • 打开Windows端下的友空间平台

  • 进入工作台

  • 点击左上角图标

    image-20230115201002627

  • 搜索“审批”

  • 点击发起流程

    image-20230115201044626

  • 点击云平台开发者中心—>开发者中心使用权限—>发起审批即可

    image-20230115201335671

连接池创建

访问http://dc.yms.app.yyuap.com/confcenter/

流程

  • 根据2.2.3配置内容选择开发环境或测试环境

    image-20230115201703079

​ 其他环境请一定不要操作

  • image-20230115201832290

​ 点击添加连接池

  • 填写配置信息

    image-20230115202137342

    注意:连接池名称为自定义的可识别名称,连接池编码自定义可识别的名称,命名规范同java变量(参照YMS操作文档),用户名,密码,地址等请联系人员获得,YMS控制台与本地不通,请不要使用本地127.0.0.1数据库

    点击测试连接,通过后点击提交

  • 数据源配置成功

逻辑数据源创建及发布

创建流程

  • 选择测试环境—-点击配置管理—-点击任意产品名称—-点击逻辑数据源—-点击添加逻辑数据源

  • 配置逻辑数据源信息

    image-20230115203020550

    部分内容参照了YMS文档

​ 1.逻辑数据源名称,自定义的可识别名称

​ 2.逻辑数据源编码,逻辑数据源编码为规则为:spring.application.name+ “_” + 数据源的beanName,比如我的spring.application.name为datasourceDemoWjc,CustomDSConfiguration中注入的bean名称为master,则逻辑数据源编码为datasourceDemoWjc_master

​ 3.默认Schema,mysql为数据库的名称,其他有Schema分层的数据库为Schema。

​ 4.其他表单内容暂不确定

​ 5.点击提交

关联数据源连接池

  • 点击关联数据源连接池

image-20230115204110013

  • 选中3.3创建的连接池

image-20230115204214894

调试及常见问题

调试过程

  • 点击配置文件预览及发布

    image-20230115204603445

  • 将左侧的新值展开复制保存为yms_dynds_preload.json文件

    image-20230115204724362

  • 将该json文件内容删除最外侧的”datasource”层,如下图,否则启动时报错无法解析json

    image-20230115204914664

  • 使用postman进行测试,成功进行表数据增删改查

常见问题

数据源为空

通过代码设断点分析,得为json文件格式问题,最外层应该直接以logicDataSouceList等开始,而不能包一层datasouce,否则解析不到,分析过程如下:

  • com.yonyou.iuap.yms.datasource.YmsDataSourceConfiguration

    image-20230115205803701

  • com.yonyou.iuap.yms.datasource.ds.provider.impl.YMSDataSourceProvider

    image-20230115205840692

  • com.yonyou.iuap.yms.datasource.ds.provider.impl.YMSGlobalDataSourceProvider

    image-20230115205939666

  • com.yonyou.iuap.yms.datasource.service.DynamicDataSourceQryService

    image-20230115210010891

  • com.yonyou.iuap.yms.datasource.service.DisConfigLoadUtils

    image-20230115210048579

​ 在这里发现GsonUtils.fromJson传入参数content有yms_dynds.json解码内容,而返回的configDTO内容呢却全为空,那么通过比对YmsConfigDTO类的属性发现json文件不应该包含datasource层,故找到问题所在

启动报错sql异常,premises@10.8.32.101没有权限

由于10.8.32.101是我在家办公开启的vpn地址,我认为是没有权限的缘故

经排查确认其实是密码错误,yms_dynds.json文件中的密码由密文更换为非密文即可。

因此我将yms_dynds.json内容更换为本地环境进行测试,数据可以添加到连接池中配置的数据库,可以成功增删改查!

测试

本地项目启动后调用接口查看数据是否添加到连接池中配置的数据库

  • image-20230116103701245

    image-20230116103856638

  • image-20230116104053045

    image-20230116104124324

  • image-20230116104701605

    image-20230116104713323

  • image-20230116104746104