目录
Springboot概述
- 虽然spring的组件代码是轻量级的,但它的配置却是重量级的,要编写大量的模板化配置文件.
- 项目的依赖管理复杂,在环境搭建时,需要分析要导入大量jar坐标,而且要处理他们之间的依赖关系,一旦选错版本,就会带来不兼容问题。
Spring Boot对上述spring的缺点进行的改善和优化,基于约定优于配置的思想,简化配置,还能自动管理依赖版本,避免不兼容问题。总之我们全身心的投入到逻辑业务的代码编写中,从而大大提高了开发的效率。
特点
- 直接内嵌tomcat
- 以简化构建配置
- 尽可能的自动配置spring和第三方库
- 绝对不会生成代码,并且不需要XML配置
核心功能
起步依赖
起步依赖就是将具备某种功能的坐标打包到一起,并提供一些默认的功能。
自动配置
Spring Boot的自动配置是一个运行时(更准确地说,是应用程序启动时)的过程,考虑了众多因素,才决定Spring配置应该用哪个,不该用哪个。该过程是Spring自动完成的。
SpringBoot搭建
- 上spring官网 spring.io
- 点击quickstart
- 选择项目依赖点击生成项目
Springboot集成web组件后,内置了tomcat服务器,一个springboot应用相当于一个独立的服务,可以使用启动类中的main方法启动springboot程序.
springboot配置文件
全局配置文件
1 、application.properties文件
spring启动默认读取,属性文件格式,内容为键值对形式 server.port=8080
2、application.yml文件
代替application.properties文件
- 空格不能省略
- 以缩进来控制层级关系,只要是左边对齐的一列数据都是同一个层级的。
- 属性和值的大小写都是十分敏感的。
server:
port: 8086
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/tomorrowNews_db?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: 152475
type: com.alibaba.druid.pool.DruidDataSource
filters: stat
main:
allow-circular-references: true #允许循环依赖
mybatis:
type-aliases-package: com.ff.springboot.model
mapper-locations: classpath:mapper/*Mapper.xml
configuration:
map-underscore-to-camel-case: true
cache-enabled: true
logging:
level:
com.ff.springboot.dao: trace
file:
name: F:\\test\\logs\\log.log
注入自定义配置文件:
yaml文件更强大的地方在于,他可以给我们的实体类直接注入匹配值!
将yml中配置好的属性值注入到实体类中(person)
加入注解标签
@Component //注册bean
@ConfigurationProperties(prefix = “person”)
- 将配置文件中配置的每一个属性的值,映射到这个组件中;
- 告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定
- 参数 prefix = “person” : 将配置文件中的person下面的所有属性一一对应
spring启动流程
- 初始化spring容器,注册内置的
BeanDefinition
到容器中 - 将配置类的BeanDefinition注册到容器
- 刷新容器
springBoot启动流程
SpringBoot启动时,会构造一个SpringApplication对象,同时会进行初始化操作;构造完之后调用run(),run()执行的时候又会做一系列事情。
springboot自动配置
根据当前不同的条件判断,决定这个配置类是否生效!
springboot项目在启动时会扫描同级包下的所有类。
带有@Configuration注解标签的被视为配置类,配置类中的方法可以通过@ConfigurationProperties(prefix = "spring.datasource")
这一注解加载配置yml文件中的配置属性,再通过@Bean
标签交给spring管理,这样spring在启动的时候就会自动加载所有的配置。
自动去把第三方组件的bean装载到IOC容器里面,不需开发人员再去写bean相关配置(xml)。只需要在启动类标注@SpringbootApplication
注解就可以实现自动装配,这个注解是个复合注解,包括@ComponentScan
,@SpringBootConfiguration
,@EnableAutoConfiguration
,
@ComponentScan会扫描与该类同级的类或者同级包下的所有类
@SpringBootConfiguration,通过源码得知它是一个@Configuration,相当于之前的配置文件功能,区别在于允许自动装配
@EnableAutoConfiguration自动加载配置项的核心注解,是利用SpringFactoriesLoader
机制加载自动装配配置的,它的配置数据在spring.factories
中,这里边就包含很多配置类
最终完成对这些类的自动装配,省去了模板化配置文件的编写
springboot集成JDBC
-
导jar坐标
<!-- jdbc --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <!-- mysql --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency>
-
在yml配置文件中配置连接属性
spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/tomorrowNews_db?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai username: root password: root
-
就可以注入JdbcTemplate使用了
Spring的JdbcTemplate是自动配置的,你可以直接使用@Autowired来注入到你自己的bean中来使用
springboot整合阿里数据源
-
导jar坐标
<!-- druid --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.10</version> </dependency>
-
在yml文件中注册阿里数据库连接池
spring: datasource: type: com.alibaba.druid.pool.DruidDataSource filters: stat initialSize: 5 minIdle: 1 maxActive: 20
-
创建DruidDataSourceConfig配置类
@Configuration public class DruidDataSourceConfig { /** * 数据库连接 */ @Bean @ConfigurationProperties(prefix = "spring.datasource") public DataSource druid() { return new DruidDataSource(); } /** * sql监控,注册哪些ip可以访问druid中的sql监控功能 */ @Bean public ServletRegistrationBean druidStatViewServlet() { //ServletRegistrationBean提供类的进行注册 ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*"); //添加初始化参数:initParams //白名单: servletRegistrationBean.addInitParameter("allow", "127.0.0.1"); //IP黑名单(同时存在时,deny优先于allow) //如果满足deny,就提示:sorry,you are not permitted to view this page servletRegistrationBean.addInitParameter("deny", "127.0.0.2"); //登录查看信息的账号和密码 servletRegistrationBean.addInitParameter("loginUsername", "admin"); servletRegistrationBean.addInitParameter("loginPassword", "000"); servletRegistrationBean.addInitParameter("resetEnable", "false"); return servletRegistrationBean; } /** * */ @Bean public FilterRegistrationBean druidStatFilter() { FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter()); //添加过滤规则 filterRegistrationBean.addUrlPatterns("/*"); //添加需要忽略的格式信息 filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif," + "*.jpg,*.png, *.css,*.ico,/druid/*"); return filterRegistrationBean; } }
可通过访问 http://localhost:9999/druid/login.html对sql进行监控
SpringBoot集成mybatis
-
导jar坐标
<!-- mybatis --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.4</version> </dependency>
-
配置yml属性
mybatis: type-aliases-package: com.ff.springboot.model #别名 mapper-locations: classpath:mapper/*Mapper.xml #mapper位置 configuration: map-underscore-to-camel-case: true #驼峰映射 cache-enabled: true #二级缓存
-
在SpringbootApplication类中添加注解@MapperScan(“com.ff.springboot.dao”)
指定要变成实现类的接口所在的包,然后包下面的所有接口在编译之后都会生成相应的实现类
-
其余和之前spring相同
日志打印
-
在yml文件中配置属性
logging: level: com.ff.springboot.dao: trace file: name: F:\\test\\logs\\log.log
-
创建log4j.properties文件
log4j.rootLogger = debug,stdout,D #System out Console log4j.appender.stdout = org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target = System.out log4j.appender.stdout.layout = org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern = [%p] %d{yyyy-MM-dd HH:mm:ss,SSS} %m%n #System out File log4j.appender.D = org.apache.log4j.FileAppender log4j.appender.D = org.apache.log4j.DailyRollingFileAppender log4j.appender.D.File = F:/test/logs/log.log log4j.appender.D.Append = true log4j.appender.D.layout = org.apache.log4j.PatternLayout log4j.appender.D.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] -[%l] %m%n