SpringBoot补充知识点(一)

一、配置文件

1.1、格式

1)支持两种全局配置文件,application.properteis和application.yml(application.yaml);
2)yaml文件格式要求:大小写敏感、使用缩进代表层级关系、相同的部分只出现一次;

1.2、存放位置及加载顺序

1)当前项目根目录下的一个/config 子目录中(第一);
2)当前项目根目录中(第二);
3)项目的 resources 即 classpath 根路径下的/config 目录中(第三);
4)项目的 resources 即 classpath 根路径中(第四);

1.3、占位符${}

1)可以获取配置文件中的键的值赋给另一个键作为值;
2)可以获取框架提供的方法中的值如:random.int ;

1.4、bootstrap 配置文件

Spring Boot 中有两种上下文对象,一种是 bootstrap, 另外一种是 application, bootstrap 是应用程序的父上下文,也就是说 bootstrap 加载优先于 applicaton。bootstrap 主要用于从 额外的资源来加载配置信息,还可以在本地外部配置文件中解密属性。这两个上下文共用一 个环境,它是任何 Spring 应用程序的外部属性的来源。bootstrap 里面的属性会优先加载, 它们默认也不能被本地相同配置覆盖。
1)特征:boostrap 由父 ApplicationContext 加载,比 applicaton 优先加载;boostrap 里面的属性不能被覆盖;
2)应用:加密/解密场景;一些固定的不能被覆盖的属性;使用 Spring Cloud Config 配置中心时,这时需要在 bootstrap 配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息;

二、常见注解

2.1、核心注解

2.1.1、@SpringBootApplication

SpringBoot 的启动类注解,等同于@Configuration+@EnableAutoConfiguration+@ComponentScan 的组合;

2.1.2、@SpringBootConfiguration

是@Configuration 注解的派生注解,跟@Configuration 注解的功能一致,标注这个类是一个配置类;
@SpringBootConfiguration 是 springboot 的注解,而@Configuration 是 spring 的注解;

2.1.3、@Configuration

通过对bean对象的操作替代spring中xml文件;

2.1.4、@EnableAutoConfiguration

自动配置(auto-configuration):尝试根据你添加的 jar 依赖自动配置你的 Spring 应用;
@AutoConfigurationPackage 和@Import(AutoConfigurationImportSelector.class) 注解的组合;

2.1.5、@AutoConfigurationPackage

自动注入主类下所在包下所有的加了注解的类 (@Controller,@Service 等),以及配置类(@Configuration)

2.1.6、@Import({AutoConfigurationImportSelector.class})

导入普通的类;
导入实现了 ImportSelector 接口的类;
导入实现了 ImportBeanDefinitionRegistrar 接口的类;

2.1.7、@ComponentScan

组件扫描,可自动发现和装配一些 Bean;

2.1.8、@ConfigurationPropertiesScan

@ConfigurationPropertiesScan 扫描配置属性;
@EnableConfigurationProperties 注解的作用是使用 @ConfigurationProperties 注解的类生效;

2.2、控制层注解

2.2.1、@Controller

标识为控制类

2.2.2、@RestController

相当于@Controller+@ResponseBody 注解;
返回rest风格内容,无法跳转页面,InternalResourceViewResolver 也不起作用;

2.2.3、@GetMapping

指定为get请求,@RequestMapping(method = RequestMethod.GET)的缩写

2.2.4、@PostMapping

指定为post请求,是@RequestMapping(method = RequestMethod.POST)的缩写

2.2.5、@PutMapping

指定为put请求,@RequestMapping(method = RequestMethod.PUT)的缩写

2.2.6、@DeleteMapping

指定为delete请求,@RequestMapping(method = RequestMethod.DELETE)的缩写

三、监控检测

使用 Actuator 检查与监控服务

3.1、引入pom依赖

	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-actuator</artifactId>
	</dependency>

3.2、访问监控服务

1)默认可访问两个/actuator监控服务(/health与/info)

2020-08-01 09:04:08.409  INFO 14660 --- [           main] o.s.b.a.e.web.EndpointLinksResolver      : Exposing 2 endpoint(s) beneath base path '/actuator'
2020-08-01 09:04:08.478  INFO 14660 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''

