SpringBoot运维

news2024/11/15 17:15:24

能够掌握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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/808126.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从0到1开发go-tcp框架【1-搭建server、封装连接与业务绑定、实现基础Router、抽取全局配置文件】

从0到1开发go-tcp框架【1-搭建server、封装连接与业务绑定、实现基础Router】 本期主要完成对Server的搭建、封装连接与业务绑定、实现基础Router&#xff08;处理业务的部分&#xff09;、抽取框架的全局配置文件 从配置文件中读取数据&#xff08;服务器监听端口、监听IP等&a…

《TCP IP网络编程》第十二章

第 12 章 I/O 复用 12.1 基于 I/O 复用的服务器端 多进程服务端的缺点和解决方法&#xff1a; 为了构建并发服务器&#xff0c;只要有客户端连接请求就会创建新进程。这的确是实际操作中采用的一种方案&#xff0c;但并非十全十美&#xff0c;因为创建进程要付出很大的代价。…

CK_03靶机详解

CK_03靶机详解 靶场下载地址&#xff1a;https://download.vulnhub.com/ck/MyFileServer_3.zip 这个靶机开放的端口特别多&#xff0c;所以给我们的误导也很多&#xff0c;我直接按照正确的思路来。 因为开着445所以就枚举了一下靶机上共享的东西&#xff0c;发现两个share的…

MTK联发科安卓核心板MT8385(Genio 500)规格参数资料_性能介绍

简介 MT8385安卓核心板 是一个高度集成且功能强大的物联网平台&#xff0c;具有以下主要特性&#xff1a; l 四核 Arm Cortex-A73 处理器 l 四核Arm Cortex-A53处理器 l Arm Mali™-G72 MP3 3D 图形加速器 (GPU)&#xff0c;带有 Vulkan 1.0、OpenGL ES 3.2 和 OpenCL™ 2.x …

【SpringCloud Alibaba】(六)使用 Sentinel 实现服务限流与容错

今天&#xff0c;我们就使用 Sentinel 实现接口的限流&#xff0c;并使用 Feign 整合 Sentinel 实现服务容错的功能&#xff0c;让我们体验下微服务使用了服务容错功能的效果。 因为内容仅仅围绕着 SpringCloud Alibaba技术栈展开&#xff0c;所以&#xff0c;这里我们使用的服…

.sql文件导入MySQL

命令行导入 source E:\data.sql图形化界面导入 选择.sql文件路径开始。 推荐使用命令行导入&#xff01;&#xff01;&#xff01;

matplotlib——3. 绘制分布(scatter+hist)

文章目录 1. matplotlib实现1.1 效果1.2 代码 2. seaborn实现2.1 效果2.2 代码 左图是matplotlib的结果&#xff0c;右图是seaborn的结果 1. matplotlib实现 1.1 效果 效果&#xff1a;&#xff08;二维正态分布的散点图每个轴的直方图&#xff09; 1.2 代码 import nump…

关于Anaconda环境配置的一些问题

文章目录 一、关于package文件安装位置二、关于尝试下载Python包时出现的CondaSSLError三、配置环境的整个流程四、如何在Jupyter中打开任意位置的文件夹五、如何在Jupyter对应的环境中安装包 一、关于package文件安装位置 package 文件安装在envs目录底下的Lib中&#xff0c;可…

Llama2跟进:GPU硬件要求、微调注意事项等【202307】

在过去几天里关注Llama 2 的所有新闻已经超出了全职工作的范围。 信息网络确实充满了拍摄、实验和更新。 至少还要再过一周&#xff0c;但已经有一些关键点了。 推荐&#xff1a;用 NSDT设计器 快速搭建可编程3D场景。 在这篇文章中&#xff0c;我将澄清我对原始帖子中有关 Lla…

MySQL 相关知识

MySQL 相关知识 1、三大范式2、DML 语句和 DDL 语句区别3、主键和外键的区别4、drop、delete、truncate 区别5、基础架构6、MyISAM 和 InnoDB 有什么区别&#xff1f;7、推荐自增id作为主键问题8、为什么 MySQL 的自增主键不连续9、redo log 是做什么的?10、redo log 的刷盘时…

