2024最新Spring Boot 面试题

这个方法会加载类路径及所有jar包下META-INF/spring.factories配置中映射的自动配置的类。

你如何理解 Spring Boot 中的 Starters?


Starters可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,你可以一站式集成Spring及其他技术,而不需要到处找示例代码和依赖包。如你想使用Spring JPA访问数据库,只要加入spring-boot-starter-data-jpa启动器依赖就能使用了。

Starters包含了许多项目中需要用到的依赖,它们能快速持续的运行,都是一系列得到支持的管理传递性依赖。

Spring Boot官方的启动器都是以spring-boot-starter-命名的,代表了一个特定的应用类型。

第三方的启动器不能以spring-boot开头命名,它们都被Spring Boot官方保留。一般一个第三方的应该这样命名,像mybatis的mybatis-spring-boot-starter。

如何在 Spring Boot 启动的时候运行一些特定的代码?


如果你想在Spring Boot启动的时候运行一些特定的代码,你可以实现接口 ApplicationRunner或者 CommandLineRunner,这两个接口实现方式一样,它们都只提供了一个run方法。

如果启动的时候有多个ApplicationRunner和CommandLineRunner,想控制它们的启动顺序,可以通过@Order注解控制

Spring Boot 有哪几种读取配置的方式?


  • @Value

@Component

public class HttpClientParam {

@Value(“${http.maxTotal}”)

private Integer maxTotal;

public String getMaxTotal() {

return maxTotal;

}

public void setMaxTotal(String maxTotal) {

this.maxTotal = maxTotal;

}

}

  • @ConfigurationProperties

/**

  • HttpClient连接池

  • @author hzy

*/

@Configuration

@ConfigurationProperties(prefix = “http”)

public class HttpClientParam {

private Integer maxTotal;

private Integer defaultMaxPerRoute;

private Integer connectTimeout;

private Integer connectionRequestTimeout;

private Integer socketTimeout;

public Integer getMaxTotal() {

return maxTotal;

}

public void setMaxTotal(Integer maxTotal) {

this.maxTotal = maxTotal;

}

public Integer getDefaultMaxPerRoute() {

return defaultMaxPerRoute;

}

public void setDefaultMaxPerRoute(Integer defaultMaxPerRoute) {

this.defaultMaxPerRoute = defaultMaxPerRoute;

}

public Integer getConnectTimeout() {

return connectTimeout;

}

public void setConnectTimeout(Integer connectTimeout) {

this.connectTimeout = connectTimeout;

}

public Integer getConnectionRequestTimeout() {

return connectionRequestTimeout;

}

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.pattern.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"?>

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

INFO

L O G P A T H / {LOG_PATH}/ LOGPATH/{LOG_DIR}/info.log.%d{yyyy-MM-dd}.log

30

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

10MB

ERROR

ACCEPT

DENY

L O G P A T H / {LOG_PATH}/ LOGPATH/{LOG_DIR}/error.log.%d{yyyy-MM-dd}.log

30

**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(资料价值较高,非无偿)

img

写在最后

可能有人会问我为什么愿意去花时间帮助大家实现求职梦想,因为我一直坚信时间是可以复制的。我牺牲了自己的大概十个小时写了这片文章,换来的是成千上万的求职者节约几天甚至几周时间浪费在无用的资源上。

复习一周,字节跳动三场技术面+HR面,不小心拿了offer

复习一周,字节跳动三场技术面+HR面,不小心拿了offer

上面的这些(算法与数据结构)+(Java多线程学习手册)+(计算机网络顶级教程)等学习资源
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!
将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!**

如果你觉得这些内容对你有帮助,可以扫码获取!!(资料价值较高,非无偿)

img

写在最后

可能有人会问我为什么愿意去花时间帮助大家实现求职梦想,因为我一直坚信时间是可以复制的。我牺牲了自己的大概十个小时写了这片文章,换来的是成千上万的求职者节约几天甚至几周时间浪费在无用的资源上。

[外链图片转存中…(img-IUKBq9Co-1711539475397)]

[外链图片转存中…(img-N4fuHqTy-1711539475397)]

上面的这些(算法与数据结构)+(Java多线程学习手册)+(计算机网络顶级教程)等学习资源
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!

  • 18
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值