SpringBoot——实用运维

目录

程序打包与运行(window)

​编辑

配置高级

临时属性

配置文件4级分类

自定义配置文件

​编辑

多环境开发

yaml版

多文件版

多环境开发的独立配置文件书写技巧

多环境开发控制

日志基础操作

快速创建日志对象Logger

日志输出格式控制

文件记录日志


程序打包与运行(window)

        现在我们把程序做完以后,用户可以通过浏览器访问我们的服务器,这也是测试整个程序的过程,但是这一套过程是有问题的,什么问题呢?一旦你下班儿回家了,你把电脑背回家了,那你的客户怎么访问你的程序呢?说的简单点儿,你电脑都断网了,他怎么能访问的?因此实际的上线运维过程不可能是这样的一种形式,那应该是什么样?

        我们会有一台专用的服务器,把我们的程序放在它上面运行,那这个时候该如何做呢?两个环节,第一,要把idea中的程序给抽取出来,变成一独立的程序包,然后把这个程序包放到这台服务器上,并且运行这台服务器,这台服务器呢是长期运行的,这样就能保障我们的客户能够通过他的浏览器或者手机端正常访问,整个过程其实分成两块儿,第一块儿程序打包,第二块儿程序在服务器上运行。

 此时在浏览器打开即可。 

1.SpringBoot工程可以基于java环境下独立运行jar文件启动服务
2.SpringBoot工程执行mvn命令package进行打包
3.执行jar命令: java -jar 工程名.jar

springboot在linux环境下部署:

配置高级

临时属性

临时属性在idea下测试

 在Program arguments:里填写的参数(属性值)都会注入到args里面

 

 

配置文件4级分类

        临时属性具有很强的风险性,为了提高安全性还是需要配置文件来处理。

        程序员开发时的配置和经理上线时的配置信息是不一样的,此时如何处理?springboot提供了一套机制,可以让我们在现有的配置基础上再做一层配置,按这种配置可以覆盖原先的配置,就不用在命令行上输入那么多的临时属性了。

        简而言之,resources目录下是给程序员做的,config目录下是给项目经理做的(该配置文件为第2级),它在做项目上线前的统一的配置管理。

        假如说配置文件涉密等级很高,不可能将配置信息(如数据库密码)告诉你。在运维阶段这配置文件又多了一级,叫做在工程目录层下的这个配置文件,要覆盖开发的时候的配置文件(即springboot运行配置的优先级更高)。

         但是运维人上面还有一个boss,比如运维组的组长,此时在工程目录层下创建config包,在这个包下创建配置文件(即第4级文件),他又会覆盖前面的配置文件。

 同一层级 pro生效(properties > yml  > yaml),不同层级,层级高则生效

自定义配置文件

如何让自己的配置文件生效呢?两种办法。

指定文件名或者指定文件路径

多环境开发

yaml版

        什么时候多环境呢?说白了就是,现在开发程序的时候,在自己机器上的那是开发环境,到了测试那边儿环境肯定不一样,连的库啊什么的都不一样,不会是本机的了,到了生产环境上的东西也不一样,也就是说每一种不同的环境它其实对应的配置是有点儿区别的,通常我们自己开发环境更方便,到了生产环境这些IP地址啊什么的都会变。

         我们用什么环境,就直接设置什么环境即可。

结果:

1.多环境开发需要设置若干种常用环境,例如开发、生产、测试环境
2. yaml格式中设置多环境使用 --- 区分环境设置边界
3.每种环境的区别在于加载的配置属性不同
4.启用某种环境时需要指定启动时使用该环境

多文件版

        多环境发各种各样的配置信息都集中在一起,是很容易暴露信息的,并且在同一个文件维护起来也不方便,所以我们要把每一个信息都独立出来。

1.可以使用独立配置文件定义环境属性
2.独立配置文件便于线上系统维护更新并保障系统安全性

多环境开发的独立配置文件书写技巧

        根据功能将其分别开来,想更换的时候会更加方便。就是不停的做细粒度控制,如果要使用多个,用include就可以实现。

        注意:后加载的配置会覆盖前面加载的配置中已有的属性,而我们主启动的这一个环境,他是最后一个加载的,不管你这里面设什么,通通都以他的配置为准。

        从Spring2.4版开始使用group属性替代include属性,降低了配置书写量使用,group属性定义多种主环境与子环境的包含关系。

多环境开发控制

用maven控制boot的环境,Maven中设置多环境属性:

    <!--Maven中设置多环境属性-->
    <profiles>
        <profile>
            <id>dev_env</id>
            <properties>
                <profile.active>dev</profile.active>
            </properties>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        <profile>
            <id>pro_env</id>
            <properties>
                <profile.active>pro</profile.active>
            </properties>

        </profile>
        <profile>
            <id>test_env</id>
            <properties>
                <profile.active>test</profile.active>
            </properties>
        </profile>
    </profiles>

SpringBoot中引用Maven属性:

执行Maven打包指令,并在生成的boot打包文件.jar文件中查看对应信息
修改pom.xml 文件后,启动没有生效 在maven里手动 compile 即可

