SpringCloud基础权限框架搭建(3):服务部署记录

文章目录

  • 1.定制化工程日志公共配置
  • 2.jar包生成
  • 3.让服务在Eureka 使用外网IP和端口号进行注册
  • 4.服务运行

1.定制化工程日志公共配置

原先的日志配置方案在使用jar包运行时会导致所有服务的日志指向一个文件,这里我添加了工程个性化配置

修改公共日志配置

logback和logback-spring.xml都可以用于配置logback,但是2者的加载顺序是不同的:
logback.xml>application.properties>logback-spring.xml.

删除cloud1.0-common工程内的logback.xml
添加logback-spring.xml
SpringCloud基础权限框架搭建(3):服务部署记录_第1张图片
logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?>  
<!-- https://logback.qos.ch/manual/appenders.html 官网 -->
<!-- 这个是根配置文件,一定要有的
scan:是当配置文件被修改后会被重新加载
scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false-->
<configuration scan="true">
    <contextName>cloud1.0</contextName>
	<!--application.properities中配置的变量-->
	<springProperty scope="context" name="logLevel" source="log.level"/>
	<springProperty scope="context" name="logPath" source="log.path"/>
	<springProperty scope="context" name="logName" source="log.name"/>
	<springProperty scope="context" name="logDays" source="log.days"/>
	
    <!-- 输出到控制台 -->
    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
		<!-- 默认情况下,每个日志事件都会立即刷新到基础输出流。 这种默认方法更安全,因为如果应用程序在没有正确关闭appender的情况下退出,则日志事件不会丢失。
		但是,为了显着增加日志记录吞吐量,您可能希望将immediateFlush属性设置为false -->
        <encoder>
        	<!-- %-5level:级别从左显示5个字符宽度 -->
            <!-- %msg:日志打印详情 -->
            <!-- %n:换行符 -->
            <pattern>[%date{yyyy-MM-dd HH:mm:ss.SSS}] %X{logthreadId} %-5level %logger{80} %method %line - %msg%n</pattern>
            <!-- 控制台也要使用UTF-8,不要使用GBK,否则会中文乱码 -->
            <charset>UTF-8</charset>
        </encoder>
    </appender>
 
	<!-- 输出到文件 
	encoding:日志的编码
	file:指定当前生成的日志文件名称
	rollingPolicy:滚动策略
	FileNamePattern:移动文件最后的名称,跟file标签结合使用,ps:file里面的内容是  1.txt,那么,FileNamePattern里面写的是2.txt,那么最后文件名就为2.txt,如果最后结尾是gz或者zip,那么,就会自动打成压缩包-->
    <appender name="fileLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
   	    <file>${logPath}${file.separator}${logName}.log</file>
        <append>true</append>
        <encoder>
            <pattern>
                [%date{yyyy-MM-dd HH:mm:ss.SSS}] %X{logthreadId} %-5level %logger{80} %method  %line - %msg%n
            </pattern>
            <!-- 记录日志的编码:此处设置字符集 - -->
            <charset>UTF-8</charset>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${logPath}${file.separator}%d{yyyy-MM-dd}${file.separator}%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
			<!-- 每产生一个日志文件,该日志文件的保存期限为30, ps:maxHistory的单位是根据fileNamePattern中的翻转策略自动推算出来的,例如上面选用了yyyy-MM-dd,则单位为天
			如果上面选用了yyyy-MM,则单位为月,fileNamePattern单位默认为yyyy-MM-dd-->
            <maxHistory>${logDays}</maxHistory>
            <!-- maxFileSize:这是活动文件的大小,默认值是10MB,测试时可改成5KB看效果 -->
            <maxFileSize>10MB</maxFileSize>
            <!-- 每个日志文件到10mb的时候开始切分,最多保留30天,但最大到20GB,哪怕没到30天也要删除多余的日志 -->
            <totalSizeCap>20GB</totalSizeCap>
        </rollingPolicy>
    </appender>
 
	<!-- logger:日志单位
	name:是你当前扫描的哪个包
	level:日志的级别
	additivity:默认为true,标识向上级传递日志(这里即向root传递日志)。
	appender-ref:appender的引用
	-->
    <logger name="com.apexsoft.timer" level="${logLevel}">
        <appender-ref ref="fileLog" />
        <appender-ref ref="stdout"  />
    </logger>

	<!-- 
	默认根节点是INFO级别的日志 (如果直接使用root不使用logger,在输出debug级别时会输出大量与业务无关日志)
	root:logger的根节点,就这一个,默认名称就是root
	level:日志级别
	appender-ref:确定使用哪个appender
	 -->
    <root level="INFO">
        <appender-ref ref="fileLog" />
        <appender-ref ref="stdout"  />
    </root>
