SpringBoot运维

能够掌握SpringBoot程序多环境开发

能够基于Linux系统发布SpringBoot工程

能够解决线上灵活配置SpringBoot工程的需求

Windows打包运行

你的电脑不可能一直开着机联网作为服务器:

我们将我们项目打包放到外部的服务器上,这样其他用户才能正常访问:

打包:

使用maven工具,maven clean后maven package。target下就有一个本项目名.jar的包

windows环境运行springboot的jar包:

本项目名.jar根目录文件夹上敲cmd,java -jar 项目名.jar

我们只需要敲上java -jar sp(jar包的首字母),然后tab键,windows系统会自动补全

由于打包前默认测试

可在右侧maven,本项目中lifeCycle,点一下test,点菜单上面的闪电,将其删除禁用掉即可。

注意事项 

jar支持命令行启动需要依赖maven插件支持,请确认打包时是否具有SpringBoot对应的maven插件。

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

有插件的打包后有发现META-INFO有MANIFEST.MF打开有Start-Class和Main-Class来加载引导类。

有插件的打包后有发现BOOT-INF里有lib依赖包,里面各种jar包。

org这个文件夹就是使得这个springboot项目能够独立运行的工具文件夹。里面有boot的类加载器。boot想要独立运行,需要class中项目文件和lib包,及org工具文件夹。

Linux打包运行

我们使用VM打开CentOS7的虚拟机

可用FinalShell或SecureCRT 8.5界面好一些。

finalshell可用SSH连接虚拟机的linux系统。

linux按安装jdk8centos7 安装jdk详细教程_centos7安装jdk_奇漠的博客-CSDN博客

usr下创建app目录  cd/usr      mkdir app   cd app   

通常我们的项目的东西一般放到这个文件夹或~的文件夹下

将jar上传到这。

然后java -jar 项目名.jar即可运行,但是没连数据库,yml的url写的localhost

我们首先在linux中安装数据库,使用yam或rpm安装相同版本的mysql数据库:

Centos7在线安装MySQL5(教学版)_centos7安装mysql5_-starshine丨的博客-CSDN博客

安装完后,使用windows的navicat连一下,然后建表建数据,重新运行即可。

临时属性设置

java -jar springboot.jar --server.port=80

或idea中编辑启动中configuaration中环境中Program arguments: --server.port=80

生效原因:引导类main方法有args[]参数传递给引导类run的入参,其实为安全可删除入参args

ConfigurableApplicationContext ctx = SpringApplication.run(SpringbootBeginQuickstartApplication.class, args);

甚至可在引导类main方法中用arg[0]="--server.port=80"

设置开发环境临时属性

问题:开发时,我们使用我们的一些配置。在将来上线时,产品经理的一些设置,可能跟我们不一样。

0,普通yml(4级) 

1 resource的config目录的yml优先级高于普通yml(3级)

springboot给我们提供了一套机制,可以在现有的配置的基础上在写一套application.yml配置来覆盖:

就在resource文件夹下,创建一个config目录,将新的配置文件放进去,就能覆盖原有的配置。

且这两个配置文件还有合作的关系,互补配置,冲突的部分config中的进行覆盖。

2, jar包和application.yml同级的yml优先级更高一些(2级)

再一个问题是:我们的数据库连接的密码时明文的:将来肯定不可能使用明文:

我们将开发的yml复制一份到打完jar包的项目的同级目录中:

也就是jar包和application.yml同级,然后在这个根目录进行java -jar运行,优先用平级的application.yml文件。这个这个同级的yml配置文件给运维人员使用。

3.jar包同级的config文件夹中的yml优先级更高(1级)

对于运维组的大boss,比如银行副行长级别的配置,还有一个:在该同级目录下,创建一个config目录,里面加上application.yml。对于加密,有些目录直接加了密,没有打开访问的权限

1级与2级留做系统打包后设置通用属性,1级常用于运维经理进行线上整体项目部署方案调控。3级与4级用于系统开发阶段设置通用属性,3级常用于项目经理进行整体项目属性调控。

项目类路径配置文件:服务于开发人员本机开发与测试
项目类路径config目录中配置文件:服务于项目经理整体调控

工程路径配置文件:服务于运维人员配置涉密线上环境
工程路径config目录中配置文件:服务于运维经理整体调控

还可在Idea的启动参数,编辑启动中configuaration中环境中Program arguments: --server.port=80

配置--spring.config.name=ebank 这种方式有魅力和properties都支持可不写后缀。

或--spring.config.location=classpath:ebank.yml,也可

--spring.config.location=classpath:ebank.yml,--spring.config.location=classpath:ebank2.yml

谁在最后谁生效。

多环境开发

开发、测试 、生产

1、开发环境:开发环境时程序猿们专门用于开发的服务器,配置可以比较随意,为了开发调试方便,一般打开全部错误报告和测试工具,是最基础的环境。
2、测试环境:一般是克隆一份生产环境的配置,一个程序在测试环境工作不正常,那么肯定不能把它发布到生产服务器上,是开发环境到生产环境的过度环境。
3、生产环境:生产环境是指正式提供对外服务的,一般会关掉错误报告,打开错误日志,是最重要的环境。部署分支一般为master分支。

