开放平台README.MD


FAQ:
1、Swagger页面访问路径
http://localhost:8080/swagger-ui.html
2、Mybatis自动生成的映射文件
查询text类型的字段信息时,使用主键查询,或者单独使用withBlobs查询
插入和更新都包含
3、测试环境服务启动:nohup java -jar openplatform-0.0.1-SNAPSHOT.jar &
nohup //不挂断运行命令 输出一般重定向到当前目录下的nohup.out文件中
$ //在后台运行命令
4、脚本启动服务
./server.sh stop|start
5、redis-cli连接测试环境redis服务
在命令目录下进入到cmd执行该命令连接测试环境的redis服务redis-cli -h 10.0.0.112 -p 6379 -a crs-pf25dj24:Jt3d#%^5Ed
redis-cli> config set notify-keyspace-events Egx
redis服务配置完成后,需要在代码中添加spring session对redis的自动配置信息NO_OP
不然服务启动还是报错
6、后台管理系统页面登录地址
http://10.0.0.222:8284/#/
7、使用日志框架的日志文件,去除nohup的日志输出
nohup java -jar openplatform-back-0.0.1-SNAPSHOT.jar >> /dev/null &
8、日志相关的配置信息
如果你的终端支持ANSI,设置彩色输出会让日志更具可读性。通过在application.properties中设置spring.output.ansi.enabled参数来支持。
NEVER:禁用ANSI-colored输出(默认项)
DETECT:会检查终端是否支持ANSI,是的话就采用彩色输出(推荐项)
ALWAYS:总是使用ANSI-colored格式输出,若终端不支持的时候,会有很多干扰信息,不推荐使用
9、测试环境启动nginx
cd /usr/local/nginx/conf
/usr/local/nginx/sbin/nginx -启动服务
/usr/local/nginx/sbin/nginx -s stop -停止服务
/usr/local/nginx/sbin/nginx -h 命令帮助
/usr/local/nginx/sbin/nginx -t 验证配置文件
vim /usr/local/nginx/conf/nginx.conf nginx的配置文件
10、日志文件打印修改,调整到logs目录下,原来的日志文件不在做日志信息记录
nohup命令的标准输出导向/dev/null,不做保存。
单个日志文件最大在10Mb,超出后会自动切换文件名称
11、du -sh查看日志文件大小
12、nginx日志
log_format格式变量:
$remote_addr #记录访问网站的客户端地址
$remote_user #远程客户端用户名
$time_local #记录访问时间与时区
$request #用户的http请求起始行信息
$status #http状态码,记录请求返回的状态码,例如:200、301、404等
$body_bytes_sent #服务器发送给客户端的响应body字节数
$http_referer #记录此次请求是从哪个连接访问过来的,可以根据该参数进行防盗链设置。
$http_user_agent #记录客户端访问信息,例如:浏览器、手机客户端等
$http_x_forwarded_for #当前端有代理服务器时,设置web节点记录客户端地址的配置,此参数生效的前提是代理服务器也要进行相关的x_forwarded_for设置
13、虚拟机启动参数添加--简单介绍
-Djava.awt.headless=true
在使用Java处理图形应用时,经常有人推荐设置 -Djava.awt.headless=true,具体含义和效果查了一下,记录在这里分享 Headless模式是系统的一种配置模式。在该模式下,系统缺少了显示设备、键盘或鼠标。 Headless模式虽然不是我们愿意见到的,但事实上我们却常常需要在该模式下工作,尤其是服务器端程序开发者。因为服务器(如提供Web服务的主机)往往可能缺少前述设备,但又需要使用他们提供的功能,生成相应的数据,以提供给客户端(如浏览器所在的配有相关的显示设备、键盘和鼠标的主机)。 一般是在程序开始激活headless模式,告诉程序,现在你要工作在Headless mo ...
-Djava.net.preferIPv4Stack=true
让程序只支持IPV4的使用

