0


springboot工程打包打包与运行

程序为什么要打包

编辑

程序打包与运行(Windows版)

  • 对SpringBoot项目打包(执行Maven构建指令package)。

打包好后,会在target中看到打包好的jar包。右击点击open in -- > Explorer打开jar包路径,在地址路径输入cmd进行执行启动指令。

  • 运行项目(执行启动指令)。

java –jar jar包名称

  • 注意:jar支持命令行启动需要依赖maven插件,确认打包是有SpringBoot对应的maven插件。
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
  • 总结:

SpringBoot工程可以基于java环境下独立运行jar文件启动服务。

SpringBoot项目快速启动(Linux版)

项目上传到linux系统运行

1.上传项目的jar包到linux系统中(usr的local目录下创建一个项目)。

  1. 执行jar命令:java –jar 工程名.jar,

后台启动:nohup java -jar 项目jar包 > server.log 2>&1 &

  1. 服务器断开:①查询对应的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配置

  1. 点击修改配置

2 . 看到配置属性的位置,Program arguments程序参数,在里面配置自己需求。

Program arguments和args的关系

在Program arguments填属性--server.port=8081 --a=b,会进入到args命令里面,

那么现在这个属性值通过这个参数传递到这里面。

方式二:通过编程形式带参数启动SpringBoot程序,为程序添加运行参数

@SpringBootApplicationpublicclassSpringbootCrudApplication {
    publicstaticvoidmain(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目录中配置文件:服务于运维经理整体调控

  1. 多层级配置文件间的属性采用叠加并覆盖的形式作用于程序。

自定义配置文件

  • 例定义一个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

  1. 环境分类配置文件application

-dev.properties

server.port=81

  1. 环境分类配置文件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中设置多环境属性

<!--    设置多环境-->
    <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>
  1. SpringBoot中引用Maven属性

  1. 执行Maven打包指令,并在生成的boot打包文件.jar文件中查看对应信息。
  • 总结:
  1. 当Maven与SpringBoot同时对多环境进行控制时,以Mavn为主,

SpringBoot使用@..@占位符读取Maven对应的配置属性值。

  1. 基于SpringBoot读取Maven配置属性的前提下,

如果在Idea下测试工程时pom.xml每次更新需要手动compile方可生效。

日记操作

  • 日志(log)作用
  1. 编程期调试代码

  2. 运营期记录信息

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

②记录应用报错信息(错误堆栈)

③记录运维过程数据(扩容、宕机、报警……)

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

日记对象声明方式

  1. 添加日志记录操作(创建一个工具类)
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

publicclassBaseClass {
    private Class clazz;   //声明一个当前类对象publicstatic Logger log; //声明一个log对象publicBaseClass(){
        //初始化当前类对象
        clazz=this.getClass();   //通过反射的方式动态获取不同类需要操作的slf4j日记
        log= LoggerFactory.getLogger(clazz); //初始化log对象
    }
}
@RestController@RequestMapping("/books")publicclassBookControllerextendsBaseClass {
    //创建记录日记对象@GetMappingpublic String getById(){
        System.out.println("fjdlfgjl");
//        记录日记
        log.debug("debug....");//日记级别,默认用的info级别,目前看到是info以上级别,所以debug是看不到的,可以调级别
        log.info("info.....");
        log.warn("warn.....");
        log.error("error.....");
        return"springboot log";
    }
}
  1. 设置日志输出级别,使用配置文件方式

① 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依赖
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
  1. 添加注解
@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:换行

通过文件记录日记

.....

标签: spring boot 后端 java

本文转载自: https://blog.csdn.net/zjw_rp/article/details/131826336
版权归原作者 zjw_rp 所有, 如有侵权,请联系我们删除。

“springboot工程打包打包与运行”的评论:

还没有评论