resource下的application.yml将这个配置文件进行copy,复制3份到resource目录下,

一定要以application-(环境名)命名,dev\pro\test。删除配置中其他东西,只留一些配置相关的:

在这个主yml文件中进行指定使用的yml配置文件
spring:
  profiles:
    active: dev

同理properties也类似,用spring.profiles.active=dev指定

多环境的分组管理

根据功能对配置文件中的信息进行拆分,并制作成独立的配置文件,命名规则如下
application-devDB.yml

application-devRedis.yml

application-devMVC.yml

想要使用的时候,直接include就ok了
spring:
  profiles:
    active: dev
    include: devDB,devRedis,devMVC

springboot2.4版本后就提供了环境组group

spring:
  profiles:
    active: dev
    group:
      "dev": devDB,devMVC
      "pro": proDB,proMVC

加载active为dev还是会加载dev的grop中的配置文件,还是后面的会覆盖前面的配置

如果maven中设置的为生产环境,springboot中设置的为开发环境

springboot是基于maven运行的。所以maven是主,springboot为辅。

pom中设置多环境

默认开启dev的环境:开哪个环境,profile.active的参数值就为哪个

pom文件依赖下方加入:

	<profiles>
		<profile>
			<id>env_dev</id>
			<properties>
				<profile.active>dev</profile.active>
			</properties>
			<activation>
				<activeByDefault>true</activeByDefault><!--开启哪个环境,哪个环境生效-->
			</activation>
		</profile>
		<profile>
			<id>env_pro</id>
			<properties>
				<profile.active>pro</profile.active>
			</properties>
		</profile>
	</profiles>

yml中加入

spring:
  profiles:
    active: @profile.active@
    group:
      "dev": devDB,devMVC
      "pro": proDB,proMVC
这样的话,springboot就会随着maven的环境的变化而加载不同的springboot的环境配置了。使用maven控制boot环境后,现在maven和boot的环境就统一了。

日志

编程期调试代码

运营期记录信息
记录日常运营重要信息(峰值流量、平均响应时长……)

记录应用报错信息(错误堆栈)
记录运维过程数据(扩容、宕机、报警……)

代码中使用日志工具记录日志

import org.slf4j.Logger;下的

@RestController//restful风格的controller
@RequestMapping("/books")
public class BookController {
    private static final Logger log  = LoggerFactory.getLogger(BookController.class);
    @Autowired
    private BookService bookService;
    @GetMapping
    public R getAll()  {
        log.debug("debug....");
        log.info("info....");
        log.warn("warn....");
        log.error("error....");
        return new R(true,bookService.list());
    }
)

 结果全在日志中不同颜色展示出来提示日志,且后面跟着参数里面的内容

默认使用的info级别及以上的级别

日志等级:debug>info>warn>error:设置为哪一等级,只会打印该等级及以下等级的日志。

debug级别需要自己手动打开:yml中设置:
#debug: true
logging:
  level:
    root: debug
若不想看系统及的debug,只看某个包下的debug,可以这样:
logging:
  level:
    root: info
    com.kdy.controller: debug #设置某个包的日志级别
logging:
  group:
    ebank: com.kdy.controller,com.kdy.service,com.kdy.mapper
    other: com.alibaba
  level:
    root: info
    ebank: debug  #对日志分组中的组设置日志级别
    com.kdy.controller: debug #设置某个包的日志级别

抽取log对象

private static final Logger log  = LoggerFactory.getLogger(BookController.class);反复写

找个地方写个父类

public class BaseClass {//让其它类来继承该类
    private Class clazz;
    public static Logger log;
    public BaseClass(){
        clazz = this.getClass();//这里的this是调用该构造方法的对象,也就是子对象,因为子类继承父类创建对象并不会创建父类对象,而是super代指父类对象,this是子类对象
        log= LoggerFactory.getLogger(clazz);
    }
}
@RestController//restful风格的controller
@RequestMapping("/books")
public class BookController extends BaseClass {
    @Autowired
    private BookService bookService;
    @GetMapping
    public R getAll()  {
        log.debug("debug....");
        log.info("info....");
        log.warn("warn....");
        log.error("error....");
        return new R(true,bookService.list());
    }
}

使用Lombok并注入Slf4j也可使用log

@Slf4j
@RestController//restful风格的controller
@RequestMapping("/books")
public class BookController {
    @Autowired
    private BookService bookService;
    @GetMapping
    public R getAll()  {
        log.debug("debug....");
        log.info("info....");
        log.warn("warn....");
        log.error("error....");
        return new R(true,bookService.list());
    }
}

日志输出格式控制 

详见sringboot15

文件的形式记录日志

logging:
  file:
    name: server.log

项目根路径下。

设置定时生成一份日志文件,且设置日志文件的最大大小

logging:
  file:
    name: server.log
  logback:
    rollingpolicy:
      max-file-size: 4KB
      file-name-pattern: server.%d{yyyy-MM-dd}.%i.log

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值