SPRING BOOT
SpringBoot与Spring
SpringBoot=Spring+Boot,在Spring下需要维护bean、维护配置文件、维护依赖,SPringBoot把这些东西封装成脚手架,让程序员更专注业务开发
SpringBoot与SpringCloud的区别?
SpringCloud基于Spring,是微服务架构;而SpringBoot是加强版的快速开发的SPring
SpringBoot的核心注解有哪些,主要由哪几个注解组成?
- 启动类中@SpringBootConfiguration:组合了@Configuration注解,实现配置类功能
- @EnableAutoConfiguration 打开自动配置功能 也可以用exclude关闭特定功能
- @ComponentScan:SPring组件扫描
SpringBoot支持哪些日志框架,默认使用哪个?
- 支持log4j,logback,JAVA UTIL LOGGING
- 默认logback
SpringBootStarter工作原理?
- 首先SpringBoot就是各种starter组合起来的
- 启动时,由@SpringBootApplication注解会自动去MAVEN中读取每个starter的spring.factories文件,这个文件里配置了需要创建的bean,然后自动注入到SpringContext中
SpringBoot自动配置的原理?
- 在标有SpringBootApplication的启动类中有SpringBootConfiguration注解,是SpringBoot的主配置类,包含@EnableAutoConfiguration
- EnableAutoConfiguration会从配置文件META-INF/Spring.properties中加载可能需要的自动配置类
- 去重,将exlcude和excludeName里面不需要自动配置的类去掉
- 过滤,将满足@Conditional条件的自动配置类返回,加载进Spring容器中去
运行SpringBoot由有哪几种方式?
- 直接找到SpringBootApplication的main方法运行
- 用maven插件运行
- 打包丢到容器里运行
Spring需要独立的容器运行吗?
不需要 内置tomcat
SpringBoot实现热部署有几种方式?
- spring loaded
- spring boot dev tools
SpringBoot怎么使用事务?
- 首先在配置类上@EnableTransactionManagement开启事务
- 用事务的地方加@Transaction注解
Async异步调用方法
- 在配置类上添加@EnableAsync
- 在需要异步加载的上面加上@async注解,这个方法会在单独的线程里运行
如何在SpringBoot启动的时候运行一些指定的代码?
- 实现ApplicationRunner接口或者CommandLineRunner里面的run方法
SpringBoot有几种读取配置的方式?
- @Value
- @ConfigurationProperties
- @Environment
- @PropertySource
什么是Java Config
-
使用场景 p
- 使用Java代码来配置bean对象
- 一个配置类可以继承另一个配置类,自定义bean的时候只需要重写@bean修饰的方法
-
常用的注解:
-
@Configuration修饰类
-
@ComponentScan
-
@bean
-
@EnableWEBMvc
-
@ImportSource导入指定的xml配置文件
Springboot加载配置的顺序
- 服务中心nacos注册的bootstrap.yml
- properties
- yaml、yml
- 系统环境变量
- 命令行参数
SpringBoot是否可以用XML配置?
- 官方不推荐XML配置,推荐properties或者yml或者Java bean
- 可以通过@Importresource将自定义的xml配置文件加载进去
SpringBoot的核心配置文件是什么?bootstrap.properties和applicdation.properties的区别?
- bootstrap.properties一般做Spring cloud的时候会用到,由父applicationcontext创建,会先加载 这个文件里的配置不会被覆盖,所以比如用nacos的时候,可以在远程拉取一些配置到这个文件中来
- Application.properties 又当前applicationcontext加载,用于SpringBoot的自动化配置
什么是Spring profiles?
- profiles机制能让开发者切换不同的配置文件
- 允许通过dev test prod(正式环境)来注册bean,可以使用类似@Profile("dev")注解
- 可以直接定义类似application.prod.yml,然后在application.yml中加上Spring.profiles.active=prod
SpringBoot多数据源拆分思路?
- 在配置文件中配置两个配置源
- 在Java使用分包mapper 接口,在resource下使用分包Mapper.xml
- 通过@Configurationproperties注入不同的配置源信息,
- 再将@MapperScan扫描到不同的mapper接口
SpringBoot多数据源事务如何管理
- service层用@transactional(transactionManagerment=XXXX)来指定事务管理器
- 实现分布式事务
Spring security框架
- 在配置类上@EnableWebSecurity开启自动配置类
- 继承WebSecurityConfigurationAdapter或者返回SecurityFilterChain
- 身份验证、密码登录、授权等操作
Spring Security和JWT联用
-
自定义JWT过滤器继承MVC的OncePerRequestFilter
-
在继承WebSecurityConfigurationAdapter的配置类中添加这个过滤器
@Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired private JwtTokenFilter jwtTokenFilter; @Override protected void configure(HttpSecurity http) throws Exception { http.csrf().disable() .authorizeRequests() .antMatchers("/public/**").permitAll() // 允许所有用户访问 /public 路径 .anyRequest().authenticated() // 其他请求需要身份验证 .and() .addFilterBefore(jwtTokenFilter, UsernamePasswordAuthenticationFilter.class); // 在 UsernamePasswordAuthenticationFilter 之前添加 JWT 过滤器 } }
Spring Boot中如何跨域
- 直接在controller上使用@CrossOrigion
- 自定义CorsFilter配置类
javaCopy codeimport org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
@Configuration
public class CorsConfig {
@Bean
public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
config.addAllowedOrigin("*"); // 允许所有来源
config.addAllowedMethod("*"); // 允许所有请求方法
config.addAllowedHeader("*"); // 允许所有请求头
source.registerCorsConfiguration("/**", config);
return new CorsFilter(source);
}
}
Spring Boot如何实现全局异常处理?
- 自定义一些异常类,加上返回状态码、返回消息的细节
- 使用@ControllerAdvice全局异常处理,使用@RestControllerAdvice【@ResponseBody+@ControllerAdvcide】
- @ExceptionHandler指定报错类型
SpringBoot如何实现定时任务?
-
@EnableScheduling开启配置
-
@scheduled(fixRate)//每毫秒执行一次
-
@Scheduled(cron)
import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @Component @EnableScheduling public class ScheduledTasks { @Scheduled(fixedRate = 5000) // 每隔5秒执行一次 public void task1() { System.out.println("Task 1 executed at " + new Date()); } @Scheduled(cron = "0 0 12 * * ?") // 每天中午12点执行 public void task2() { System.out.println("Task 2 executed at " + new Date()); } }
SpringBoot打的jar包·有什么作用?
SpringBoot打的jar包不能被引用,只能执行