Spring Boot 的设计是为了让你尽可能快的跑起来 Spring 应用程序并且尽可能减少你的配置文件。简单来说就是SpringBoot其实不是什么新的框架,它默认配置了很多框架的使用方式,就像maven整合了所有的jar包,spring boot整合了所有的框架
SpringBoot Starter:他将常用的依赖分组进行了整合,将其合并到一个依赖中,这样就可以一次性添加到项目的Maven或Gradle构建中;
自动配置:SpringBoot的自动配置特性利用了Spring4对条件化配置的支持,合理地推测应用所需的bean并自动化配置他们;
命令行接口:(Command-line-interface, CLI):SpringBoot的CLI发挥了Groovy编程语言的优势,并结合自动配置进一步简化Spring应用的开发;
Actuatir:它为SpringBoot应用的所有特性构建一个小型的应用程序。但首先,我们快速了解每项特性,更好的体验他们如何简化Spring编程模型。
Spring Boot虽然上手很容易,但如果你不了解其核心技术及流程,所以一旦遇到问题就很棘手,而且现在的解决方案也不是很多,需要一个完善的过程。
启动类上面的注解是@SpringBootApplication,它也是 Spring Boot 的核心注解,主要组合包含了以下 3 个注解:
@SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。
@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。
@ComponentScan:Spring组件扫描。
学习Spring Boot 注解,这一篇就够了
注解 @EnableAutoConfiguration, @Configuration, @ConditionalOnClass
就是自动配置的核心,
@EnableAutoConfiguration
给容器导入META-INF/spring.factories
里定义的自动配置类。筛选有效的自动配置类。
每一个自动配置类结合对应的 xxxProperties.java
读取配置文件进行自动配置功能
在 Spring Boot 里面,可以使用以下几种方式来加载配置。本章内容基于 Spring Boot 2.0 进行详解。
1、properties文件;
2、YAML文件;
3、系统环境变量;
4、命令行参数;
等等……
我们可以在 Spring Beans
里面直接使用这些配置文件中加载的值,如:
1、使用 @Value
注解直接注入对应的值,这能获取到 Spring 中 Environment 的值;
2、使用 @ConfigurationProperties
注解把对应的值绑定到一个对象;
3、直接获取注入 Environment
进行获取;
配置属性的方式很多,Spring boot使用了一种独有的PropertySource
可以很方便的覆盖属性的值。
配置属性加载的顺序如下:
1、开发者工具 `Devtools` 全局配置参数;
2、单元测试上的 `@TestPropertySource` 注解指定的参数;
3、单元测试上的 `@SpringBootTest` 注解指定的参数;
4、命令行指定的参数,如 `java -jar springboot.jar --name="Java技术栈"`;
5、命令行中的 `SPRING_APPLICATION_JSONJSON` 指定参数, 如 `java -Dspring.application.json='{"name":"Java技术栈"}' -jar springboot.jar`
6、`ServletConfig` 初始化参数;
7、`ServletContext` 初始化参数;
8、JNDI参数(如 `java:comp/env/spring.application.json`);
9、Java系统参数(来源:`System.getProperties()`);
10、操作系统环境变量参数;
11、`RandomValuePropertySource` 随机数,仅匹配:`ramdom.*`;
12、JAR包外面的配置文件参数(`application-{
profile}.properties(YAML)`)
13、JAR包里面的配置文件参数(`application-{
profile}.properties(YAML)`)
14、JAR包外面的配置文件参数(`application.properties(YAML)`)
15、JAR包里面的配置文件参数(`application.properties(YAML)`)
16、`@Configuration`配置文件上 `@PropertySource` 注解加载的参数;
17、默认参数(通过 `SpringApplication.setDefaultProperties` 指定);
YAML是一种人类可读的数据序列化语言。它通常用于配置文件。与属性文件相比,如果我们想要在配置文件中添加复杂的属性,YAML文件就更加结构化,而且更少混淆。可以看出YAML具有分层配置数据。
YAML 现在可以算是非常流行的一种配置文件格式了,无论是前端还是后端,都可以见到 YAML 配置。那么 YAML 配置和传统的 properties 配置相比到底有哪些优势呢?
Spring Boot 推荐使用 Java 配置而非 XML 配置,但是 Spring Boot 中也可以使用 XML 配置,通过 @ImportResource
注解可以引入一个 XML 配置。
单纯做 Spring Boot 开发,可能不太容易遇到 bootstrap.properties 配置文件,但是在结合 Spring Cloud 时,这个配置就会经常遇到了,特别是在需要加载一些远程配置文件的时侯。
spring boot 核心的两个配置文件:
Spring Profiles允许用户根据配置文件(dev,test,prod等)来注册bean。因此,当应用程序在开发中运行时,
只有某些bean可以加载,而在PRODUCTION中,某些其他bean可以加载。假设我们的要求是Swagger文档仅适用于QA环境,
并且禁用所有其他文档。这可以使用配置文件来完成。Spring Boot使得使用配置文件非常简单。
application.properties 中指定端口
server.port = 8090
启动器是一套方便的依赖描述符,它可以放在自己的程序中。你可以一站式的获取你所需要的 Spring 和相关技术,而不需要到处找示例代码和依赖包。
例如,如果你想使用 Sping 和 JPA 访问数据库,只需要你的项目包含 spring-boot-starter-data-jpa
依赖项,你就可以完美进行。
实现原理点击这里
spring-boot-starter-web-services - SOAP Web Services;
spring-boot-starter-web - Web 和 RESTful 应用程序;
spring-boot-starter-test - 单元测试和集成测试;
spring-boot-starter-jdbc - 传统的 JDBC;
spring-boot-starter-hateoas - 为服务添加 HATEOAS 功能;
spring-boot-starter-security - 使用 SpringSecurity 进行身份验证和授权;
spring-boot-starter-data-jpa - 带有 Hibeernate 的 Spring Data JPA;
spring-boot-starter-data-rest - 使用 Spring Data REST 公布简单的 REST 服务;
需求一批量加载多个属性.
步骤一: 首先需要自定义外部配置文件和其中的自定义属性:
user.properties . 存放在resources目录下:
内部:
#自定义配置其他属性:
user.username=zhangsan
user.age=20
步骤二: 加载属性到程序中:
springboot 1.5版本以及之前采用:br/>
@ConfigurationProperties(prefix="user",locations={
"classpath:user.propeties"})
public class User {
private String username;
private Integer age;
get/set封装省略....
}
springboot 1.5版本以后采用如下:
@PropertySource(value ="classpath:user.properties")
@ConfigurationProperties(prefix = "user")
@Component
public class User {
private String username;
private Integer age;
get/set封装省略....
}
步骤三:
以上配置需要在main启动函数类文件上激活配置: 新版本中默认开启.
@EnableConfigurationProperties
需求二:如果加载单个属性:
步骤一:省略.如上.
步骤二:
@Value("${name}")
private String name;.
备注:以上外部文件属性加载.切记注意中文乱码问题.
首先设置我们的发布工程目录的环境变量为:PROJECT_HOME,目录为:/home/ies/prohome
比如我们的配置文件放在 $PROJECT_HOME/config目录下,名为:common.config
#redis配置
redis-ip: 192.168.22.100
redis-port: 6379
redis-maxTotal: 1000
redis-maxIdle: 1000
redis-maxWaitMillis: 10000
redis-expire-minite:1440
我们配置了redis的常用参数。
@PropertySource(value = {
"file:${PROJECT_HOME}/config/common.properties"})
public class MainApplication {
public static void main(String[] args) {
SpringApplication.run(MainApplication.class, args);
}
}
在springboot的主类中增加如上代码。
jedis:
pool:
host: ${
redis-ip}
port: ${
redis-port}
config:
maxTotal: ${
redis-maxTotal}
maxIdle: ${
redis-maxIdle}
maxWaitMillis: ${
redis-maxWaitMillis}
这样在修改相关配置时,直接修改common.properties文件即可,不要重新打jar包。
spring-boot: 默认采用Logback作为日志框架.
配置即可:
logging.file=d:/test/log.log
logging.level.org.springframework.web=DEBUG
#logging.config=classpath:logback.xml 加载单独的日志配置文件.
Spring提供了一种使用ControllerAdvice处理异常的非常有用的方法。 我们通过实现一个ControlerAdvice类,来处理控制器类抛出的所有异常。
可以兼容,使用 @ImportResource 注解导入老 Spring 项目配置文件。
Swagger被广泛用于可视化api,Swagger UI为前端开发人员提供在线沙箱环境。在本教程中,我们将使用Swagger2规范的Springfox实现。Swagger是一种工具、规范和完整的框架实现,用于生成RESTful Web服务的可视化表示。它允许文档以与服务器相同的速度更新。当通过Swagger正确定义时,使用者可以用最少的实现逻辑理解远程服务并与之交互。因此Swagger消除了调用服务时的猜测。
Spring Boot Batch提供了处理大量记录所必需的可重用功能,包括日志/跟踪、事务管理、作业处理统计信息、作业重启、作业跳过和资源管理。它还提供了更高级的技术服务和特性,通过优化和分区技术,这些特性将支持极高容量和高性能的批处理作业。无论是简单的还是复杂的,大容量批处理作业都可以以高度可伸缩的方式利用该框架来处理大量信息
缓存是本地内存的一个区域,它保存了频繁访问的数据的副本,否则获取或计算这些数据将非常昂贵。使用redis进行缓存
详情
使用过不同的starter依赖项,如spring-boot-starter-activemq依赖项、spring-boot-starter-security依赖项、spring-boot-starter-web依赖项。
WebSocket是双向的——使用WebSocket客户端或服务器都可以发起发送消息。WebSocket是全双工的——客户端和服务器之间的通信是相互独立的。单个TCP连接——初始连接使用HTTP,然后将此连接升级为基于套接字的连接。然后,这个单一连接将用于未来的所有通信轻- WebSocket消息数据交换比http轻得多。
创建类WebMvcConfigurer,实现WebMvcConfigurer接口类进行实现,代码如下:
@Configuration
public class WebMvcConfigurer implements WebMvcConfigurer {
//配置文件路径
@Value("${file.uploadFolder}")
private String uploadFolder;
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
//默认的资源映射需要填写,不然不能正常访问
registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");
//配置外部资源目录的映射,/image目录为前端访问的路径,后面配置静态资源的绝对路径
registry.addResourceHandler("/image/**").addResourceLocations("file:"+uploadFolder);
}
}
@Configuration
public class WebMvcConfigurer extends WebMvcConfigurationSupport {
/**
* 跨域访问配置接口
* @param registry
*/
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE")
.allowCredentials(true)
.allowedHeaders("*")
.maxAge(3600);
}
}
Spring Boot2.x 怎么集成kafka
Spring Boot2.x 集成 Shiro 权限框架
Spring Boot2.x 自定义Starter实例讲解
Spring Boot2.x:实现定时任务的多种方式
Spring Boot2.x:监听器使用及场景介绍
Spring Boot2.x 中的切面编程,实例场景讲解
WebMvcConfigurationSupport 重要接口的应用场景详解
Spring Boot集成spring-boot-starter-test进行单元测试
Springboot怎么使用@Slf4j注解简化日志代码
Spring Boot2.x 集成Dubbo实例讲解