1.当Maven与 SpringBoot同时对多环境进行控制时,以Mavn为主 ,
SpringBoot使用@. . @占位符读取Maven对应的配置属性值
2.基于SpringBoot读取Maven配置属性的前提下,如果在Idea下测试
工程时pom. xml每次更新需要手动compile方可生效

日志基础操作

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

创建记录日志的对象:

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

添加日志记录操作:

@RestController
@RequestMapping("/books")
public class BookController {
    private static final Logger log = LoggerFactory.getLogger(BookController.class);

    @GetMapping
    public String getById() {
        System.out.println("springboot is running...");
        log.debug("debug ...");
        log.info("info ...");
        log.warn("warn ...");
        log.error("error ...");
        return "springboot is running...";
    }
}

设置日志输出级别:

# 开启 debug 模式,输出调试信息,常用于检查系统运行状况
debug: true
# 设置日志级别, root 表示根节点,即整体应用日志级别
logging:
  level:
    root: debug

设置日志组,控制指定包对应的日志输出级别:

logging:
  # 设置分组
  group:
    # 自定义组名,设置当前组中所包含的包
    ebank: com.zqf.controller,com.zqf.service,com.zqf.dao
    iservice: com.alibaba
  level:
    root: info
    # 设置某个包的日志级别
    #com.zqf.controller: debug
    # 为对应组设置日志级别
    ebank: warn
  1. 日志用于记录开发调试与运维过程消息
  2. 日志的级别共6种,通常使用4种即可,分别是DEBUG,INFO,WARN,ERROR
  3. 可以通过日志组或代码包的形式进行日志显示级别的控制

快速创建日志对象Logger

使用lombok提供的注解@Slf4j简化开发,减少日志对象的声明操作

@Slf4j
//Rest模式
@RestController
@RequestMapping("/books")
public class BookController {

    @GetMapping
    public String getById(){
        System.out.println("springboot is running...2");

        log.debug("debug...");
        log.info("info...");
        log.warn("warn...");
        log.error("error...");

        return "springboot is running...2";
    }

}

日志输出格式控制

 设置日志输出格式:

logging:
    pattern:
        console: "%d - %m%n"

其中%d:日期,%m:消息,%n:换行

logging:
  pattern:
#    console: "%d - %m%n"
    console: "%d %clr(%5p) --- [%16t] %clr(%-40.40c){cyan} : %m %n"

%5p:对齐        %clr():颜色        %t:线程名        %c:类名        {cyan}:一种颜色   

文件记录日志

日志记录到文件及其日志文件格式的设置

logging:
  file:
    name: server.log
  logback:
    #设置滚动的日志
    rollingpolicy:
      max-file-size: 4KB     #超过这个大小之后自动存储,再来一个新文件
      file-name-pattern: server.%d{yyyy-MM-dd}.%i.log    
      #自定义文件名    eg:server.2020-01-01.0.10g
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java运维shell脚本一般使用Bash或者其他Shell语言来编写,主要是为了方便运维人员进行一些自动化操作,比如部署、备份、启动和停止等。下面给出一个Spring Boot项目的运维脚本示例: ```bash #!/bin/bash # 定义一些变量 APP_NAME="my-application" APP_HOME="/opt/${APP_NAME}" APP_JAR="${APP_HOME}/${APP_NAME}.jar" PID_FILE="${APP_HOME}/${APP_NAME}.pid" LOG_FILE="${APP_HOME}/${APP_NAME}.log" # 检查应用是否已经启动,如果已经启动则退出 if [ -f "${PID_FILE}" ]; then pid=$(cat "${PID_FILE}") if ps -p "${pid}" > /dev/null; then echo "${APP_NAME} is already running with PID ${pid}." exit 1; fi fi # 启动应用 nohup java -jar "${APP_JAR}" > "${LOG_FILE}" 2>&1 & pid=$! echo "${pid}" > "${PID_FILE}" echo "Started ${APP_NAME} with PID ${pid}." # 停止应用 function stop() { if [ -f "${PID_FILE}" ]; then pid=$(cat "${PID_FILE}") kill -TERM "${pid}" rm "${PID_FILE}" echo "Stopped ${APP_NAME} with PID ${pid}." else echo "${APP_NAME} is not running." fi } # 其他操作,比如备份、部署等 function backup() { # TODO: 备份操作 } function deploy() { # TODO: 部署操作 } # 根据传入的参数执行不同的操作 case "$1" in start) # 启动应用 ;; stop) # 停止应用 stop ;; restart) # 重启应用 stop sleep 5 start ;; backup) # 备份应用 backup ;; deploy) # 部署应用 deploy ;; *) echo "Usage: $0 {start|stop|restart|backup|deploy}" exit 1 esac ``` 这个脚本定义了一些变量,比如应用名称、应用目录、应用Jar包、PID文件和日志文件等。然后定义了一个`stop`函数用来停止应用,以及其他操作如备份和部署等。最后使用`case`语句来根据传入的参数执行不同的操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值