</configuration>

在依赖cloud1.0-common工程的服务的bootstrap.yml文件添加日志配置
这里以cloud1.0-zuul-server工程为例

log:
  #日志保存路径
  path: /root/2019dev/cloud1.0/logs
  #日志输出级别
  level: debug
  #日志名称
  name: sc-zuul-server
  #日志保存天数
  days: 30

2.jar包生成

这里我选择将服务打成jar包部署到CentOS服务器
排除测试代码

由于cloud1.0-user-servercloud1.0-data-service工程依赖外部服务,如果不排除测试代码将提示[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.21.0异常

父工程pom.xml添加配置

<!-- 跳过单元测试,但是会继续编译 -->
<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-surefire-plugin</artifactId>
	<configuration>
		<skipTests>true</skipTests>
	</configuration>
</plugin>

移除公共工程的maven插件

公共工程中除了必要的依赖包以外,maven打包的插件不要再添加一遍了,因为这个SpringBoot插件会在Maven的package后进行二次打包,目的为了生成可执行jar包,如果定义了这个插件,会报错提示没有找到main函数
[ERROR] Failed to execute goal
org.springframework.boot:spring-boot-maven-plugin:2.0.3.RELEASE:repackage
(default) on project cloud1.0-common: Execution default of goal
org.springframework.boot:spring-boot-maven-plugin:2.0.3.RELEASE:repackage
failed: Unable to find main class -> [Help 1]

注释掉cloud1.0-common工程和父工程pom.xml内的maven插件

<!--     <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build> -->

打包

cd 父工程根目录(和pom.xml同级)
## 排除测试代码后进行打包
mvn clean package  -Dmaven.test.skip=true

由于我环境变量配置的setting与ide内配置的setting不同,我在这里直接使用eclipse内置指令进行打包
右击父工程,选择Run As - Maven clean
右击父工程,选择Run As - Maven install
打包完成后 jar 包会生成到 target 目录下,命名一般是 项目名+版本号.jar

3.让服务在Eureka 使用外网IP和端口号进行注册

这里举个例子,当cloud1.0-config-server与cloud1.0-eureka-server部署于同一个服务器时eureka默认将会把config-server注册为内网IP,此时在外网中通过eureka的默认路由将无法获取到cloud1.0-config-server服务的相关数据

解决方案如下
cloud1.0-config-server
application.yml配置公网

eureka:
  instance:
    prefer-ip-address: true
    ip-address: xxx.xxx.xxx.xxx
    non-secure-port: xxxx

4.服务运行

上传jar包再创建好各个服务的默认输入日志文件,最后执行如下执行(目录与日志文件需根据个人定制,由于服务众多使用Docker能减少很多重复操作,后续跟进)

nohup java -jar /root/2019dev/cloud1.0/cloud1.0-eureka-server-0.0.1-SNAPSHOT.jar > /root/2019dev/cloud1.0/logs/cloud1.0-eureka-server.log 2>&1 & 
nohup java -jar /root/2019dev/cloud1.0/cloud1.0-auth-server-0.0.1-SNAPSHOT.jar > /root/2019dev/cloud1.0/logs/cloud1.0-auth-server.log 2>&1 &
nohup java -jar /root/2019dev/cloud1.0/cloud1.0-zuul-server-0.0.1-SNAPSHOT.jar > /root/2019dev/cloud1.0/logs/cloud1.0-zuul-server.log  2>&1 &
nohup java -jar /root/2019dev/cloud1.0/cloud1.0-config-server-0.0.1-SNAPSHOT.jar > /root/2019dev/cloud1.0/logs/cloud1.0-config-server.log 2>&1 &
nohup java -jar /root/2019dev/cloud1.0/cloud1.0-user-server-0.0.1-SNAPSHOT.jar > /root/2019dev/cloud1.0/logs/cloud1.0-user-server.log 2>&1 &
nohup java -jar /root/2019dev/cloud1.0/cloud1.0-data-service-0.0.1-SNAPSHOT.jar > /root/2019dev/cloud1.0/logs/cloud1.0-data-service.log 2>&1 &
nohup java -jar /root/2019dev/cloud1.0/cloud1.0-hystrix-dashboard-0.0.1-SNAPSHOT.jar > /root/2019dev/cloud1.0/logs/cloud1.0-hystrix-dashboard.log 2>&1 &

你可能感兴趣的:(SpringCloud)