##debug模式启动
-XDebug 启用调试。
-Xnoagent 禁用默认sun.tools.debug调试器。
-Djava.compiler=NONE 禁止 JIT 编译器的加载。
-Xrunjdwp 加载JDWP的JPDA参考执行实例
dt_socket 套接字传输。
dt_shmem 共享内存传输,仅限于 Windows。
server=y/n VM 是否需要作为调试服务器执行。
address=3999 调试服务器的端口号,客户端用来连接服务器的端口号。
suspend=y/n 是否在调试客户端建立连接之后启动 VM 。


##jmx模式启动
-Dcom.sun.management.jmxremote.port=1099 开放端口
-Dcom.sun.management.jmxremote.ssl=false
JMX的SSL连接打开
-Dcom.sun.management.jmxremote.authenticate=false
不做权限验证

整个堆大小=年轻代+年老代+持久代
正常的管理参数
-server
-Xmx2g --最大可用内存
-Xms2g --初始化堆大小
-Xmn256m --newSize
持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8
-XX:PermSize=128m
-Xss256k
设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。
-XX:+DisableExplicitGC 禁止调用System.gc();但jvm的gc仍然有效
-XX:+UseConcMarkSweepGC 对老生代采用并发标记交换算法进行GC
-XX:+CMSParallelRemarkEnabled 是否启用并行
-XX:+UseCMSCompactAtFullCollection 打开对年老代的压缩。可能会影响性能,但是可以消除碎片
-XX:LargePageSizeInBytes=128m 设置用于Java堆的大页面尺寸
-XX:+UseFastAccessorMethods 优化原始类型的getter方法性能
-XX:+UseCMSInitiatingOccupancyOnly
CMS有动态检查机制。
CMS会根据历史记录,预测老年代还需要多久填满及进行一次回收所需要的时间。
在老年代空间用完之前,CMS可以根据自己的预测自动执行垃圾回收。
这个特性可以使用参数UseCMSInitiatingOccupancyOnly来关闭。

-XX:CMSInitiatingOccupancyFraction=70 CMS生成占用百分比以启动CMS收集周期

-是标准参数,所有的vm实现都必须是实现这些参数的功能,而且向后
-X是非标准参数,默认所有jvm实现这些参数,但是并不保证所有的jvm实现都满足,且不保证向后兼容
-XX非Stable参数,此类参数各个jvm实现会有所不同,将来可能会随时取消

14、跨服务器拷贝文件
迁入服务器地址 迁入服务器文件放置路径
scp -r reinsure-apache-tomcat-7.0.64 jboss@10.100.8.7:/app/java/reinsure-apache-tomcat
迁出服务名称 迁入服务器用户名(最好不要用root)

uat
10.100.8.227 jboss kmtA5OrSgij76fw
scp -r back jboss@10.100.8.227:/app/java/

15、本地环境启动添加激活参数
在项目主类中运行项目时,需要做运行时配置信息-run configurations中添加spring-boot:run -Drun.profiles=test

Maven启动指定Profile通过-P,如mvn spring-boot:run -Ptest,但这是Maven的Profile。
如果要指定spring-boot的spring.profiles.active,则必须使用mvn spring-boot:run -Drun.profiles=test
如果使用命令行直接运行jar文件,则使用java -jar -Dspring.profiles.active=test demo-0.0.1-SNAPSHOT.jar
如果使用开发工具,运行Application.java文件启动,则增加参数--spring.profiles.active=test

nohup java -jar openplatform-back-0.0.1-SNAPSHOT.jar --spring.profiles.active=test &




https://github.com/starcwang/canal_mysql_elasticsearch_sync
https://elasticsearch.cn/book/elasticsearch_definitive_guide_2.x/
http://10.0.0.223:9100/


