后端接口
一、环境搭建
遵循阿里java开发规范 开发工具[ideaj]有规范的插件。
开发准备
环境 | 版本 | 备注 |
---|---|---|
JDK | 1.8.211 - 391 | java环境 |
Mysql | 5.6.5 | 数据存储 |
Redis | 6.2 | 服务信息注册中心 |
Nacos | 2.1.1 | 配置注册中心 |
seata | 1.6.1 | 事务 |
Maven | 3.6.3 | 代码构建 |
minio | windows版本 | 图片存储 |
IM | 默认 | 店铺客服 |
xxl-job | 2.3.0 | 定时任务 |
node | 14.20.0 | JS环境 |
JDK安装部署
一、下载安装包
二、JDK安装过程
1.解压下载的压缩包,双击解压出来的exe文件
2.点击下一步
3.点击更改,设置安装路径
4.更改完成后,点击确定
5.点击下一步
6.等待安装
7.自动展示如下界面, 安装 jre,可以更改 jre 安装路径。注意:如果提示需要将 jre 安装在一个空目录下,那自己创建一个目录即可,这里建议jdk和jre放在同级目录下
设置后,点击下一步
8.进行安装
9.安装成功点击关闭
三、配置环境变量
1.右击我的电脑,选择属性
2.点击高级系统设置
3.点击环境变量
4.在系统变量区里点击:新建
5.新建变量名为JAVA_HOME,变量值为你的jdk安装目录,设置完成后点击确定
6.新建变量名为CLASSPATH,变量值: .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar (注意:变量值开头是英文句号),设置完成后点击确定
7.系统变量里双击Path变量,或者单击path再点编辑
8.点击新建,变量值为%JAVA_HOME%\bin ,并将它移到最前端,然后点击确定。
9.点击确定
到这里环境变量配置成功,接下来就检验一下
四、检验是否安装成功
1.键盘win+r 弹出运行,输入cmd,点击确定
2.输入java -version获取当前安装的 jdk 的版本信息(注意:java后面有个空格)
redis安装部署
一、redis下载
Redis - The Real-time Data Platform
二、zip包安装
解压zip包到指定目录
三、启动redis服务
打开cmd窗口,切换到Redis安装路径,输入 redis-server 启动 redis 服务
MySQL部署安装
一、MySQL下载
https://dev.mysql.com/downloads/mysql/
二、MySQL安装
1、双击下载的.msi文件
2、安装开始界面,勾选I accept the license terms(我接受许可条款)。
3、勾选Skip the check for updates(请跳过有关更新的检查)。
4、选择第二项:Server only(仅作为服务器),安装路径可以修改,也可以默认为C盘,但尽量安装在除系统盘以外的其他盘,然后点击下一步next。
5、进行安装界面,点击Execute(执行)进行安装,安装完成后点击下一步next。
6、配置界面,准备Configuration配置。
a. 选择服务器类型: Developer Machine(开发者类型):占用内存资源最少,适用于开发者使用。 Server Machine(服务器类型):占用内存稍多一些,主要用作服务器的机器使用。 Dedicated MySQL Server Machine(专用MySQL服务器):占用内存最多,专门用来做数据库服务器的机器使用。 b. 设置服务器端口号: 端口号默认为3306。
7、填写Root用户密码,请牢记该密码,设置密码为123456,然后点击下一步next。
8、命名MySQL服务名称,并勾选服务开机启动(Start the MySQL Server at System Startup)和标准系统账户(Standard System Account),确定配置后点击下一步next。
9、完成MySQL配置,配置成功后点击下一步next。
10、完成MySQL的安装,点击Finish。
三、启动MySQL
窗口键+R组合键打开电脑运行,再从文本框里输入cmd打开命令行终端输入命令net start MySQL进行启动MySQL服务。同理,关闭MySQL服务输入命令net stop MySQL。
(注:MySQL8请执行该命令以适配:sql_mode=STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE)
Nacos 部署安装 【独立版】
目前是用的nacos 配置信息存储在mysql数据库中。
一、安装
项目docs目录下面的soft文件夹中有Nacos 2.1.1文件夹 可以直接拷贝出来使用。
二、配置
1、在mysql数据库中新建 nacos_db 数据库,并导入脚本nacos_db.sql(邮件附带)。 2、修改Nacos配置文件 application.properties
#**************************************************************#
# 主要是修改这段配置 开始
#**************************************************************#
#*************** Spring Boot Related Configurations ***************#
### Default web context path:
server.servlet.contextPath=/nacos
### Include message field
server.error.include-message=ON_PARAM
### Default web server port:
server.port=8848
#*************** Network Related Configurations ***************#
#*************** Config Module Related Configurations 配置数据库链接信息 ***************#
### If use MySQL as datasource:
spring.datasource.platform=mysql
### Count of DB:
db.num=1
### Connect URL of DB:
db.url.0=jdbc:mysql://localhost:3306/nacos_db?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=51bbec4bcde2ef40
#**************************************************************#
# 主要是修改这段配置 结束
#**************************************************************#
nacos.naming.empty-service.auto-clean=true
nacos.naming.empty-service.clean.initial-delay-ms=50000
nacos.naming.empty-service.clean.period-time-ms=30000
#*************** Metrics Related Configurations ***************#
### Metrics for prometheus
#management.endpoints.web.exposure.include=*
### Metrics for elastic search
management.metrics.export.elastic.enabled=false
#management.metrics.export.elastic.host=http://localhost:9200
### Metrics for influx
management.metrics.export.influx.enabled=false
#*************** Access Log Related Configurations ***************#
### If turn on the access log:
server.tomcat.accesslog.enabled=true
### The access log pattern:
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i %{Request-Source}i
### The directory of access log:
server.tomcat.basedir=file:.
#*************** Access Control Related Configurations ***************#
### If enable spring security, this option is deprecated in 1.2.0:
#spring.security.enabled=false
### The ignore urls of auth, is deprecated in 1.2.0:
nacos.security.ignore.urls=/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-ui/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**
### The auth system to use, currently only 'nacos' and 'ldap' is supported:
nacos.core.auth.system.type=nacos
### If turn on auth system:
nacos.core.auth.enabled=false
### Turn on/off caching of auth information. By turning on this switch, the update of auth information would have a 15 seconds delay.
nacos.core.auth.caching.enabled=true
### Since 1.4.1, Turn on/off white auth for user-agent: nacos-server, only for upgrade from old version.
nacos.core.auth.enable.userAgentAuthWhite=false
### Since 1.4.1, worked when nacos.core.auth.enabled=true and nacos.core.auth.enable.userAgentAuthWhite=false.
### The two properties is the white list for auth and used by identity the request from other server.
nacos.core.auth.server.identity.key=serverIdentity
nacos.core.auth.server.identity.value=security
### worked when nacos.core.auth.system.type=nacos
### The token expiration in seconds:
nacos.core.auth.plugin.nacos.token.expire.seconds=18000
### The default token:
nacos.core.auth.plugin.nacos.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789
### worked when nacos.core.auth.system.type=ldap,{0} is Placeholder,replace login username
#*************** Istio Related Configurations ***************#
### If turn on the MCP server:
nacos.istio.mcp.server.enabled=false
#*************** Core Related Configurations ***************#
三、修改启动脚本
一、Linux、MacOS 修改startuop.sh 152行:集群模式 154行:单机模式
#!/bin/bash
# Copyright 1999-2018 Alibaba Group Holding Ltd.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
cygwin=false
darwin=false
os400=false
case "`uname`" in
CYGWIN*) cygwin=true;;
Darwin*) darwin=true;;
OS400*) os400=true;;
esac
error_exit ()
{
echo "ERROR: $1 !!"
exit 1
}
[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=$HOME/jdk/java
[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/usr/java
[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/opt/taobao/java
[ ! -e "$JAVA_HOME/bin/java" ] && unset JAVA_HOME
if [ -z "$JAVA_HOME" ]; then
if $darwin; then
if [ -x '/usr/libexec/java_home' ] ; then
export JAVA_HOME=`/usr/libexec/java_home`
elif [ -d "/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home" ]; then
export JAVA_HOME="/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home"
fi
else
JAVA_PATH=`dirname $(readlink -f $(which javac))`
if [ "x$JAVA_PATH" != "x" ]; then
export JAVA_HOME=`dirname $JAVA_PATH 2>/dev/null`
fi
fi
if [ -z "$JAVA_HOME" ]; then
error_exit "Please set the JAVA_HOME variable in your environment, We need java(x64)! jdk8 or later is better!"
fi
fi
export SERVER="nacos-server"
# 集群模式
# export MODE="cluster"
# 独立模式
export MODE="standalone"
export FUNCTION_MODE="all"
export MEMBER_LIST=""
export EMBEDDED_STORAGE=""
while getopts ":m:f:s:c:p:" opt
do
case $opt in
m)
MODE=$OPTARG;;
f)
FUNCTION_MODE=$OPTARG;;
s)
SERVER=$OPTARG;;
c)
MEMBER_LIST=$OPTARG;;
p)
EMBEDDED_STORAGE=$OPTARG;;
?)
echo "Unknown parameter"
exit 1;;
esac
done
export JAVA_HOME
export JAVA="$JAVA_HOME/bin/java"
export BASE_DIR=`cd $(dirname $0)/..; pwd`
export CUSTOM_SEARCH_LOCATIONS=file:${BASE_DIR}/conf/
#===========================================================================================
# JVM Configuration
#===========================================================================================
if [[ "${MODE}" == "standalone" ]]; then
JAVA_OPT="${JAVA_OPT} -Xms512m -Xmx512m -Xmn256m"
JAVA_OPT="${JAVA_OPT} -Dnacos.standalone=true"
else
if [[ "${EMBEDDED_STORAGE}" == "embedded" ]]; then
JAVA_OPT="${JAVA_OPT} -DembeddedStorage=true"
fi
JAVA_OPT="${JAVA_OPT} -server -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${BASE_DIR}/logs/java_heapdump.hprof"
JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages"
fi
if [[ "${FUNCTION_MODE}" == "config" ]]; then
JAVA_OPT="${JAVA_OPT} -Dnacos.functionMode=config"
elif [[ "${FUNCTION_MODE}" == "naming" ]]; then
JAVA_OPT="${JAVA_OPT} -Dnacos.functionMode=naming"
fi
JAVA_OPT="${JAVA_OPT} -Dnacos.member.list=${MEMBER_LIST}"
JAVA_MAJOR_VERSION=$($JAVA -version 2>&1 | sed -E -n 's/.* version "([0-9]*).*$/\1/p')
if [[ "$JAVA_MAJOR_VERSION" -ge "9" ]] ; then
JAVA_OPT="${JAVA_OPT} -Xlog:gc*:file=${BASE_DIR}/logs/nacos_gc.log:time,tags:filecount=10,filesize=102400"
else
JAVA_OPT_EXT_FIX="-Djava.ext.dirs=${JAVA_HOME}/jre/lib/ext:${JAVA_HOME}/lib/ext"
JAVA_OPT="${JAVA_OPT} -Xloggc:${BASE_DIR}/logs/nacos_gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M"
fi
JAVA_OPT="${JAVA_OPT} -Dloader.path=${BASE_DIR}/plugins/health,${BASE_DIR}/plugins/cmdb,${BASE_DIR}/plugins/selector"
JAVA_OPT="${JAVA_OPT} -Dnacos.home=${BASE_DIR}"
JAVA_OPT="${JAVA_OPT} -jar ${BASE_DIR}/target/${SERVER}.jar"
JAVA_OPT="${JAVA_OPT} ${JAVA_OPT_EXT}"
JAVA_OPT="${JAVA_OPT} --spring.config.additional-location=${CUSTOM_SEARCH_LOCATIONS}"
JAVA_OPT="${JAVA_OPT} --logging.config=${BASE_DIR}/conf/nacos-logback.xml"
JAVA_OPT="${JAVA_OPT} --server.max-http-header-size=524288"
if [ ! -d "${BASE_DIR}/logs" ]; then
mkdir ${BASE_DIR}/logs
fi
echo "$JAVA $JAVA_OPT_EXT_FIX ${JAVA_OPT}"
if [[ "${MODE}" == "standalone" ]]; then
echo "nacos is starting with standalone"
else
echo "nacos is starting with cluster"
fi
# check the start.out log output file
if [ ! -f "${BASE_DIR}/logs/start.out" ]; then
touch "${BASE_DIR}/logs/start.out"
fi
# start
echo "$JAVA $JAVA_OPT_EXT_FIX ${JAVA_OPT}" > ${BASE_DIR}/logs/start.out 2>&1 &
if [[ "$JAVA_OPT_EXT_FIX" == "" ]]; then
nohup "$JAVA" ${JAVA_OPT} nacos.nacos >> ${BASE_DIR}/logs/start.out 2>&1 &
else
nohup "$JAVA" "$JAVA_OPT_EXT_FIX" ${JAVA_OPT} nacos.nacos >> ${BASE_DIR}/logs/start.out 2>&1 &
fi
echo "nacos is starting,you can check the ${BASE_DIR}/logs/start.out"
二、Windows
1、如果需要使用集群模式则使用 第281行 2、如果需要使用独立模式则使用 第283行
@echo off
rem Copyright 1999-2018 Alibaba Group Holding Ltd.
rem Licensed under the Apache License, Version 2.0 (the "License");
rem you may not use this file except in compliance with the License.
rem You may obtain a copy of the License at
rem
rem http://www.apache.org/licenses/LICENSE-2.0
rem
rem Unless required by applicable law or agreed to in writing, software
rem distributed under the License is distributed on an "AS IS" BASIS,
rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
rem See the License for the specific language governing permissions and
rem limitations under the License.
if not exist "%JAVA_HOME%\bin\java.exe" echo Please set the JAVA_HOME variable in your environment, We need java(x64)! jdk8 or later is better! & EXIT /B 1
set "JAVA=%JAVA_HOME%\bin\java.exe"
setlocal enabledelayedexpansion
set BASE_DIR=%~dp0
rem added double quotation marks to avoid the issue caused by the folder names containing spaces.
rem removed the last 5 chars(which means \bin\) to get the base DIR.
set BASE_DIR="%BASE_DIR:~0,-5%"
set CUSTOM_SEARCH_LOCATIONS=file:%BASE_DIR%/conf/
rem 集群模式
rem set MODE="cluster"
rem 独立模式
set MODE="standalone"
set FUNCTION_MODE="all"
set SERVER=nacos-server
set MODE_INDEX=-1
set FUNCTION_MODE_INDEX=-1
set SERVER_INDEX=-1
set EMBEDDED_STORAGE_INDEX=-1
set EMBEDDED_STORAGE=""
set i=0
for %%a in (%*) do (
if "%%a" == "-m" ( set /a MODE_INDEX=!i!+1 )
if "%%a" == "-f" ( set /a FUNCTION_MODE_INDEX=!i!+1 )
if "%%a" == "-s" ( set /a SERVER_INDEX=!i!+1 )
if "%%a" == "-p" ( set /a EMBEDDED_STORAGE_INDEX=!i!+1 )
set /a i+=1
)
set i=0
for %%a in (%*) do (
if %MODE_INDEX% == !i! ( set MODE="%%a" )
if %FUNCTION_MODE_INDEX% == !i! ( set FUNCTION_MODE="%%a" )
if %SERVER_INDEX% == !i! (set SERVER="%%a")
if %EMBEDDED_STORAGE_INDEX% == !i! (set EMBEDDED_STORAGE="%%a")
set /a i+=1
)
rem if nacos startup mode is standalone
if %MODE% == "standalone" (
echo "nacos is starting with standalone"
set "NACOS_OPTS=-Dnacos.standalone=true"
set "NACOS_JVM_OPTS=-Xms512m -Xmx512m -Xmn256m"
)
rem if nacos startup mode is cluster
if %MODE% == "cluster" (
echo "nacos is starting with cluster"
if %EMBEDDED_STORAGE% == "embedded" (
set "NACOS_OPTS=-DembeddedStorage=true"
)
set "NACOS_JVM_OPTS=-server -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=%BASE_DIR%\logs\java_heapdump.hprof -XX:-UseLargePages"
)
rem set nacos's functionMode
if %FUNCTION_MODE% == "config" (
set "NACOS_OPTS=%NACOS_OPTS% -Dnacos.functionMode=config"
)
if %FUNCTION_MODE% == "naming" (
set "NACOS_OPTS=%NACOS_OPTS% -Dnacos.functionMode=naming"
)
rem set nacos options
set "NACOS_OPTS=%NACOS_OPTS% -Dloader.path=%BASE_DIR%/plugins/health,%BASE_DIR%/plugins/cmdb,%BASE_DIR%/plugins/selector"
set "NACOS_OPTS=%NACOS_OPTS% -Dnacos.home=%BASE_DIR%"
set "NACOS_OPTS=%NACOS_OPTS% -jar %BASE_DIR%\target\%SERVER%.jar"
rem set nacos spring config location
set "NACOS_CONFIG_OPTS=--spring.config.additional-location=%CUSTOM_SEARCH_LOCATIONS%"
rem set nacos log4j file location
set "NACOS_LOG4J_OPTS=--logging.config=%BASE_DIR%/conf/nacos-logback.xml"
set COMMAND="%JAVA%" %NACOS_JVM_OPTS% %NACOS_OPTS% %NACOS_CONFIG_OPTS% %NACOS_LOG4J_OPTS% nacos.nacos %*
rem start nacos command
%COMMAND%
四、启动
方式一、Linux/MacOS
# 进入nacos的bin目录
cd {nacos_home}/bin
./startup.sh
# 可以查看nacos 启动日志
tail -f {nacos_home}/logs/start.out
方式二、Windows
# 进入nacos的bin目录
cd {nacos_home}/bin
./startup.cmd
# 可以查看nacos 启动日志
# {nacos_home}/logs/start.out
五、访问
打开浏览器输入,http://localhost:8848/nacos/ 默认账户密码:nacos/nacos
Seata安装部署
目前是用的nacos 配置信息存储在mysql数据库中。
一、安装
项目docs目录下面的soft文件夹中有seata1.6.1文件夹 可以直接拷贝出来使用。
二、配置
1、在mysql数据库中新建 seata_db 数据库,并导入脚本 seata_db.sql(邮件附带)。 2、修改Seata配置文件 application.yml.
在Nacos中配置SeataServer的配置信息 data-id名称要和{seata_home}/conf/application.yml中的一致
在nacos的public命名空间加入 配置 seataServer-dev.properties 文件如下配置 需要修改数据库配置
#For details about configuration items, see https://seata.io/zh-cn/docs/user/configurations.html
#Transport configuration, for client and server
transport.type=TCP
transport.server=NIO
transport.heartbeat=true
transport.enableTmClientBatchSendRequest=false
transport.enableRmClientBatchSendRequest=true
transport.enableTcServerBatchSendResponse=false
transport.rpcRmRequestTimeout=30000
transport.rpcTmRequestTimeout=30000
transport.rpcTcRequestTimeout=30000
transport.threadFactory.bossThreadPrefix=NettyBoss
transport.threadFactory.workerThreadPrefix=NettyServerNIOWorker
transport.threadFactory.serverExecutorThreadPrefix=NettyServerBizHandler
transport.threadFactory.shareBossWorker=false
transport.threadFactory.clientSelectorThreadPrefix=NettyClientSelector
transport.threadFactory.clientSelectorThreadSize=1
transport.threadFactory.clientWorkerThreadPrefix=NettyClientWorkerThread
transport.threadFactory.bossThreadSize=1
transport.threadFactory.workerThreadSize=default
transport.shutdown.wait=3
transport.serialization=seata
transport.compressor=none
#Transaction routing rules configuration, only for the client
# 此处的mygroup名字可以自定义,只修改这个值即可
service.vgroupMapping.mygroup=default
#If you use a registry, you can ignore it
#service.default.grouplist=127.0.0.1:8091
#service.enableDegrade=false
#service.disableGlobalTransaction=false
#Transaction rule configuration, only for the client
client.rm.asyncCommitBufferLimit=10000
client.rm.lock.retryInterval=10
client.rm.lock.retryTimes=30
client.rm.lock.retryPolicyBranchRollbackOnConflict=true
client.rm.reportRetryCount=5
client.rm.tableMetaCheckEnable=true
client.rm.tableMetaCheckerInterval=60000
client.rm.sqlParserType=druid
client.rm.reportSuccessEnable=false
client.rm.sagaBranchRegisterEnable=false
client.rm.sagaJsonParser=fastjson
client.rm.tccActionInterceptorOrder=-2147482648
client.tm.commitRetryCount=5
client.tm.rollbackRetryCount=5
client.tm.defaultGlobalTransactionTimeout=60000
client.tm.degradeCheck=false
client.tm.degradeCheckAllowTimes=10
client.tm.degradeCheckPeriod=2000
client.tm.interceptorOrder=-2147482648
client.undo.dataValidation=true
client.undo.logSerialization=jackson
client.undo.onlyCareUpdateColumns=true
server.undo.logSaveDays=7
server.undo.logDeletePeriod=86400000
client.undo.logTable=undo_log
client.undo.compress.enable=true
client.undo.compress.type=zip
client.undo.compress.threshold=64k
#For TCC transaction mode
tcc.fence.logTableName=tcc_fence_log
tcc.fence.cleanPeriod=1h
#Log rule configuration, for client and server
log.exceptionRate=100
#Transaction storage configuration, only for the server. The file, db, and redis configuration values are optional.
# 默认为file,一定要改为db,我们自己的服务启动会连接不到seata
store.mode=db
store.lock.mode=db
store.session.mode=db
#Used for password encryption
#These configurations are required if the `store mode` is `db`. If `store.mode,store.lock.mode,store.session.mode` are not equal to `db`, you can remove the configuration block.
# 修改mysql的配置
store.db.datasource=druid
store.db.dbType=mysql
store.db.driverClassName=com.mysql.cj.jdbc.Driver
# 指定seata的数据库,下面会提
store.db.url=jdbc:mysql://localhost:3306/seata_db?useUnicode=true&rewriteBatchedStatements=true
store.db.user=root
store.db.password=root
store.db.minConn=5
store.db.maxConn=30
store.db.globalTable=global_table
store.db.branchTable=branch_table
store.db.distributedLockTable=distributed_lock
store.db.queryLimit=100
store.db.lockTable=lock_table
store.db.maxWait=50000
#Transaction rule configuration, only for the server
server.recovery.committingRetryPeriod=600000
server.recovery.asynCommittingRetryPeriod=600000
server.recovery.rollbackingRetryPeriod=600000
server.recovery.timeoutRetryPeriod=600000
server.maxCommitRetryTimeout=-1
server.maxRollbackRetryTimeout=-1
server.rollbackRetryTimeoutUnlockEnable=false
server.distributedLockExpireTime=600000
server.xaerNotaRetryTimeout=600000
server.session.branchAsyncQueueSize=50000
server.session.enableBranchAsyncRemove=false
server.enableParallelRequestHandle=false
#Metrics configuration, only for the server
metrics.enabled=false
metrics.registryType=compact
metrics.exporterList=prometheus
metrics.exporterPrometheusPort=9898
{seata_home}/conf/application.yml 中的 注册中心 配置中心 和seata的数据存储配置
server:
# 访问端口 可以修改
port: 7091
spring:
application:
# 应用名称 可以修改
name: seata-server
logging:
config: classpath:logback-spring.xml
file:
path: ${user.home}/logs/seata
extend:
logstash-appender:
destination: 127.0.0.1:4560
kafka-appender:
bootstrap-servers: 127.0.0.1:9092
topic: logback_to_logstash
## 修改配置文件开始
# 控制台
console:
user:
username: seata
password: seata
seata:
# 配置中心
config:
type: nacos
nacos:
# nacos 访问地址 [可修改]
server-addr: localhost:8848
# nacos 命名空间 [可修改]
namespace: da8f7d37-960a-4c94-9691-9c77711d995c
# nacos 分组 [可修改]
group: DEFAULT_GROUP
# nacos 账户密码 [可修改]
username: nacos
password: laike
# seata配置 先配好nacos 把seataServer-dev.properties 复制到nacos里面
# 这个可以直接放在nacos的public 命令空间里面 [可修改,一定要跟上面的seata-server.properties文件名一致]
data-id: seataServer-dev.properties
# 注册中心
registry:
type: nacos
nacos:
# 应用名
application: seata-server
# nacos 访问地址
server-addr: localhost:8848
# nacos 分组
group: DEFAULT_GROUP
# nacos 命名空间
namespace: da8f7d37-960a-4c94-9691-9c77711d995c
cluster: default
# 账户密码
username: nacos
password: laike
## 修改配置文件结束
security:
secretKey: SeataSecretKey0c382ef121d778043159209298fd40bf3850a017
tokenValidityInMilliseconds: 1800000
ignore:
urls: /,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/api/v1/auth/login
三、启动
方式一、Linux、MacOS 启动
# 切换到seata的bin目录
cd {seata_home}/bin/
./seata-server.sh
# 查看日志
tail -f ../logs/start.out
方式二、Windows
# 切换到seata的bin目录
cd {seata_home}/bin/
./seata-server.bat
# 查看日志,直接打开
# {seata_home}/logs/start.out
四、访问
打开浏览器输入,访问地址:http://localhost:7091/#/ 账户密码:seata/seata
Cloud网关部署
这个网关用jar包部署
一、环境配置
pom.xml 中修改网关的Nacos 配置命名空间 和 Nacos访问地址
<profiles>
<profile>
<!-- 本地环境 -->
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<id>local</id>
<properties>
<profiles.active>local</profiles.active>
<nacos.namespace>f124b515-5b21-4bf8-9f72-25b585ee1343</nacos.namespace>
<nacos.address>localhost:8848</nacos.address>
<nacos.comm>comm-local.yml</nacos.comm>
<nacos.base.mybatis>laike-base-mybatis.yml</nacos.base.mybatis>
<nacos.plugins.mybatics>laike-plugins-mybatis.yml</nacos.plugins.mybatics>
</properties>
</profile>
<profile>
<!-- java开发环境 -->
<id>dev</id>
<properties>
<profiles.active>dev</profiles.active>
<nacos.namespace>da8f7d37-960a-4c94-9691-9c77711d995c</nacos.namespace>
<nacos.address>localhost:8848</nacos.address>
<nacos.comm>comm-dev.yml</nacos.comm>
<nacos.base.mybatis>laike-base-mybatis.yml</nacos.base.mybatis>
<nacos.plugins.mybatics>laike-plugins-mybatis.yml</nacos.plugins.mybatics>
</properties>
</profile>
<profile>
<!-- java生产环境 -->
<id>prod</id>
<properties>
<profiles.active>prod</profiles.active>
<nacos.namespace>23467031-bda4-48a0-a7ab-6bc1a4be22fd</nacos.namespace>
<nacos.address>localhost:8848</nacos.address>
<nacos.comm>comm-prod.yml</nacos.comm>
<nacos.base.mybatis>laike-base-mybatis.yml</nacos.base.mybatis>
<nacos.plugins.mybatics>laike-plugins-mybatis.yml</nacos.plugins.mybatics>
</properties>
</profile>
<profile>
<!-- java演示环境 -->
<id>demo</id>
<properties>
<profiles.active>demo</profiles.active>
<nacos.namespace>41b2716b-f0ea-443b-a9e1-481bdde0c62f</nacos.namespace>
<nacos.address>localhost:8848</nacos.address>
<nacos.comm>comm-demo.yml</nacos.comm>
<nacos.base.mybatis>laike-base-mybatis.yml</nacos.base.mybatis>
<nacos.plugins.mybatics>laike-plugins-mybatis.yml</nacos.plugins.mybatics>
</properties>
</profile>
<profile>
<!-- java测试环境 -->
<id>test</id>
<properties>
<profiles.active>test</profiles.active>
<nacos.namespace>a8d5eeb0-856f-4cdb-afe3-0fbd8d5bb597</nacos.namespace>
<!-- 改成nacos的地址 可以是域名或者 ip:port -->
<nacos.address>localhost:8848</nacos.address>
<nacos.comm>comm-test.yml</nacos.comm>
<nacos.base.mybatis>laike-base-mybatis.yml</nacos.base.mybatis>
<nacos.plugins.mybatics>laike-plugins-mybatis.yml</nacos.plugins.mybatics>
</properties>
</profile>
</profiles>
二、网关端口配置
打开浏览器输入 nacos 访问地址
http://localhost:8848/nacos 修改对应的环境laike-cloud-gateway-{active-profile}.yml 文件配置
server:
port: 9526 # 一般只要这个端口不被占用就行
tomcat:
uri-encoding: UTF-8
ssl:
enabled: false
connection-timeout: 20000
spring:
cloud:
gateway:
# 处理跨域请求
globalcors:
add-to-simple-url-handler-mapping: true
cors-configurations:
'[/**]':
allowedHeaders: "*"
allowedOrigins: "*"
allowCredentials: true
allowedMethods:
- GET
- POST
- DELETE
- HEAD
- PUT
- OPTION
default-filters:
- DedupeResponseHeader=Vary Access-Control-Allow-Origin Access-Control-Allow-Credentials, RETAIN_FIRST
routes:
# 配置模块路由
# PC店铺端接口
- id: admin-mch
uri: lb://admin-mch
predicates:
- Path=/admin-mch/**
# filters:
# - StripPrefix=1
# 商城管理后台
- id: admin
uri: lb://admin
predicates:
- Path=/admin/**,/saas/**
# filters:
# - StripPrefix=1
# 供应商
- id: supplier
uri: lb://supplier
predicates:
- Path=/supplier/**
# filters:
# - StripPrefix=1
# 移动端接口
- id: app
uri: lb://app
predicates:
- Path=/app/**
# filters:
# - StripPrefix=1
# 优惠券
- id: coupon
uri: lb://coupon
predicates:
- Path=/coupon/**
# filters:
# - StripPrefix=1
# 首页DIY
- id: diy
uri: lb://diy
predicates:
- Path=/diy/**
# filters:
# - StripPrefix=1
# 资源文件
- id: file
uri: lb://file
predicates:
- Path=/file/**
# filters:
# - StripPrefix=1
# 运费
- id: freight
uri: lb://freight
predicates:
- Path=/freight/**
# filters:
# - StripPrefix=1
# 网关
- id: gateway
uri: lb://gateway
predicates:
- Path=/gateway/**,/gw/**
# 发票
- id: invoice
uri: lb://invoice
predicates:
- Path=/invoice/**
# filters:
# - StripPrefix=1
# 移动端店铺接口
- id: mch
uri: lb://mch
predicates:
- Path=/mch/**
# filters:
# - StripPrefix=1
# 会员制
- id: member
uri: lb://member
predicates:
- Path=/member/**
# filters:
# - StripPrefix=1
# 订单
- id: order
uri: lb://order
predicates:
- Path=/order/**
# filters:
# - StripPrefix=1
# 支付
- id: payment
uri: lb://payment
predicates:
- Path=/payment/**
# filters:
# - StripPrefix=1
# 竞拍
- id: auction
uri: lb://auction
predicates:
- Path=/auction/**
# filters:
# - StripPrefix=1
# 分销
- id: distribute
uri: lb://distribute
predicates:
- Path=/distribute/**
# filters:
# - StripPrefix=1
# 拼团
- id: group
uri: lb://group
predicates:
- Path=/group/**
# filters:
# - StripPrefix=1
#
- id: integral
uri: lb://integral
predicates:
- Path=/integral/**
# filters:
# - StripPrefix=1
# 签到
- id: sign
uri: lb://sign
predicates:
- Path=/sign/**
# filters:
# - StripPrefix=1
# 预售
- id: presell
uri: lb://presell
predicates:
- Path=/presell/**
# filters:
# - StripPrefix=1
# 移动端商品
- id: products
uri: lb://products
predicates:
- Path=/products/**
# filters:
# - StripPrefix=1
# 秒杀
- id: seckill
uri: lb://seckill
predicates:
- Path=/seckill/**
# filters:
# - StripPrefix=1
# PC商城
- id: mall
uri: lb://mall
predicates:
- Path=/mall/**
# filters:
# - StripPrefix=1
# 定时任务
- id: laike-task
uri: lb://laike-task
predicates:
- Path=/task/**
# filters:
# - StripPrefix=1
# 用户信息
- id: user
uri: lb://user
predicates:
- Path=/user/**
# filters:
# - StripPrefix=1
# seata
- id: seata-demo
uri: lb://seata-demo
predicates:
- Path=/seata-demo/**
# filters:
# - StripPrefix=1
- id: flashsale
uri: lb://flashsale
predicates:
- Path=/flashsale/**
# filters:
# - StripPrefix=1
三、网关启动:
# nohup java -jar scgw.jar &
nohup java -jar -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xms256m -Xmx512m -Xmn128m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC scgw.jar &
四、网关nginx 配置
# 旧网关
# location /old_gw {
# proxy_pass http://localhost:18001/gateway/gw;
# proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# }
# 新网关
location /gw {
proxy_pass http://localhost:9526/gateway/gw;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
minio安装部署
minio下载
下载地址:
https://min.io/download#/windows
minio部署
1、使用"win"+"r"打开运行窗口,输入"cmd"并确认
2、使用cd命令进入到minio安装位置
3、使用以下启动命令运行minio,参数可根据实际修改
minio.exe server D:\MinIO\Data --console-address ":9018" --address ":9090"
参数介绍 D:\MinIO\Data:MinIO安装的目录,包含配置文件,存储文件 –console-address “:9018”:控制台端口,自带UI页面 –address “:9090”:API端口
4、运行成功
minio设置
1、使用控制台端口访问minio控制台,并登录
localhost:9018
username:minioadmin
password:minioadmin
2、创建buckets-laikeds
3、创建密钥
4、修改buckets权限为public
后台设置
验证
上传菜单图标
IM客服安装部署
注:需先配置移动端前端代码
移动端配置
const LKT_WEBSOCKET = 'ws://IP:端口/message/onlineMessage/'
服务启动
在idea直接启动LaikeOnlineMessageApplication.java
验证成功
在h5页面点击商品,选择左下角客服
发送消息,如图所示,成功启动
定时任务安装部署
导入
下载邮件中的laiketui-job
新建任务数据库xxl_job ,导入数据脚本xxl_job.sql(邮件附带)。
导入到ideaj 开发工具
配置
设置好maven配置信息
设置好数据库配置信息
启动
使用maven 的package 打包
win+r键打开运行窗口输入cmd打开命令窗口
使用cd命令进入jar包所在位置
启动任务服务
java -jar xxl-job-admin-2.3.0-SNAPSHOT.jar
访问
9、打开端口3366 外网可访问 默认密码 admin/123456 或者 admin/123654
任务调度中心页面
二、项目运行
项目结构介绍
1、整体结构介绍
此结构为通用结构,不包括插件模块的结构 带-api的是接口声明类
laiketui-java-app #整体项目
├── laike-admin-mch PC店铺端 【需部署,本地需启动】
├── laike-admin-mch-api
├── laike-admin-store 商城后台【需部署,本地需启动】
├── laike-admin-store-api
├── laike-admin-supplier 供应商插件【需部署,本地需启动】
├── laike-admin-supplier-api
├── laike-app 移动端【需部署,本地需启动】
├── laike-app-service-api
├── laike-common 公共模块
├── laike-common-serviceapi
├── laike-core
├── laike-coupon 优惠券【需部署,本地需启动】
├── laike-coupon-service-api
├── laike-diy diy首页【需部署,本地需启动】
├── laike-diy-service-api
├── laike-domain
├── laike-file 文件模块 【需部署,本地需启动】
├── laike-file-api
├── laike-freight 运费 【需部署,本地需启动】
├── laike-freight-service-api
├── laike-gateway 网关【需部署,本地需启动】
├── laike-invoice 发票【需部署,本地需启动】
├── laike-invoice-service-api
├── laike-mch 移动端店铺【需部署,本地需启动】
├── laike-mch-service-api
├── laike-member 会员制【需部署,本地需启动】
├── laike-member-service-api
├── laike-online-message 在线聊天IM【需部署,本地需启动】
├── laike-online-message-api
├── laike-order 移动端订单接口【需部署,本地需启动】
├── laike-order-service-api
├── laike-payment 支付模块【需部署,本地需启动】
├── laike-payment-service-api
├── laike-plugin-api 分销接口【需部署,本地需启动】
├── laike-plugin-auction 竞拍模块【需部署,本地需启动】
├── laike-plugin-auction-api
├── laike-plugin-common 插件公共模块
├── laike-plugin-distribution 分销模块【需部署,本地需启动】
├── laike-plugin-group 拼团模块【需部署,本地需启动】
├── laike-plugin-group-api
├── laike-plugin-integral 积分模块【需部署,本地需启动】
├── laike-plugin-integral-api
├── laike-presell 预售模块【需部署,本地需启动】
├── laike-presell-service-api
├── laike-products 移动端商品模块【需部署,本地需启动】
├── laike-products-service-api
├── laike-seckill 秒杀模块【需部署,本地需启动】
├── laike-seckill-service-api
├── laike-store-pc pc商城模块【需部署,本地需启动】
├── laike-store-pc-api
├── laike-task xxl任务逻辑【需部署,本地需启动】
├── laike-user 用户【需部署,本地需启动】
├── laike-user-service-api
└── pom.xml
2、单模块结构介绍
laike-xxxx 单个模块结构
laike-xxxx #模块名
├── laike-xxxx.iml
├── mvnw
├── mvnw.cmd
├── pom.xml #maven构建文件
├── src #源码文件
│ ├── main
│ │ ├── java
│ │ │ └── com
│ │ │ └── laiketui
│ │ │ └── xxxx #模块名
│ │ │ ├── LaikeXxxxApplication.java #模块启动类
│ │ │ ├── common #模块内通用文件夹
│ │ │ │ ├── consts #模块内常量文件夹
│ │ │ │ └── uitls #模块帮助类文件夹
│ │ │ ├── controller #控制层代码
│ │ │ └── service #服务层代码
│ │ └── resources
│ │ ├── application.yml #模块配置文件
│ │ ├── logback-spring.xml #日志配置文件
│ │ ├── static #静态资源
│ │ └── templates #静态模版
│ └── test #测试代码
└── target #模块编译后文件存放文件夹