我们已经完成了业务的开发工作.在开发过程中使用的是:的内置数据库,假设开发完成后,我们需要发布到生产系统,那么建议使用外部的数据库,如果用户很多,需要保障系统的高可用性,就需要考虑集群环境。
所以这节课,我们的目标内容是:如何将开发好的系统迁移到生产系统
那么接下来要做以下三件事情:
1.配置外部数据库
2.配置集群环境
3.开发机的数据迁移
注意:一开始配置的外部数据库是空的,所有的开发机的业务数据是在本地的H2数据库中,做第三步,才能将开发机数据导入到生产机中
数据库支持
我们先介绍一下,O2OA默认的是内置的H2数据库,H2数据库是一个开源的纯Java关系数据库.
默认情况下启动时将启动一个H2数据库服务作为数据源,实际数据存储位置。
o2server/local/repository/data/X.mv.db
下面这个表H2数据库和其他数据库的一个对比:
那么它的特点是轻量,纯Java,可嵌入,支持标准JDBC访问.
在正式生产环境中, 建议使用MySQL,PostgreSQL,Oracle等主流的数据库产品.
O2OA底层,是通过openjpa,实现Java对象到数据库的读写的.
下面这个地址是openjpa默认支持的数据库。
O2OA通过openjpa默认支持以下数据库:
Database Name | Database Version | JDBC Driver Name | JDBC Driver Version |
Apache Derby | 10.1.2.1 | Apache Derby Embedded JDBC Driver | 10.1.2.1 |
Borland Interbase | 7.1.0.202 | Interclient | 4.5.1 |
Borland JDataStore | 6.0 | Borland JDataStore | 6.0 |
DB2 | 8.1 | IBM DB2 JDBC Universal Driver | 1.0.581 |
Empress | 8.62 | Empress Category 2 JDBC Driver | 8.62 |
Firebird | 1.5 | JayBird JCA/JDBC driver | 1.0.1 |
H2 Database Engine | 1.0 | H2 | 1.0 |
Hypersonic Database Engine | 1.8.0 | Hypersonic | 1.8.0 |
Informix Dynamic Server | 9.30.UC10 | Informix JDBC driver | 2.21.JC2 |
InterSystems Cache | 5.0 | Cache JDBC Driver | 5.0 |
Microsoft Access | 9.0 (a.k.a. "2000") | DataDirect SequeLink | 5.4.0038 |
Microsoft SQL Server | 9.00.1399 (SQL Server 2005) | SQLServer | 1.0.809.102 |
Microsoft Visual FoxPro | 7.0 | DataDirect SequeLink | 5.4.0038 |
MySQL | 3.23.43-log | MySQL Driver | 3.0.14 |
MySQL | 5.0.26 | MySQL Driver | 3.0.14 |
Oracle | 8.1,9.2,10.1 | Oracle JDBC driver | 10.2.0.1.0 |
Pointbase | 4.4 | Pointbase JDBC driver | 4.4 (4.4) |
PostgreSQL | 7.2.1 | PostgreSQL Native Driver | 8.1 |
PostgreSQL | 8.1.5 | PostgreSQL Native Driver | 8.1 |
Sybase Adaptive Server Enterprise | 12.5 | jConnect | 5.5 (5.5) |
主流数据库是已经支持的,同时我们也支持一些国产数据库.
国产数据库支持
对与国产数据库的支持是对不同的数据库编写不同的适配方言来实现的.
也就是通过定制 DBDictionary来实现对接.
目前我们已经适配的国产数据库是:
数据库 | 方言 |
达梦 | com.x.base.core.openjpa.jdbc.sql.DMDictionary |
南大通用8s | com.x.base.core.openjpa.jdbc.sql.GBaseDictionary |
南大通用华库(mysql5) | com.x.base.core.openjpa.jdbc.sql.GBaseMySQL5Dictionary |
南大通用华库(mysql8) | com.x.base.core.openjpa.jdbc.sql.GBaseMySQLDictionary |
人大金仓V7 | com.x.base.core.openjpa.jdbc.sql.KingbaseDictionary |
人大金仓V8 | com.x.base.core.openjpa.jdbc.sql.Kingbase8Dictionary |
人大金仓V8R6 | com.x.base.core.openjpa.jdbc.sql.Kingbase8R6Dictionary |
神通数据库 | com.x.base.core.openjpa.jdbc.sql.OscarDictionary |
各种PostgreSQL改造版本 | org.apache.openjpa.jdbc.sql.PostgresDictionary |
数据库配置步骤
配置步骤大体是一样的,主要是配置externalDataSources.json文件.
我们在o2server服务器目录下的configSample目录中已经创建了各个数据库连接的样例配置文件.
(打开看一下)
我们把externalDataSources_mysql.json配置文件复制到config目录下,去掉下划线后面的部分。
系统会到config目录下读取配置文件,如果没有配置文件,平台读取默认值。
MySQL配置步骤
下面我们就MySQL数据库连接配置进行操作.(打开数据库连接工具)
我们事先已经安装完成一个空的MySQL ,版本是MySQL 8.0.27,地址:traindb.o2oa.net
在安装好的MySQL中创建一个数据库,
数据库名任意,譬如:X
设置数据库字符集为:utf8mb4
排序规则:选择utf8mb4_0900_ai_ci
我们只要创建一个数据库就可以了,表,索引会自动创建。
(去本地电脑o2server上操作)
在o2server/config目录下,修改配置externalDataSources.json
[ { "url":"jdbc:mysql://traindb.o2oa.net:3306/X?autoReconnect=true&useSSL=false&useUnicode=true&characterEncoding=UTF-8&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8", "username" : "root", "password" :"1234abcd", "includes": [], "excludes": [], "enable" : true } ]
1.修改其中的url , username , password字段.
2.重启服务器完成MySQL配置.
3.打开控制台看
从控制台看到默认的H2数据库还是启动了,原因是我们没有把默认的数据库给关闭掉,如果说希望服务器减少这样的资源开销,那么我们需要去修改一下配置文件,关闭掉H2数据库的使用。在哪里改?
先去config目录里 找一下node_127.0.0.json,如果有直接改参数,如果没有,configSample目录拷贝一个,
node_127.0.0.json,然后编辑文件,去找到data,把enable改成false。
验证数据库配置
登陆服务器http://live.o2oa.net
使用o2oa管理员登陆
点击左上角菜单->组织管理
新建用户
保存人员信息后,我们打开数据库可以看到数据已经存储到MySQL数据库中了.
人员信息存储表:"ORG_PERSON" 查看“数据”书签
验证完成.
配置文件详解
完成了验证了之后,我们回过来再来解释一下,
数据库连接的,配置文件里面的相关参数.(打开ppt第8页)
enable:是否启用.
url:jdbc连接地址.
username:数据库jdbc连接用户名.
password:数据库jdbc连接密码.
driverClassName:数据库驱动类名
dictionary:方言,我们国产数据库的支持就是通过编写不同的方言来实现的。
maxTotal:最大使用连接数,默认是50,系统的量很大的话,可以设置大一些。
maxIdle:最大空闲连接数
statEnable:启用统计,默认启用,我们使用的是德鲁伊的统计,可以对数据库和sql进行监控,有些国产数据库的语法树他是无法分析到的,所以需要关闭这个选项。
statFilter:统计方式配置,默认mergeStat
slowSqlMillis:执行缓慢sql毫秒数,默认2000毫秒,执行缓慢的sql将被单独记录.
includes:设置此数据库存储的类,默认情况下存储所有类型,如果需要对每个类进行单独的控制以达到高性能,可以将不同的类存储到不同的节点上提高性能.可以使用通配符*
excludes:在此节点上不存储的类,和includes一起设置实际存储的类,可以使用通配符*
logLevel:默认日志级别,FATAL, ERROR, WARN, INFO, TRACE. 完整的配置为DefaultLevel=WARN, Tool=TRACE, Enhance=TRACE, METADATA=TRACE, Runtime=TRACE, Query=TRACE, DataCache=TRACE, JDBC=TRACE, SQL=TRACE.
transactionIsolation:这个是数据库的事务隔离级别:我们系统默认的隔离级别是:read-uncommitted,我们系统使用队列来保持事务的一致性的,所以说一般情况下不需要提升隔离级别。其他的配置参数一般默认就好了。
testConnectionOnCheckin:测试入池连接,默认false.
testConnectionOnCheckout:测试出池连接,默认false.
maxIdleTime:空闲阈值,默认300秒.
autoCommit:自动提交,默认为false.
接着我们来看一下德鲁伊的统计功能,从哪里进去看呢
http://127.0.0.1:20030/x_program_center/
注意:这个需要管理员账户登陆
进去之后进到SQL监控,这里显示的就是所有执行过的SQL语句,每一条的sql语句的执行数和执行时间都有记录。具体就不再展开来说了。
在URI 监控页面可以看到所有接口访问的情况。