WIZnet W5500-EVB-Pico 静态IP配置教程(二)

W5500是一款高性价比的 以太网芯片&#xff0c;其全球独一无二的全硬件TCP、IP协议栈专利技术&#xff0c;解决了嵌入式以太网的接入问题&#xff0c;简单易用&#xff0c;安全稳定&#xff0c;是物联网设备的首选解决方案。WIZnet提供完善的配套资料以及实时周到的技术支持服务…

Windows Server 2012 能使用的playwright版本

由于在harkua_bot里面使用到了playwright&#xff0c;我的服务器又是Windows Server 2012 R2&#xff0c;最新版playwright不支持Windows Server 2012 R2&#xff0c;支持Windows Server 2016以上&#xff0c;所以有了这个需求 https://cdn.npmmirror.com/binaries/playwright…

手写线程池 - C++版 - 笔记总结

1.线程池原理 创建一个线程&#xff0c;实现很方便。 缺点&#xff1a;若并发的线程数量很多&#xff0c;并且每个线程都是执行一个时间较短的任务就结束了。 由于频繁的创建线程和销毁线程需要时间&#xff0c;这样的频繁创建线程会大大降低 系统的效率。 2.思考 …

【Python从入门到进阶】30、JSONPath的介绍和使用

接上篇《29、xpath抓取站长素材图片》 上一篇我们讲解了如何利用xpath来抓取站长素材网站的图片区首页的所有图片&#xff0c;本篇我们来介绍JSONPath的基础和具体使用。 一、JSONPath的基本概念 1、什么是JSONPath&#xff1f; JSONPath是一种用于在JSON&#xff08;JavaSc…

致敬图灵!HashData拥抱数据智能新时代!

图1&#xff1a;2023ACM中国图灵大会现场 生于1912年的艾伦图灵被称为“计算机科学之父”、“人工智能之父”。1966年&#xff0c;国际计算机协会&#xff08;ACM&#xff09;为了纪念这位卓越的科学家&#xff0c;设立了以其名字命名的ACM图灵奖&#xff0c;以表彰在计算机领…

RH850 1372/1374 程序跑飞异常分析

文章目录 前言现象描述原因分析解决方案总结 前言 最近项目用瑞萨RH850系列的1372/1374开发&#xff0c;官方的MCAL做的不咋地就算了&#xff0c;FAE支持也很少。给的demo问题也很多。本文记录一下开发过程中的问题。 现象描述 MCAL配置完ADC1后&#xff0c;运行ADC1的采样程…

SQL注入原理分析

前言 order by的作用及含义 order by 用于判断显示位&#xff0c;order by 原有的作用是对字段进行一个排序&#xff0c;在sql注入中用order by 来判断排序&#xff0c;order by 1就是对一个字段进行排序&#xff0c;如果一共四个字段&#xff0c;你order by 5 数据库不知道怎么…

51:电机(ULN2003D)

1:介绍 我们51单片机使用的是直流电机 直流电机是一种将电能转换为机械能的装置。一般的直流电机有两个电极&#xff0c;当电极正接时&#xff0c;电机正转&#xff0c;当电极反接时&#xff0c;电机反转 直流电机主要由永磁体&#xff08;定子&#xff09;、线圈&#xff08;转…

【Java|基础篇】File类和IO流

文章目录 1.File类2.流的概念3.InputStream4.OutputStream5.Reader6.Writer7.使用Scanner读文件8.使用PrintWriter写文件9.close()方法10.flush()方法10.总结 1.File类 File类是Java中用于表示文件或目录的类。它提供了一些方法来操作文件和目录的属性和内容&#xff0c;可以进…

对js中的window深入理解

window和 document的区别 window对象是浏览器中的全局对象&#xff0c;代表的是整个浏览器窗口&#xff1b;document只是window对象中的一部分&#xff0c;表示当前窗口或框架中加载的HTML文档&#xff0c;主要用于访问和操作文档的内容&#xff0c;包括DOM元素、样式、事件等&…