2019-04-21 | spring | UNLOCK

SpringBoot学习笔记

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
@RequestMapping("/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
4
Logback: 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进行日志管理

  1. 修改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>
  2. 创建log4j.properties文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    log4j.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
2
3
4
5
6
7
8
9
10
11
<!-- 添加如下依赖,配置为开发模式,代码做了修改,不用重新运行-->
  <!-- https://mvnrepository.com/artifact/org.springframework/springloaded -->
  <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>springloaded</artifactId>
      <version>1.2.8.RELEASE</version>
  </dependency>
  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-devtools</artifactId>
  </dependency>

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有两种方式:
    1. 让启动类继承WebMvcConfigurerAdaper,重写configureMessageConverters()方法
    2. 使用@Bean注入

24. 自定义拦截器

有些时候我们需要自己配置SpringMVC而不是采用默认,比如说增加一个拦截器,这个时候就得继承WebMvcConfigurerAdaper然后重写父类中的方法进行扩展。
SpringBoot自定义拦截器实现

25. 定义全局异常处理器

利用spring aop 的思想,定义控制器通知类来作为异常处理器,如下:

1
2
3
4
5
6
7
8
9
10
11
@ControllerAdvice
public class GlobalExceptionHandler{
@ExceptionHandler(Exception.class)
@ResponseBody
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

29. SpringBoot整合jdbcTemplate

30. SpringBoot整合MyBatis,Pagehelper

31. 区分多数据源的实现

待学习后续更新

32. SpringBoot的事务管理

@Transactional

33. SpringBoot整合Mail

[]https://www.cnblogs.com/zhangyinhua/p/9277684.html(https://www.cnblogs.com/zhangyinhua/p/9277684.html)

34. SpringBoot实现文件上传以及批量文件上传

35. SpringBoot整合Redis

36. SpringBoot整合Mongodb


SpringBoot高级

  • Neo4j
  • ActiveMQ
  • RabbitMQ
  • Kafka
  • Solr
  • ElasticSearch
  • WebSocket
  • AngularJS

评论加载中