3.4、配置文件修改

#配置访问端点的根路径
management.endpoints.web.base-path=/actuator
# 开启指定访问端点,*表示所有
management.endpoints.web.exposure.include=*
# 屏蔽指定访问端点,如env,beans
management.endpoints.web.exposure.exclude=env,beans

3.3、常用监控指标接口

1)应用配置类:/beans、/info、/env、/env/{name}、/configprops、/mappings
2)监控指标类:/health、/dump、/trace、/metrics、/metrics/{name}
3)操作控制类:/shutdown

四、Admin使用(SBA)

4.1、简介

1)Spring Boot Admin 的使用是需要建立服务端与客户端,一个服务端可以监控多个客户端;
2)服务端:独立的项目,会将搜集到的数据在自己的图形界面中展示;
3)客户端:需要监控的项目;

4.2、服务端搭建

1)引入pom依赖
目前在 Spring Boot Admin Starter Server2.1.6 版本中不支持 Spring Boot2.2.x 版本, 只支持到 2.1.X

<dependency>
	<groupId>de.codecentric</groupId> 
	<artifactId>spring-boot-admin-starter-server</artifactId> 
	<version>2.1.6</version> 
</dependency>

2)开启启动类注解

@EnableAdminServer //开启 Spring Boot Admin 服务端

4.3、客户端搭建

1)引入pom依赖

<dependency> 
	<groupId>de.codecentric</groupId> 
	<artifactId>spring-boot-admin-starter-client</artifactId> 
	<version>2.1.6</version>
</dependency>

2)指定服务端访问地址

#指定服务端的访问地址 
spring.boot.admin.client.url=http://localhost:port

五、Logback日志

5.1、简介

1)Spring Boot 默认的日志管理组件,由 log4j 创始人设计;
2)在 spring-boot-starter 或者 spring-boot-starter-web 中已经包含了 Logback 的依赖;

5.2、Logback 读取配置文件方式

1)在 classpath 下查找文件 logback-test.xml;
2)如果文件不存在,则查找 logback.xml;
3)如果两个文件都不存在,LogBack 用 BasicConfiguration 自动对自己进行最小化配 置,这样既实现了上面我们不需要添加任何配置就可以输出到控制台日志信息;

5.3、添加logback.xml

resources/目录下添加logback.xml配置文件

<?xml version="1.0" encoding="UTF-8" ?>
 <configuration>
<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->  
    <property name="LOG_HOME" value="d:/logback/logs/" />
    <!-- 控制台输出 -->   
    <appender name="Stdout" class="ch.qos.logback.core.ConsoleAppender">
       <!-- 日志输出编码 -->  
        <layout class="ch.qos.logback.classic.PatternLayout">   
             <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> 
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n   
            </pattern>   
        </layout>   
    </appender>   
    <!-- 按照每天生成日志文件 -->   
    <appender name="RollingFile"  class="ch.qos.logback.core.rolling.RollingFileAppender">   
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <FileNamePattern>${LOG_HOME}/server.%d{yyyy-MM-dd}.log</FileNamePattern>   
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>   
        <layout class="ch.qos.logback.classic.PatternLayout">  
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> 
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n   
            </pattern>   
       </layout> 
        <!--日志文件最大的大小-->
       <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
         <MaxFileSize>10MB</MaxFileSize>
       </triggeringPolicy>
    </appender>     

    <!-- 日志输出级别 -->
    <root level="info">   
        <appender-ref ref="Stdout" />   
        <appender-ref ref="RollingFile" />   
    </root> 



<!--日志异步到数据库 -->  
<!--     <appender name="DB" class="ch.qos.logback.classic.db.DBAppender">
        日志异步到数据库 
        <connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">
           连接池 
           <dataSource class="com.mchange.v2.c3p0.ComboPooledDataSource">
              <driverClass>com.mysql.jdbc.Driver</driverClass>
              <url>jdbc:mysql://127.0.0.1:3306/databaseName</url>
              <user>root</user>
              <password>root</password>
            </dataSource>
        </connectionSource>
  </appender> -->

</configuration>

5.4、使用

private final static Logger logger = LoggerFactory.getLogger(TestController.class);

5.5、屏蔽指定包中的日志输出

# 屏蔽org开头的包中日志
logging.level.org=off

六、打包方式

6.1、引入pom依赖

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

6.2、打包操作(idea)

Maven - 项目 - Lifecycle - install

6.3、运行

java -jar xxx.jar

七、多环境配置

1)结构
application-{profile}.properties/yml
dev环境:application-dev.properties/yml
test环境:application-test.properties/yml
prd环境:application-prod.properties/yml
2)打包启动(需要指定环境)
java -jar xxx.jar --spring.profiles.active={profile}

八、linux下脚本启动

1)使用步骤
修改脚本文件中的参数值
将启动脚本文件上传到 Linux 中
分配执行权限:chmod 777
启动命令:server.sh start
关闭命令:server.sh stop
2)脚本内容

#!/bin/bash
cd `dirname $0`
 
CUR_SHELL_DIR=`pwd`
CUR_SHELL_NAME=`basename ${BASH_SOURCE}`
 
JAR_NAME="项目名称"
JAR_PATH=$CUR_SHELL_DIR/$JAR_NAME
 
#JAVA_MEM_OPTS=" -server -Xms1024m -Xmx1024m -XX:PermSize=128m"
JAVA_MEM_OPTS=""

#如果是多环境配置需要在该选项中指定profile
SPRING_PROFILES_ACTIV="-Dspring.profiles.active=配置文件profile名称"
#如果没有多环境配置将 SPRING_PROFILES_ACTIV注释掉,将SPRING_PROFILES_ACTIV=""释放开
#SPRING_PROFILES_ACTIV=""
LOG_DIR=$CUR_SHELL_DIR/logs
LOG_PATH=$LOG_DIR/${JAR_NAME%..log
 
echo_help()
{
    echo -e "syntax: sh $CUR_SHELL_NAME start|stop"
}
 
if [ -z $1 ];then
    echo_help
    exit 1
fi
 
if [ ! -d "$LOG_DIR" ];then
    mkdir "$LOG_DIR"
fi
 
if [ ! -f "$LOG_PATH" ];then
    touch "$LOG_DIR"
fi
 
if [ "$1" == "start" ];then
 
    # check server
    PIDS=`ps --no-heading -C java -f --width 1000 | grep $JAR_NAME | awk '{print $2}'`
    if [ -n "$PIDS" ]; then
        echo -e "ERROR: The $JAR_NAME already started and the PID is ${PIDS}."
        exit 1
    fi
 
    echo "Starting the $JAR_NAME..."
 
    # start
    nohup java $JAVA_MEM_OPTS -jar $SPRING_PROFILES_ACTIV $JAR_PATH >> $LOG_PATH 2>&1 &
 
    COUNT=0
    while [ $COUNT -lt 1 ]; do
        sleep 1
        COUNT=`ps  --no-heading -C java -f --width 1000 | grep "$JAR_NAME" | awk '{print $2}' | wc -l`
        if [ $COUNT -gt 0 ]; then
            break
        fi
    done
    PIDS=`ps  --no-heading -C java -f --width 1000 | grep "$JAR_NAME" | awk '{print $2}'`
    echo "${JAR_NAME} Started and the PID is ${PIDS}."
    echo "You can check the log file in ${LOG_PATH} for details."
 
elif [ "$1" == "stop" ];then
 
    PIDS=`ps --no-heading -C java -f --width 1000 | grep $JAR_NAME | awk '{print $2}'`
    if [ -z "$PIDS" ]; then
        echo "ERROR:The $JAR_NAME does not started!"
        exit 1
    fi
 
    echo -e "Stopping the $JAR_NAME..."
 
    for PID in $PIDS; do
        kill $PID > /dev/null 2>&1
    done
 
    COUNT=0
    while [ $COUNT -lt 1 ]; do
        sleep 1
        COUNT=1
        for PID in $PIDS ; do
            PID_EXIST=`ps --no-heading -p $PID`
            if [ -n "$PID_EXIST" ]; then
                COUNT=0
                break
            fi
        done
    done
 
    echo -e "${JAR_NAME} Stopped and the PID is ${PIDS}."
else
    echo_help
    exit 1
fi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值