1. SpringBoot介绍:
随着动态语言的流行(Ruby,Groovy,Node.js),java的开发显得格外的笨重,繁多的配置,地下的开发效率,复杂的部署流程以及第三方技术集成难度大。
在上述环境下,SpringBoot应运而生。它使用”习惯优于配置”的理念让项目快速运行起来,使用SpringBoot很容易创建一个独立运行(运行jar,内嵌Servlet容器)准生产级别的基于Spring框架的项目,使用SpringBoot可以不用或只需要很少的配置。
2. SpringBoot的核心特点:
- 可以以jar包的形式独立运行,运行一个SpringBoot项目只需要通过java -jar xx.jar来运行。
- 内嵌Servlet容器,SpringBoot可以选择Tomcat,Jetty或者Undertow,这样我们无须以war包形式部署项目
- 简化Maven配置,SpringBoot提供了一系列的starter pom来简化Maven的依赖加载
- SpringBoot会根据在类路径的jar包,类,为jar包中的类自动配置bean,这样就极大的减少了我们要使用的配置
- SpringBoot提供了基于http,ssh,telnet对运行时的项目进行监控
- 不借助于代码生成来实现,而是通过条件注解来实现,这也是spring4.x的新特性,不需要任何的xml配置即可实现Spring的所有配置
3. 初始化SpringBoot项目
Pom.xml添加父工程的依赖,管理所有jar包版本,添加spring-boot-starter-web的子依赖(不需要提供版本号),使用@EnableAutoConfiguration注解开启自动配置(不要任何xml文件),通过普通的main入口函数启动SpringApplication.run()
4. 自动配置
@EnableAutoConfiguration:启用自动配置,改注解会是SpringBoot根据项目依赖的jar包自动配置项目的配置项。例如:我们添加了spring-boot-starter-web的依赖,项目中也就会引入SpringMVC的依赖,Spring Boot就会自动配置Tomcat和SpringMVC。可以从自动导入spring-boot-autoconfigure-x.x.x.jar包中查看自动配置的内容。如果需要关闭某默认配置,则可以在注解中添加exclude={xxxAutoConfiguration.class}
5.全局配置文件
SpringBoot项目改变默认配置则使用一个全局的配置文件application.properties或者是aplication.yml,在resources目录下或者类路径下的/config下,一般我们放到resources下。可修改的配置如下1
2
3
4
5#BANNER
#LOGGING
#AOP
#AUTO-CONFICURATION
....
6.starter pom
SpringBoot为我们提供了企业级开发绝大多数场景的start pom,只要使用了应用场景所需的starter pm,相关的技术配置将会消除,就可以得到SpringBoot为我们提供的自动配置Bean.
https://blog.csdn.net/u010919351/article/details/80238579
7.读取自定义配置
- 在application.properties中自定义属性,例如book.author=zs
- 使用@Value(“${book.author}”)获取自定义属性的值
8. 类型安全的配置
使用@Value注入每个自定义配置在项目中显得麻烦,当自定义属性很多时需要注入很多次
SpringBoot还提供了基于类型安全的配置方式,通过@ConfigurationProperties将properties中的属性和一个Bean的属性关联,从而实现类型安全的配置
- 在application.properties文件中自定义属性,例如book.author=zs
- @ConfigurationProperties(prefix=”book”)
- 属性不需要添加注解,但是需要生成get/set方法
9.Profile配置
Profile是针对不同的环境对不同的配置提供支持的,全局Profile配置使用的application-*.properties(application-prod.properties,application-sit.properties,application-dev.properties)
通过application.properties中设置spring.profiles.active=prod来指定活动那个的Profile
10.自动配置的原理
从SpringApplication类中得知,初始化方法initialize(),通过读取spring.factories获取需要自动配置类的包名和类名(XXAutoConfiguration)并进行实例化,在实例化的同时进行加载Properties配置类(进一步加载同目录下的XXProperties),默认Properties配置类前使用@ConfigurationProperties(prefix=””)进行类型安全的配置,如果我们修改了全局配置文件也就修改了配置类的属性,否则就是默认配置
11.创建父工程
父工程对jar进行了管理,那么子工程就不要增加依赖,所以可以提取出共有的springboot的依赖
12.SpringBoot整合测试:
- 添加依赖:spring-boot-starter-test以及junit
- 在测试类上添加注解:@SpringBootTest(classes=);@Runwith(SpringJUnit4ClassRunner.class);@WebAppConfiguration
13.SpringBootApplication注解和RestController注解
- 使用单独的启动类SpringApplications,添加@EnableAutoConfiguration,并调用main方法
SpringApplication.run(SpringApplications.class.args[]) - 使用ComponentScan(‘’)扫描指定包
- 默认情况下扫描的是当前包以及当前包的子包
或者直接使用@SpringBootApplication(scanBasePackages={“”})
Controller中,使用@RequestMapping()以及@ResponseBody()则返回的REST内容,否则会进行跳转
或者如果该控制器中每个功能返回的都是Restful内容,那么就直接使用@RestController
并且支持Rest风格,例如1
2
3
4("/info/{msg}")
public String show(@PathVariable String msg){
return "show"+msg;
}
14.SpringBoot的日志管理
SpringBoot使用的默认日志框架是Logback,并用INFO级别输出到控制台:
日志输入内容元素具体如下:1
2
3
4
5
6时间日期:精确到毫秒
日志级别:ERROR,WARN,INFO,DEBUGorTRACE
进程ID
分隔符:——表示日志的开始
Logger名:通常使用源代码的类名
日志内容
日志依赖:该依赖的内容就是SpringBoot默认的spring-boot-starter-loggin.jar
日志级别从低到高:TRACE<DEBUG<INFO<WARN<ERROR<FATAL<OFF,如果设置为WARN,则低于WARN的信息都不会输出。全局配置如下:1
2
3
4
5
6
7
8#root日志以WARN级别输出
loggin.level.root=WARN(让日志只输出warn及以上级别的信息)
#springframework.web日志以DEBUG级别输出
logging.level.org.springframework.web = DEBUG】
#hibernate日志以ERROR级别输出
loggin.level.org.hibernate=ERROR
默认情况下,SpringBoot将日志输出到控制台,不会写到日志文件,如果要编写除控制台输出之外的日志文件,则需要在application.properties中设置loggin.file或logging.path属性。
15.自定义日志配置
通过系统属性和传统的SpringBoot外部配置文件依然可以很好的支持日志控制和管理。根据不同的日志系统,你可以按如下规则组织配置文件名,就能被正确加载,如下:1
2
3
4Logback: logback-spring.xml,logback-spring.groovy,logback.xml,logback.groovy
Log4j: log4j-spring.properties,log4j-spring.xml,log4j.properties,log4j.xml
Log4j2: log4j2-spring.xml,log4j2.xml
JDk:logging.properties
16.loger的使用
后续学习
17.多环境日志输出
后续更新
18. 使用log4j进行日志管理
修改pom.xml文件,过滤掉自带的spring-boot-starter-logging,然后添加spring-boot-starter-log4j依赖包
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j</artifactId>
</dependency>创建log4j.properties文件
1
2
3
4
5
6
7
8
9
10
11
12log4j.rootLogger=info,ServerDailyRollingFile,stdout
log4j.appender.ServerDailyRollingFile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.ServerDailyRollingFile.DatePattern='.'yyyy-MM-dd
log4j.appender.ServerDailyRollingFile.File=D://test/test.log
log4j.appender.ServerDailyRollingFile.layout=org.apache.log4j.PatternLayout
log4j.appender.ServerDailyRollingFile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p [%c] - %m%n
log4j.appender.ServerDailyRollingFile.Append=true
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d yyyy-MM-dd HH:mm:ss %p [%c] %m%n
19.配置为开发模式
1 | <!-- 添加如下依赖,配置为开发模式,代码做了修改,不用重新运行--> |
20. SpringBoot的web开发
SpringBoot提供了spring-boot-starter-web为Web开发予以支持,spring-boot-starter-web提供了嵌入的Tomcat以及SpringMvc的依赖,Web相关的额自动配置存储在spring-boot-autoconfigure.jar的org.springframwork.boot.autoconfigure.web下。
21. 访问静态资源
在SpringBoot中加载静态资源和在普通的web应用中不太一样,默认情况下,SpringBoot从classpath的/static,/public或/META-INF/resources文件夹或从ServletContext根目录提供静态内容
22. 自定义消息转化器(String(json消息)转换器)
只需要在类中添加消息转化器的@Bean,就会被SpringBoot自动加入到容器中(springboot默认配置了消息转换器)
23. 使用FastJson代替jackson
SpringBoot默认配置的是Jackson。
- 添加Fastjson依赖
- 配置FastJson有两种方式:
- 让启动类继承WebMvcConfigurerAdaper,重写configureMessageConverters()方法
- 使用@Bean注入
24. 自定义拦截器
有些时候我们需要自己配置SpringMVC而不是采用默认,比如说增加一个拦截器,这个时候就得继承WebMvcConfigurerAdaper然后重写父类中的方法进行扩展。
SpringBoot自定义拦截器实现
25. 定义全局异常处理器
利用spring aop 的思想,定义控制器通知类来作为异常处理器,如下:1
2
3
4
5
6
7
8
9
10
11
public class GlobalExceptionHandler{
(Exception.class)
public Map<String,Object> allExceptionHandler(Exception exception) throws Exception{
Map<String,Object> map = new HashMap<String,Object>();
map.put("errorCode",500);
map.put("errorMsg",exception.toString());
return map;
}
}
26. 异步调用
在项目中,当访问其他接口较慢或者做耗时任务时,不想程序一直卡在耗时任务上,想程序能够并行执行,我们可以使用多线程来并行的处理任务,SpringBoot提供了异步处理方式@Async。
Springboot异步调用@Async
27. SpringBoot整合Thymeleaf
https://www.cnblogs.com/jin-zhe/p/8202885.html
28. SpringBoot整合QuartZ
- http://www.imooc.com/article/281764?block_id=tuijian_wz
- https://blog.csdn.net/weixin_42071874/article/details/82983542
29. SpringBoot整合jdbcTemplate
30. SpringBoot整合MyBatis,Pagehelper
31. 区分多数据源的实现
待学习后续更新
32. SpringBoot的事务管理
@Transactional
33. SpringBoot整合Mail
34. SpringBoot实现文件上传以及批量文件上传
35. SpringBoot整合Redis
36. SpringBoot整合Mongodb
SpringBoot高级
- Neo4j
- ActiveMQ
- RabbitMQ
- Kafka
- Solr
- ElasticSearch
- WebSocket
- AngularJS
评论加载中