16、select for update 的使用场景,为了避免自己看到的数据并不是数据库存储的最新数据并且看到的数据只能由自己修改,需要用 for update 来限制
使用情景:
1. select *** for update 的使用场景
为了让自己查到的数据确保是最新数据,并且查到后的数据只允许自己来修改的时候,需要用到 for update 子句。
2. select *** lock in share mode 使用场景
为了确保自己查到的数据没有被其他的事务正在修改,也就是说确保查到的数据是最新的数据,并且不允许其他人来修改数据。但是自己不一定能够修改数据,因为有可能其他的事务也对这些数据 使用了 in share mode 的方式上了 S 锁。

性能影响:
select for update 语句,相当于一个 update 语句。在业务繁忙的情况下,如果事务没有及时的commit或者rollback 可能会造成其他事务长时间的等待,从而影响数据库的并发使用效率。
select lock in share mode 语句是一个给查找的数据上一个共享锁(S 锁)的功能,它允许其他的事务也对该数据上 S锁,但是不能够允许对该数据进行修改。如果不及时的commit 或者rollback 也可能会造成大量的事务等待。
for update 和 lock in share mode 的区别:前一个上的是排他锁(X 锁),一旦一个事务获取了这个锁,其他的事务是没法在这些数据上执行 for update ;后一个是共享锁,多个事务可以同时的对相同数据执行 lock in share mode。

17、创建视图:
CREATE ALGORITHM=TEMPTABLE VIEW test AS SELECT * FROM test;#创建语句瞬间创建一张临时表
CREATE ALGORITHM=MERGE VIEW test AS SELECT * F ROM test;#最终查询的还是物理表
CREATE ALGORITHM=UNDEFINED VIEW test AS SELECT * FROM test;#系统帮你选择


18、-DskipTests,不执行测试用例,但编译测试用例类生成相应的class文件至target/test-classes下。

-Dmaven.test.skip=true,不执行测试用例,也不编译测试用例类。

19、intermediate location of uploaded files
上传文件的缓存地址无效,
需要在启动类中指定一个已经创建的目录

20、事物的传播性
了解事务的集中传播忒性
1)、PROPAGATION_REQUIRED:如果存在一个事务,则支持当前事务。如果没有事务则开启。
2)、PROPAGATION_SUPPORTS:如果存在一个事务,支持当前事务。如果没有事务,则非事务的执行。
3)、PROPAGATION_MANDATORY:如果已经存在一个事务,支持当前事务。如果没有一个活动的事务,则抛出异常。
4)、PROPAGATION_REQUIRES_NEW:总是开启一个新的事务。如果一个事务存在,则将这个存在的事务挂起。
5)、PROPAGATION_NOT_SUPPORTED:总是非事务地执行,并挂起任何存在的事务。
6)、PROPAGATION_NEVER:总是非事务地执行,如果存在一个活动事务,则抛出异常。
7)、 PROPAGATION_NESTED:如果一个活动的事务存在,则运行在一个嵌套的事务中,如果没有活动事务,则按TransactionDefinition.PROPAGATION_REQUIRED属性执行
事物的隔离级别
1)、ISOLATION_DEFAULT: 这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别。
2)、ISOLATION_READ_UNCOMMITTED:这是事务最低的隔离级别,它允许另外一个事务可以看到这个事务未提交的数据。
3)、ISOLATION_READ_COMMITTED:保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据。
4)、ISOLATION_REPEATALBE_READ: 这种事务隔离级别可以防止脏读,不可重复读。但是可能出现幻想读。它除了保证一个事务不能读取另外一个事务未提交的数据外,还保证了避免下面的情况产生(不可重复读)。
5)、ISOLATION_SERIALIZABLE 这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。除了防止脏读,不课重复读外,还避免了幻想读。

21、安装jar包到本地仓库
mvn install:install-file -Dfile=F:wificom.isoftstone.iics.services.all.api-0.0.1-SNAPSHOT.jar -DgroupId=com.isoftstone.iics -DartifactId=com.isoftstone.iics.services.all.api -Dversion=0.0.1-SNAPSHOT -Dpackaging=jar


 
原文地址:https://www.cnblogs.com/nihaofenghao/p/8929906.html