程序为什么要打包
编辑
程序打包与运行(Windows版)
-
对SpringBoot项目打包(执行Maven构建指令package)。
打包好后,会在target中看到打包好的jar包。右击点击open in — > Explorer打开jar包路径,在地址路径输入cmd进行执行启动指令。
-
运行项目(执行启动指令)。
java –jar jar包名称
-
注意:jar支持命令行启动需要依赖maven插件,确认打包是有SpringBoot对应的maven插件。
org.springframework.bootspring-boot-maven-plugin
-
总结:
SpringBoot工程可以基于java环境下独立运行jar文件启动服务。
SpringBoot项目快速启动(Linux版)
项目上传到linux系统运行
1.上传项目的jar包到linux系统中(usr的local目录下创建一个项目)。
2. 执行jar命令:java –jar 工程名.jar,
后台启动:nohup java -jar 项目jar包 > server.log 2>&1 &
3. 服务器断开:①查询对应的pid 命令:ps ef|grep ‘java -jar’
②结束进程 命令:kill -9 pid
前提条件
1. 基于Linux(CenterOS7)。
2. 安装JDK,且版本不低于打包时使用的JDK版本。
3. 安装mysql数据库。
在linux系统安装jdk
-
在usr下的local目录, 创建一个目录jdk,下载linux版本jdk,把jdk拖进去。
-
安装java环境。
①检测当前系统是否存在java环境 命令:java -version,
如果有的话就需要卸载,检测jdk版本 命令:rpm -qa|grep jdk,
卸载 命令: rpm -e –nodeps 版本。
②安装jdk 命令:rpm -ivk rpm包。
-
配置环境变量。
①所有的环境配置都在cd / etc/profile。
③命令:vim /etc/profile进入这个文件后面进行编辑环境配置,跟windows大致。
JAVA_HOME=/usr/java/jdk…名称
:CLASSPATH=%JAVA_HOME%/lib
PATH=$JAVA_HOME/bin
export PATH CLASSPATH JAVA_HOME
④让配置文件生效 命令:source /etc/profile
-
开启防火墙端口。
①查看防火墙 命令:firewall-cmd –list-ports
②开启某个防火墙端口 命令:firewall-cmd –zone=public –add-port=80/tcp –permanent
③重启防火墙 命令:systemctl restart firewalld.serive
安装mysql数据库(rpm方式)
-
在usr下的local目录, 创建一个目录mysql,下载linux版本mysql,把mysql拖进虚拟机去。
-
解压mysql 命令:tar -xvf mysql….版本。
-
检查CenterOS7里面可能有mariadb库,需要卸载,因为跟mysql有冲突。
①查询mariadb 命令:rpm -qa|grep mariadb
②卸载 命令:rpm -e –nodeps mariadb-libs
-
依次安装所需要的mysql的rpm。
①rpm -ivh mysql-community-common……
②rpm -ivh mysql-community-client-plugins-……
③rpm -ivh mysql-community-libs-…..
④rpm -ivh mysql-community-client-………
⑤rpm -ivh mysql-community-icu-data-files-…..
⑥rpm -ivh mysql-community-server-…….
注意:包与包有依赖关系,按照顺序安装。
-
初始化 命令:mysqld –initalize –console。
-
修改安装目录的所有者,以便有权限使用。
①命令:chown -R mysql:mysql /var/lib/mysql/
②启动服务,systemctl start mysqld
③初始化的时候,程序自动设置临时密码,查询密码 命令:cat /var/log/mysqld.log|grep localhost
-
使用临时密码登录mysql账号进行修改密码。
①登录mysql 命令:mysql -uroot -p
②修改密码 命令:alter user ‘root’@’localhost’ identifiend by ‘123456’;
③exit退出
-
开放mysql端口3306。
firewall-cmd –zone=public –add-port=3306/tcp –permanent
windows的Navicat连接linux的mysql可能会出现的一些错误
-
原因:
考虑是不是连接数据库的这个用户权限不足导致,因为在新建一个
MySQL连接时,会有一个默认的mysql数据库,此数据库中有一个
user用户表,此表就是用来设置所有用户的权限。
于是查询了user表中的user字段和host字段,发现想要进行数据库连接的root用户的host字段只有localhost地址,也就是只允许root用户从localhost或者127.0.0.1地址连接数据库,此时就需要将root用户的host字段改为’%’,因为如果使用通配符%作为主机,则允许指定用户从任意主机连接。
-
错误解决
①重启防火墙,firewall-cmd –reload
②登录mysql
③进入mysql数据库,查看mysql数据库的user表,
此时看到root用户的host字段是localhost也就是只允许本机地址连接数据库。
④修改root用户的host字段 命令:update user set host=’%’ where user=’root’;
如果使用通配符%作为主机,则允许指定用户从任意主机连接。
⑤
刷新特权命令:flush privileges;
临时属性
带属性数启动SpringBoot
-
临时修改项目的端口号
java -jar 项目jar包 –server.port=临时端口号
注意:后面添加临时属性,来覆盖原来的属性。
-
临时修改项目连接数据库的密码
java -jar 项目jar包 –server.port=临时端口号 –spring.datasource.druid.password=123
注意:携带多个属性启动SpringBoot,属性间使用空格分隔。
-
问题:发现加了指令参数不生效,应该在idea下帮助运维人员把命令测通,
这样才能交给运维使用,问题是在idea怎么测试临时属性是否生效呢?
-
总结:
1. 临时属性添加方式:java –jar 工程名.jar –-属性名=值
2. 多个临时属性之间使用空格分隔。
3. 临时属性必须是当前boot工程支持的属性,否则设置无效。
在idea中解决属性添加
方式一:在idea配置
-
点击修改配置
2 . 看到配置属性的位置,Program arguments程序参数,在里面配置自己需求。
Program arguments和args的关系
在Program arguments填属性–server.port=8081 –a=b,会进入到args命令里面,
那么现在这个属性值通过这个参数传递到这里面。
方式二:通过编程形式带参数启动SpringBoot程序,为程序添加运行参数
@SpringBootApplication
public class SpringbootCrudApplication {
public static void main(String[] args) {
// //可以自己编写参数
// String [] arg=new String[1];
// arg[0]="--server.port=8082";
// SpringApplication.run(SpringbootCrudApplication.class, arg);
//也可以在启动boot程序断开读取外部临时配置对应的入口,也就是去掉读取外部参数的形参。
SpringApplication.run(SpringbootCrudApplication.class);
}
}
配置文件
级别分类
-
springboot提供了一种机制,在现有的配置之上在做一套配置,
这套配置可以覆盖当前的配置,这样就不用在命令行上输入那么多临时属性。
-
SpringBoot中4级配置文件
1级: file :config/application.yml
【最高】
2级: file :application.yml
3级:classpath:config/application.yml
4级:classpath:application.yml
【最低】
-
作用:
① 1和2级留做系统打包后在同一个目录下设置通用属性,
1级常用于运维经理进行线上整体项目部署方案调控。
② 3级与4级用于系统开发阶段设置通用属性,3级常用于项目经理进行整体项目属性调控。
-
总结
1. 配置文件分为4种:
① 项目类路径配置文件:服务于开发人员本机开发与测试。
② 项目类路径config目录中配置文件:服务于项目经理整体调控
③ 工程路径配置文件:服务于运维人员配置涉密线上环境
④ 工程路径config目录中配置文件:服务于运维经理整体调控
2. 多层级配置文件间的属性采用叠加并覆盖的形式作用于程序。
自定义配置文件
-
例定义一个yml文件,就要通过启动参数加载配置文件(无需书写配置文件扩展名)
-
注意:
1. 单服务器项目:使用自定义配置文件需求较低。
2. 基于SpringCloud技术,所有的服务器将不再设置配置文件,
而是通过配置中心进行设定,动态加载配置信息。
-
总结
1. 配置文件可以修改名称或者路径,通过启动参数设定。
2. 微服务开发中配置文件通过配置中心进行设置。
多环境开发
-
什么是多环境?
开发项目的时候,在自己机器上的开发环境,而到了测试那边,环境却不一样,不是自己本机的了,
每一种不同环境对应配置是不同的。
所以所谓的环境根据不同环境配置不同的值。
多环境开发统一一个文件
# 应用环境
#公共配置都写在这里,例如
spring:
profiles:
active: pro #使用pro这个环境
--- #区分多个环境 ---
# 设置环境
#生产环境配置
server:
port: 80
spring:
profiles:pro
---
#开发环境
server:
port: 81
spring:
profiles:dev
---
#测试环境
server:
port: 82
spring:
config:
activate:
on-profile: test #推荐方式
-
总结:
1. 多环境开发需要设置若干种常用环境,例如开发、生产、测试环境。
2. yaml格式中设置多环境使用—区分环境设置边界。
3. 每种环境的区别在于加载的配置属性不同。
4. 启用某种环境时需要指定启动时使用该环境。
多环境开发多文件版
-
多环境开发,各种各样环境集中以前容易暴露信息的,并且维护起来不方便。
-
就需要多个配置多文件格式。
主启动配置文件application.properties
spring.profiles.active=pro
1.环境分类配置文件application
-pro.properties
server.port=80
2. 环境分类配置文件application
-dev.properties
server.port=81
3. 环境分类配置文件application
-test.properties
server.port=82
-
注意:properties文件多环境配置仅支持多文件格式。
多环境开发分组管理
-
根据功能对配置文件中的信息进行拆分,并制作成独立的配置文件,命名规则如下
① application-devDB.yml
② application-devRedis.yml
③ application-devMVC.yml
-
使用group属性定义多种主环境与子环境的包含关系
spring:
profiles:
active: dev
group:
"dev": devDB,devRedis,devMVC
"pro": proDB,proRedis,proMVC
"test": testDB,testRedis,testMVC
-
注意:
当主环境dev与其他环境有相同属性时,主环境属性生效;
其他环境中有相同属性时,最后加载的环境属性生效。
多环境开发控制
-
如何用maven控制springboot环境?
当maven与springboot多环境产生冲突的时候,应该让springboot使用maven的环境。
1 . Maven中设置多环境属性
env_dev
dev
true
env_pro
pro
2. SpringBoot中引用Maven属性
3. 执行Maven打包指令,并在生成的boot打包文件.jar文件中查看对应信息。
-
总结:
1. 当Maven与SpringBoot同时对多环境进行控制时,以Mavn为主,
SpringBoot使用@..@占位符读取Maven对应的配置属性值。
2. 基于SpringBoot读取Maven配置属性的前提下,
如果在Idea下测试工程时pom.xml每次更新需要手动compile方可生效。
日记操作
-
日志(log)作用
1. 编程期调试代码
2. 运营期记录信息
①记录日常运营重要信息(峰值流量、平均响应时长……)
②记录应用报错信息(错误堆栈)
③记录运维过程数据(扩容、宕机、报警……)
代码中使用日志工具记录日志
日记对象声明方式
1. 添加日志记录操作(创建一个工具类)
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class BaseClass {
private Class clazz; //声明一个当前类对象
public static Logger log; //声明一个log对象
public BaseClass(){
//初始化当前类对象
clazz=this.getClass(); //通过反射的方式动态获取不同类需要操作的slf4j日记
log= LoggerFactory.getLogger(clazz); //初始化log对象
}
}
@RestController
@RequestMapping("/books")
public class BookController extends BaseClass {
//创建记录日记对象
@GetMapping
public String getById(){
System.out.println("fjdlfgjl");
// 记录日记
log.debug("debug....");//日记级别,默认用的info级别,目前看到是info以上级别,所以debug是看不到的,可以调级别
log.info("info.....");
log.warn("warn.....");
log.error("error.....");
return "springboot log";
}
}
2. 设置日志输出级别,使用配置文件方式
① DEBUG:程序员调试代码使用
② INFO:记录运维过程数据
③ WARN:记录运维过程报警数据
④ ERROR:记录错误堆栈信息
# ②设置分组级别方式,对某个组设置日记级别
logging:
group:
ebank: com.atguigu.controller,com.atguigu.service #代表设置一个组
iservice: com.aliyun
level:
root: info
ebank: warn # 使用分组,对某个组设置日记级别
##①设置包级别方式
#logging:
# level:
# root: info
# # #①设置某个包的日记级别
# com.atguigu.controller: debug
使用lombok提供的注解@Slf4j方式
1. 导入lombok依赖
org.projectlombok
lombok
2. 添加注解
@Slf4j
@RestController
@RequestMapping("/books")
public class BookController{
@GetMapping
public String getById(){
System.out.println("fjdlfgjl");
log.debug("debug....");
log.info("info.....");
log.warn("warn.....");
log.error("error....");
return "springboot logger";
}
}
日志输出格式控制
PID:进程ID,用于表明当前操作所处的进程,当多服务同时记录日志时,
该值可用于协助程序员调试程序。
所属类/接口名:当前显示信息为SpringBoot重写后的信息,
名称过长时,简化包名书写为首字母,甚至直接删除。
-
设置日志输出格式,看自己需求设置
logging:
pattern:
console: "%d - %m%n"
#%d:日期 %m:消息 %n:换行
通过文件记录日记
…..