Commit 696acb62 authored by 高洋's avatar 高洋

Conflict resolution

parents fad15d8e c263df69
# [融租易从这里开始](/融租易开发手册.md)
Git 地址 http://hel.hand-china.com/hel/hel\_leasing.git
Liquibase 使用手册
---
本文档主要介绍如何在 hap 开发过程中使用 liquibase 来维护数据库数据。
[参考 Liquibase 官方指令文档](http://www.liquibase.org/documentation/changes/index.html)
`core-db` 模块 `hls/core/db/data`目录
有三个版本的数据库脚本:mysql,oracle,sqlserver。
> 旧版的基于 sql 的建表方式已经废弃, 只有第三方的 sql 脚本存在.
## 新建表
---
修改文件 `[yyyy-MM-dd]-init-table-migration.groovy`
> 其他项目上, 应该是根据需要编写至少一个新的 groovy 文件, 命名规则同上.
参考 现有的建表 changeSet 写法, 添加新的 changeSet
注意 `author`,`id`
* 如果是 oracle 数据库, 注意 `sequence` 的创建
* 如果有 tl 表, 写在一个 changeSet 中
其他建表需要注意的内容包括:
* 基础建表语句
* 表描述信息
* 主键设置
* 列描述信息
* 合理的类型,长度
* 是否允许 NULL
* 默认值(如果有)
* 索引(唯一索引,普通索引)
* 主键自增起始 10001
* oracle 是设置 sequence start with
* who 字段(8个)
```
column(name: "OBJECT_VERSION_NUMBER", type: "BIGINT", defaultValue : "1")
column(name: "REQUEST_ID", type: "BIGINT", defaultValue : "-1")
column(name: "PROGRAM_ID", type: "BIGINT", defaultValue : "-1")
column(name: "CREATED_BY", type: "BIGINT", defaultValue : "-1")
column(name: "CREATION_DATE", type: "DATETIME", defaultValueComputed : "CURRENT_TIMESTAMP")
column(name: "LAST_UPDATED_BY", type: "BIGINT", defaultValue : "-1")
column(name: "LAST_UPDATE_DATE", type: "DATETIME", defaultValueComputed : "CURRENT_TIMESTAMP")
column(name: "LAST_UPDATE_LOGIN", type: "BIGINT", defaultValue : "-1")
```
* 扩展字段 16个(可以不要)
> 如果不要,在DTO类上加@ExtensionAttribute\(disable=true\)
> TL 表均为联合主键,没有自增长、sequence 等
**请注意保持脚本格式工整**
## 修改表结构
也是通过添加 changeSet, 顺序添加
## 初始数据
---
HEL1.0中采用了全新的基于 excel 的基础数据维护.
请参考 `hel-db` 中 hls/core/db/data/2016-09-30-init-data.xlsx
excel 数据管理的主要特点有:
* 利用 `公式` 来解决外键依赖问题.
* 可进行 `唯一性检查`, \(重复执行, 不会重复插入\)
* 数据可更新, 可持续维护
excel 更直观, 便于维护, 所有的基础数据, 只需要维护一份 excel 即可.
> excel 在每次执行 mvn process-resoures ... 时 都会解析执行,
> 会插入新的数据, 更改已存在的数据.
使用参数 `-Ddb.skipUpdateTables=SYS_ROLE_B,SYS_USER` 可以禁止更新表中的数据(只插入,不更新)
更具体的用法 请参见 excel 第一 sheet 页的说明.
注意:
* 作者
* 时间
> 可以不通过 maven 命令直接执行 excel 导入, 参考代码
```java
public static void main(String[] args) throws Exception {
System.setProperty("db.url", "jdbc:mysql://127.0.0.1:3306/hel");
System.setProperty("db.user", "hel_dev");
System.setProperty("db.password", "hel_dev");
System.setProperty("db.override", "true");
ExcelDataLoader processor = new ExcelDataLoader();
URL url = ExcelDataLoader.class.getResource("/hls/core/db/data/2016-09-30-init-data.xlsx");
if (url == null) {
throw new FileNotFoundException("excel not found.");
}
processor.setFilePath(new File(url.toURI()).getAbsolutePath());
processor.execute(null);
}
```
## 补丁数据
---
在需要执行比较特殊的数据库操作, 或者不方便归类的操作时 , 可以将脚本写在 patch 中.
patch.groovy 中即可以写 liquibase 命令, 也可以执行 sql 语句.
补丁脚本放在 `patch` 目录。
脚本内容可以包括,但不限于:
* 修改表
* 增删改 表中的数据
> 请注意,这些操作应该都是增量的进行
补丁文件的命名方式:20161212-工号-序号.sql
每次提交都是一个单独的 sql 文件,每天提交多次时,需要指定`序号`加以区分
> 脚本内部注释,写明作者,目的,时间,概要
编写完毕以后,将补丁配置到 patch.groovy 中。
> 补丁将会是用的比较多的方式,主要是增加新的数据,由于主键是手动指定的,请注意不要与他人的重复,必须在本地测试过之后再commit。
# 新开项目
本章节将引导您从 零 开始,创建一个可以运行的 Demo 工程。此工程基于HEL融租易标准版,包含一个 demo 实例。
## 后端项目
### 确定项目信息
1. groupId 本项目的代号,比如融租易项目,代号为 hel
2. artifactId 本项目的顶层目录名称,使用项目代号(第一个字母大写)
+ Parent,如 HelParent
3. package 包名称,使用项目代号 + core ,如 Hel.core
4. archetypeVersion 是指模板项目的版本,可以使用以下版本号
> 1.0-RELEASE
### 新建项目 (融租易HEL1.0)
确定上述信息后,可以使用如下命令新建项目:
`注意` maven-archetype-plugin `2.4`及以下版本可以正常使用下面命令
```
mvn archetype:generate -D archetypeGroupId=hel-custom -D archetypeArtifactId=hel-custom-parent-archetype -D archetypeVersion=1.0-RELEASE -D groupId=hel -D artifactId=HelParent -D package=Hel.core -D version=1.0-RELEASE -D archetypeRepository=https://hel.hand-china.com/nexus/content/repositories/Hel-Releases
```
在maven-archetype-plugin `3.0.0` 版本中,移除了对-D archetypeRepository参数的支持,会报以下错误
![](/assets/mvn_archetype_plugin.png)
解决方案:
指定使用2.4版本的archetype-plugin插件:
```
mvn org.apache.maven.plugins:maven-archetype-plugin:2.4:generate -D archetypeGroupId=hel-custom -D archetypeArtifactId=hel-custom-parent-archetype -D archetypeVersion=1.0-RELEASE -D groupId=hel -D artifactId=HelParent -D package=Hel.core -D version=1.0-RELEASE -D archetypeRepository=https://hel.hand-china.com/nexus/content/repositories/Hel-Releases
```
> 以下内容所指的 `HelParent` 均指上面命令中的参数 `artifactId` 的值,请按实际情况替换
新的项目目录结构如下:
```
.
├── README.md (项目README,请在此处写上项目开发的注意信息,方便团队协同)
├── core(功能实现项目)
│ ├── pom.xml (子项目core的pom.xml文件)
│ └── src
│ └── main
│ ├── java
│ │ ├── hel
│ │ │ └── core(前面的包名称)
│ │ │ ├── db(数据表结构,数据初始化入口文件)
│ │ │ │ └── liquibase.groovy
│ │ └── resources(项目配置文件目录)
│ │ ├── spring (spring配置文件目录)
│ │ ├── config.properties
│ │ └── logback.xml(日志配置文件)
│ └── webapp(Webapp目录)
│ ├── resources(UI 资源库目录)
| | └── demo.js(demo.js样例,可以删除)
│ └── WEB-INF
│ └── view(页面文件目录)
│ └── demo.html(demo.html样例,可以删除)
├── core-db(数据库脚本及初始化数据项目)
│ ├── pom.xml
│ └── src
│ └── main
│ └── java
│ └── hel
│ └── core
│ └── db
│ ├── data(数据文件)
│ │ └── (init-data)
│ └── table(数据库表结构管理)
│ └── 2016-06-01-init-migration.groovy
└── pom.xml
```
### 确定本项目使用的数据库
> 目前已经测试过支持的数据库有Mysql,Oracle,SqlServer
> 请修改 `HelParent/core/src/main/java/hel/core/db/liquibase.groovy` 以适配不同的数据库
确定好数据库后,按照 [Oracle,MySql,Sqlserver数据库配置](database-config.md) 修改项目配置文件。
修改配置文件后,按照[创建数据库](database-init.md) 中的步骤创建数据库
### 编译整个项目
在 HelParent 目录下执行:
```
mvn clean install -Dmaven.test.skip=true
```
<a name="liquibase"> </a>
### 初始化数据库表结构及基础数据
在 HelParent 项目录下执行:
- MySql
- `mvn process-resources -D skipLiquibaseRun=false -D db.driver=com.mysql.jdbc.Driver -D db.url=jdbc:mysql://127.0.0.1:3306/hel -Ddb.user=hel_dev -Ddb.password=hel_dev`
- SqlServer
- `mvn process-resources -D skipLiquibaseRun=false -Ddb.user=hel_dev -Ddb.password=hel_dev-D db.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver -D db.url="jdbc:sqlserver://127.0.0.1:1433; DatabaseName=hel"`
- Oracle
- `mvn process-resources -D skipLiquibaseRun=false -D db.driver=oracle.jdbc.driver.OracleDriver -D db.url=jdbc:oracle:thin:@127.0.0.1:1521:hel -Ddb.user=hel_dev -Ddb.password=hel_dev
- 以上命令中,需要按实际情况修改 url,user,password
### 测试
1. 在 HelParent 工程目录下执行命令(IntelliJ IDEA 用户可以跳过此步骤)
```
mvn eclipse:eclipse
```
3. 将所有工程导入 IDE 工具(Eclipse,IntelliJ IDEA)中
4. 配置 Server ,配置 JNDI 数据源,参照[多数据库配置](chapter1.1.md)
- 需要 Tomcat 7+, 不支持 Tomcat 6
5. 将 hel 工程发布到 tomcat/webapps,运行
### 更新HEL依赖
[更新项目依赖的HEL版本](project-update.md)
# 更新项目依赖的HEL版本
1. 选择希望的版本号
此地址[查看 HEL Release 版本](https://hel.hand-china.com/hel-guide/hel-developer-guide/tags)
2. 更改 项目Parent目录中的 pom.xml
* `<hel.version>1.0.0-RELEASE</hel.version>`
3. 更新IDE中的maven依赖:
* `eclipse` 右键点击 HelParent 工程,`Maven``Update Project...`
* `IDEA` :右键点击 HelParent 工程,`Maven``Reimport`(等候下载)
4. 在Parent目录下执行`mvn clean install`
5. 执行初始化数据库的<a href="project-create.md#liquibase">liquibase 命令</a>
初始化数据库表结构及基础数据
> 注意
* 如果项目中过有覆盖过HEL的xml配置文件,更新以后请注意比对有没有变化
* 新建项目默认依赖的是1.0.0-RELEASE版本的HEL,后续更新可能会涉及数据库的变化,请注意同步更新数据库,同步指令如下:`mvn process-resources -D skipLiquibaseRun=false -D db.driver=com.mysql.jdbc.Driver -D db.url=jdbc:mysql://127.0.0.1:3306/hel -Ddb.user=hel_dev -Ddb.password=hel_dev -Ddb.skipUpdateTables=sys_user,sys_function_b`
\ No newline at end of file
# 融租易开环境搭建
此章节将说明部署一个新项目的开发环境需要的步骤。
## 后端开发环境搭建
### 开发工具
- JDK 1.8 及以上
- IntelliJ IDEA 或 Eclipse
- redis 3.0 及以上
- maven 3.3 及以上
- Tomcat 7+ (**不支持 Tomcat 6**)
- 数据库(任选)
- Mysql server 5.6 及以上
- SqlServer 2012 及以上
- Oracle 9 以上
- Navicat Premium(或其他)
- Git
**注:开发人员所需工具请向管理员获取**
### 软件安装
#### Java 安装
1.[Oracle 官网 ](https://nodejs.orghttp://www.oracle.com/technetwork/cn/java/javase/downloads/index.html)下载对应平台的 JDK 1.8 以上的环境。
2. 本地执行安装文件,安装 JDK 环境。
3. Win 在环境变量系统变量中 path 配置 JDK 的环境变量指向 JDK 安装目录下 ` JDK/bin `
4. 配置完成后打开 cmd 执行 ` javac `,有提示则说明环境安装成功。
> eclipse 中 JRE 的配置需要指定 JDK 目录,不能是 JRE。(maven 需要 JDK)
#### Git 安装
1.[Git 官网 ](https://git-scm.com/download/)下载对应平台的 Git。
2. 本地执行安装文件, 安装 Git 环境。
3. Win 在环境变量中系统变量的 path 配置 Git 的环境变量指向 Git 安装目录下的 ` /bin `
4. 配置完成后打开 cmd 执行 ` git `,有提示则说明环境安装成功。
[Git 简明教程](git_guide.md)
> 对于 Windows,安装 Git 以后,你可以在任意目录 右键,`Git Bash Here`
>
> 打开的 MINGW 命令窗口可以执行 **兼容 linux 系统** 的命令,如`rm`,`ls` 等
#### Maven 安装
1.[Maven 官网 ](http://mirror.bit.edu.cn/apache/maven/)下载对应平台的合适的 maven 版本的压缩包。
2. 本地解压压缩包。
3. Win 在环境变量中系统变量的 path 配置 maven 的环境变量指向 maven 解压目录下的 ` /bin `
4. 配置完成后打开 cmd 执行 ` mvn -v `,有提示则说明环境安装成功。
#### Redis 安装
1.[Redis win 官网 ](https://github.com/MSOpenTech/redis/releases)下载最新的 redis 版本的压缩包。
2. 本地解压压缩包。
3. Win 在解压目录下打开 cmd 执行 ` redis-server.exe redis.windows.conf `,有提示则说明 Redis 已经启动。
4. Win 平台下如果启动失败,修改 redis.windows.conf 文件中的 maxheap 为 ` maxheap 1024000000 `
**注:** *开发需要依赖 Redis 环境,所以在启动后台程序时,请确保 Redis 已经启动。*
* redis GUI 客户端下载 :http://redisdesktop.com/
* redis 命令手册:http://doc.redisfans.com/
* redis 清空缓存命令:flushall
> Mac, Linux 用户, 请到 http://redis.io 下载源码,编译安装
### 开发准备
[新建项目](project-create.md)
### 常见问题
- Window 环境下,Git Bash 乱码?
- 右键标题栏 → Options → Text:
- Local : zh_CN
- Character Set: GBK
- Eclipse 中 pom.xml 报错?
- 设置 eclipse → maven
<img src="assets/ignore_pom_error.png" width="50%"/>
...@@ -9,9 +9,9 @@ ...@@ -9,9 +9,9 @@
* [1.1 Git 使用](/git-guide.md "git指令") * [1.1 Git 使用](/git-guide.md "git指令")
* [1.2 Maven 使用](/maven.md "maven使用") * [1.2 Maven 使用](/maven.md "maven使用")
* 1.3 开发环境搭建 * [1.3 开发环境搭建](/project-create.md)
* 1.4 更新项目的HEL依赖版本 * [1.4 更新项目的HEL依赖版本](/project-update.md)
* 1.5 Liquibase * [1.5 Liquibase](/liquibase-use.md)
* II. 项目开发规范 * II. 项目开发规范
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment