写点什么

2021 最新 Spring Boot 面试题

  • 2022 年 4 月 19 日
  • 本文字数:3397 字

    阅读完需:约 11 分钟

public void setConnectionRequestTimeout(Integer connectionRequestTimeout) {


this.connectionRequestTimeout = connectionRequestTimeout;


}


public Integer getSocketTimeout() {


return socketTimeout;


}


public void setSocketTimeout(Integer socketTimeout) {


this.socketTimeout = socketTimeout;


}


}


http:

最大连接数

maxTotal: 100

并发数

defaultMaxPerRoute: 20


connectTimeout: 10000


connectionRequestTimeout: 500


socketTimeout: 10000


  • @PropertySource+@Value


@Component


@PropertySource(value = { "config/http-config.properties"})


public class HttpClientParam {


@Value("${http.maxTotal}")


private Integer maxTotal;


public String getMaxTotal() {


return maxTotal;


}


public void setMaxTotal(String maxTotal) {


this.maxTotal = maxTotal;


}


}


[](()Spring Boot 支持哪些日志框架?推荐和默认的日志框架是哪个?




Spring Boot 支持 Java Util Logging,Log4j2,Lockback 作为日志框架,如果你使用 starters 启动器,Spring Boot 将使用 Logback 作为默认日志框架。无论使用哪种日志框架,Spring Boot 都支持配置将日志输出到控制台或者文件中。


spring-boot-starter 启动器包含 spring-boot-starter-logging 启动器并集成了 slf4j 日志抽象及 Logback 日志框架。


[](()属性配置日志




Spring Boot 支持属性配置日志参数,这个不是很灵活,不细讲。


参考配置:

LOGGING

logging.config= # Location of the logging configuration file. For instance classpath:logback.xml for Logback


logging.exception-conversion-word=%wEx # Conversion word used when logging exceptions.


logging.file= # Log file name. For instance myapp.log


logging.level.*= # Log levels severity mapping. For instance logging.level.org.springframework=DEBUG


logging.path= # Location of the log file. For instance /var/log


logging.pattern.console= # Appender pattern for output to the console. Only supported with the default logback setup.


logging.pattern.file= # Appender pattern for output to the file. Only supported with the default logback setup.


logging.patte Java 开源项目【ali1024.coding.net/public/P7/Java/git】 rn.level= # Appender pattern for log level (default %5p). Only supported with the default logback setup.


logging.register-shutdown-hook=false # Register a shutdown hook for the logging system when it is initialized.


如:


logging.level.root=DEBUG


logging.level.org.springframework.web=DEBUG


logging.level.org.hibernate=ERROR


[](()自定义日志文件




根据不同的日志框架,默认加载的日志配置文件的文件名,放在资源根目录下,其他的目录及文件名不能被加载。


| Logging System | Customization |


| --- | --- |


| Logback | logback-spring.xml, logback-spring.groovy, logback.xml or logback.groovy |


| Log4j2 | log4j2-spring.xml or log4j2.xml |


| JDK (Java Util Logging) | logging.properties |


既然默认自带了 Logback 框架,Logback 也是最优秀的日志框架,往资源目录下创建一个 logback-spring.xml 即可,下面是一个参考配置文件。


<?xml version="1.0" encoding="UTF-8"?>


<configuration debug="false">


<springProperty scope="context" name="APP_NAME" source="spring.application.name"/>


<springProperty scope="context" name="APP_PORT" source="server.port"/>


<springProperty scope="context" name="DEFAULT_APP_PORT" source="spring.application.port"/>


<property name="OS_NAME" value="${os.name}"/>


<if condition='property("OS_NAME").contains("Windows")'>


<then>


<property name="LOG_PATH" value="${LOG_PATH:-E:/logs}" />


</then>


<else>


<property name="LOG_PATH" value="${LOG_PATH:-/log}" />


</else>


</if>


<property name="LOG_DIR" value="${APP_NAME:-system}" />


<property name="APP_PORT" value="{APP_PORT:-{DEFAULT_APP_PORT:-0}}" />


<if condition='!property("APP_PORT").equals("0")'>


<then>


<property name="LOG_DIR" value="{APP_PORT}" />


</then>


</if>


<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">


<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">


<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>


</encoder>


</appender>


<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">


<filter class="ch.qos.logback.classic.filter.ThresholdFilter">


<level>INFO</level>


</filter>


<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">


<FileNamePattern>{LOG_DIR}/info.log.%d{yyyy-MM-dd}.log</FileNamePattern>


<MaxHistory>30</MaxHistory>


</rollingPolicy>


<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">


<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>


</encoder>


<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">


<MaxFileSize>10MB</MaxFileSize>


</triggeringPolicy>


</appender>


<appender name="FILE-ERROR" class="ch.qos.logback.core.rolling.RollingFileAp 《一线大厂 Java 面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》开源 pender">


<filter class="ch.qos.logback.classic.filter.LevelFilter">


<level>ERROR</level>


<onMatch>ACCEPT</onMatch>


<onMismatch>DENY</onMismatch>


</filter>


<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">


<FileNamePattern>{LOG_DIR}/error.log.%d{yyyy-MM-dd}.log</FileNamePattern>


<MaxHistory>30</MaxHistory>


</rollingPolicy>


<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">


<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>


</encoder>


<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">


<MaxFileSize>10MB</MaxFileSize>


</triggeringPolicy>


</appender>


<logger name="com.apache.ibatis" level="TRACE" />


<logger name="java.sql.Connection" level="DEBUG" />


<logger name="java.sql.Statement" level="DEBUG" />


<logger name="java.sql.PreparedStatement" level="DEBUG" />


<root level="INFO">


<appender-ref ref="STDOUT" />


<appender-ref ref="FILE" />


<appender-ref ref="FILE-ERROR" />


</root>


</configuration>


强烈推荐使用 logback-spring.xml 作为文件名,因为 logback.xml 加载太早。


日志初始化在 ApplicationContext 创建之前,所以 @PropertySources 加载的配置是读取不到的,系统环境变量、Spring Environment 及 application,bootstrap 配置文件中的信息可以读取到。


读取系统环境属性:


<property name = "LOG_PATH" value = "${LOG_PATH:-E:/logs}" />


读取当前应用 Environment 中的属性:


<springProperty scope="context" name="fluentHost" source="myapp.fluentd.host"


defaultValue="localhost"/>


Spring Boot 也支持通过 springProfile 来加载不同 profiles 下的配置。


<springProfile name="staging">

最后如何让自己一步步成为技术专家

说句实话,如果一个打工人不想提升自己,那便没有工作的意义,毕竟大家也没有到养老的年龄。


当你的技术在一步步贴近阿里 p7 水平的时候,毫无疑问你的薪资肯定会涨,同时你能学到更多更深的技术,交结到更厉害的大牛。


推荐一份 Java 架构之路必备的学习笔记,内容相当全面!!!



成年人的世界没有容易二字,前段时间刷抖音看到一个程序员连着加班两星期到半夜 2 点的视频。在这个行业若想要拿高薪除了提高硬实力别无他法。


你知道吗?现在有的应届生实习薪资都已经赶超开发 5 年的程序员了,实习薪资 26K,30K,你没有紧迫感吗?做了这么多年还不如一个应届生,真的非常尴尬!


进了这个行业就不要把没时间学习当借口,这个行业就是要不断学习,不然就只能被裁员。所以,抓紧时间投资自己,多学点技术,眼前困难,往后轻松!


【关注】+【转发】+【点赞】支持我!创作不易!

用户头像

还未添加个人签名 2022.04.13 加入

还未添加个人简介

评论

发布
暂无评论
2021最新Spring Boot 面试题_Java_爱好编程进阶_InfoQ写作平台