2021.4.25
考试系统的后台项目使用的是git,其中包含多个子系统;由于每个子系统提交的配置文件不统一,导致本地启动时费了半天时间。
简要记录如下:
一、考试系统后台启动流程
1.首先要按顺序install某些项目,在 target/generated-sources/ 下生成一些.java文件,才能启动项目。
2.然后要修改git上的配置文件,将[项目名-test.properties]中的dubbo的url改为本地,意思是使用本地dubbo生产者提供的服务,如[server1.dubbo.url=dubbo://localhost:20880]
3.考试系统分为6个模块;第一个要启动config-server模块,这个模块是用来从git上获取配置文件信息、然后提供给其它模块用的。(springcloudconfig)
启动时,需要修改application.properties,填写正确的git的url、用户名、密码(密码是gitlab中user settings->Access Tokens设置生成的),还要填写访问本模块需要的账号与密码(为了安全)。
如下:
spring.cloud.config.server.git.uri=http://gitlab.xxx.com/abc_user/mytest.git
spring.cloud.config.server.git.username=xxx
spring.cloud.config.server.git.password=alkdsjfDF@;aldskfj
spring.security.user.name=u1
spring.security.user.password=u1
4.第二个要启动portal模块,这个模块是用来提供基本信息的,与其他模块通过dubbo交互,属于生产者;该模块收到请求后,先找redis,如果有,则返回;如果没有,则找mysql数据库,把结果放入redis,并返回结果。
启动时,需要修改application.properties中的信息,要使用本地的配置中心config的url以及账号密码,才能获取到配置信息;要配置好端口port、服务名name以及context-path,要与nginx中的对应;要配置profile为test,表示使用[项目名-test.properties]的配置文件。
如下:
#与nginx对应
server.port=8880
server.servlet.context-path=/portal
#与本地的server-config对应
spring.cloud.config.uri=http://localhost:8888
spring.cloud.config.username=u1
spring.cloud.config.password=u1
spring.cloud.config.failFast=true
#表示使用的配置文件是master分支的
spring.cloud.config.label=master
#表示使用的配置文件是[portal-test.properties]之类的
spring.application.name=portal
spring.cloud.config.profile=test
5.第三个要启动tag模块,这个模块是用来管理考试题标签的。配置信息与第4步类似。
6. 剩下的3个模块不区分启动顺序,分别为:
exam-manage-pc:考试管理PC端,用来管理试题、试卷、考试。
exam-manage-mobile:考试管理移动端,功能与PC端相同。
exam:考试入口,供学员参加考试、获取试卷、提交答案、查看得分。
二、考试系统前端启动流程及nginx设置
1.先将前端项目编译好,然后将编译后的文件放到指定目录下(与nginx中的对应)
2.配置好nginx,注意事项如下:
(1)确认nginx.conf文件中是否包含了其它的配置文件,如果包含,需要放到指定位置,例如:
include D://dev//nginx-1.18.0//conf.d//*.conf;
include D://dev//nginx-1.18.0//conf//upstream.conf;
(2)由于包含了upstream.conf,所以要查看其中的配置信息,使得与后台项目启动的端口一致,例如:
upstream portal_cluster{
server localhost:8880;
}
这个名称是自己起的,在其它的nginx配置文件中有其对应。例如:
location ~ /basic-api(.*) {
set $name portal_cluster;
proxy_set_header Host $http_host;
proxy_pass http://$name/portal$1$is_args$args;
}
其中,
~是区分大小写匹配;
$name对应portal_cluster对应localhost:8880;
$1对应正则表达式匹配的第一个内容(.*);
$is_args的含义是,如果请求有参数,为?;如果请求没有参数,为空字符串;
$args的含义是请求中的参数。
因此,如果有请求:http://www.test.com/basic-api/a/b/c?key=value
会被转发到:http://localhost:8880/portal/a/b/c?key=value
3.启动nginx.exe,就可以访问前端页面了。
4.由于项目后台有验证签名操作(sign字段,内容根据当前ip与其他参数进行加密后得到),因此需要用工具类生成携带签名参数的url,才能正常访问前端页面与后台系统。
三、备注
1.遇到了项目不打印控制台日志的问题,需要修改1个文件:
logback-boot.xml
增加以下代码:
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
<conversionRule conversionWord="wex" converterClass="org.springframework.boot.logback.WhitespaceThrowableProxyConverter" />
<conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
<!-- 彩色日志格式 -->
<property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}" />
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>info</level>
</filter>
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
</encoder>
</appender>
<springProfile name="test,dev">
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="INFO_WARN_FILE" />
<appender-ref ref="ERROR_FILE" />
</root>
</springProfile>