spring boot学习总结

一.如何生成一个springboot项目

通过spring官网访问https://start.spring.io/

填写groupId和ArtifactId,可以生成一个spring boot项目

spring boot学习总结

二.spring boot项目目录介绍

代码目录仍然是src/main/java 配置文件目录仍然是src/main/resources 没有了原先的applicationContext.xml,支持application.yml和application.properties,关于yml和properties的优先级后面会有介绍 日志配置文件为logback-spring.xml XXXApplication类是整个项目的启动类

三.如何启动spring boot项目

spring boot项目在构建完之后不在是目前的war包形式,而是jar包形式,大家可以通过mvn package来验证一下,所以对应启动方式也会有变化 eclipse中启动:在XXXApplication.java类中右键Debug As/Run As  Java Application即可启动 命令行启动:java –jar xxx.jar 启动命令中还可以增加参数来覆盖配置文件中配置值,会在后面介绍 问题: idea、vscode中如何启动? linux机器上如何后台进程启动?

四 .pom文件的变化

dependency中spring-boot-starter-web是必须的,删除会导致无法启动; build中plugin由原来的maven-compiler-plugin变为spring-boot-maven-plugin; dependencyManagement:相当于一个对所依赖jar包进行版本管理的管理器,如果dependencies里的dependency自己没有声明version元素,那么maven就会倒dependencyManagement里面去找有没有对该artifactId和groupId进行过版本声明,如果有,就继承它,如果没有就会报错,告诉你必须为dependency声明一个version,也就是说,可以通过dependencyManagement把核心依赖管理起来,在下面的dependency中不需要再自定义版本号。若 dependencies 中的 dependency 声明了version,则 dependencyManagement 中的声明无效

五.配置文件的介绍

spring boot不再像spring一样使用config.properties来进行配置,而是使用application.yml/application.properties进行配置,底层依赖的是spring-boot-configuration-processor,配置格式如下: server:     port: 8081(缩进必须要由,冒号后面的空格也必须要有) 相当于: <server>     <port>8081</port> </server> 如果是需要配置一个列表,则格式如下: pets:  - cat  - dog  - pig 在需要使用mybatis、mq、zk、redis、dubbo时,都可以在yml中进行配置

spring boot学习总结

读取配置文件顺序: SpringBoot配置文件默认可以放到以下目录中,可以自动读取到:     项目根目录下     项目根目录中config目录下     项目的resources目录下     项目resources目录中config目录下 如果在不同的目录中存在多个配置文件,它的读取顺序是: 1、config/application.properties(项目根目录中config目录下) 2、config/application.yml 3、application.properties(项目根目录下) 4、application.yml 5、resources/config/application.properties(项目resources目录中config目录下) 6、resources/config/application.yml 7、resources/application.properties(项目的resources目录下) 8、resources/application.yml

如果同一个目录下,有application.yml也有application.properties,默认先读取application.properties。 创建SpringBoot项目时,一般的配置文件放置在“项目的resources目录下”

使用spring.profiles.active环境属性来指定哪些配置文件处于活动状态 spring:     profiles:         active: dev 目前我们用到的yml文件是这样的,有一个通用yml文件,将所有环境都相同的配置放在通用yml文件中,然后对应每个环境有一个独立的yml文件,例如application-dev.yml,在执行启动命令的时候可以通过参数指定加载某个环境的配置文件,例如: java -jar xx.jar --spring.profiles.active=prd

在代码中获取配置文件值 方式一:通过注解获取 @Value("${sftp.url}") private String sftpUrl; 方式二:通过注入环境变量获取 @Autowired private Environment env; env.getProperty("sftp.url")

六.日志文件介绍

spring boot使用logback框架记录日志,基于slf4j,依赖spring-boot-starter-logging 日志级别为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN级别的信息不会输出

七.相关的注解

@SpringBootApplication @EnableAutoConfiguration @ComponentScan @Configuration @Bean @Value @Slf4j @ConfigurationProperties

学习了解注解的方法

按住ctrl点击@XXX,即可查看对用注解代码,例如@SpringBootApplication,可以看到如下图,

spring boot学习总结

我们需要了解每个注解的作用,才能了解@SpringBootApplication的作用 @SpringBootApplication = @SpringBootConfiguration + @EnableAutoConfiguration + @ComponentScan

@EnableAutoConfiguration,通过看EnableAutoConfiguration代码,可以看到注解@Import(AutoConfigurationImportSelector.class),借助AutoConfigurationImportSelector,@EnableAutoConfiguration可以帮助SpringBoot应用将所有符合条件的@Configuration配置(beans)都加载到当前SpringBoot创建并使用的IoC容器。 所以@EnableAutoConfiguration的含义是程序启动时,自动加载项目中的@Configuration配置

@ComponentScan是用来扫描@Service,@Repository,@Component,@Controller,最终生成IOC容器里的bean,等同于我们之前applicationContext.xml中的<context:component-scan> @ComponentScan常用参数如下: basePackages:用于指定扫包路径,basePackages={“”,“”,“”} includeFilters:包含的过滤条件, includeFilters = @Filter(type=xxx, classes={xxx.class, xxx.class}) excludeFilters:排除的过滤条件

@Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法 @Configuration注解的配置类有如下要求: @Configuration不可以是final类型; @Configuration不可以是匿名类; 嵌套的configuration必须是静态类。 @Configuration作用在类上,表示该类是一个配置类,其实就相当于一个xml配置文件,可理解为用spring的时候xml里面的<beans>标签 @Bean可理解为用spring的时候xml里面的<bean>标签

@Configuration 注解本质上还是 @Component,因此 <context:component-scan/> 或者 @ComponentScan 都能处理@Configuration 注解的类中,所有带 @Bean 注解的方法都会被动态代理,因此调用该方法返回的都是同一个实例。 虽然Component注解也会当做配置类,但是并不会为其生成CGLIB代理Class,所以在对象时执行了两次new操作,所以是不同的对象。 @Component注解的范围最广,所有类都可以注解 但是@Configuration注解一般注解在这样的类上:这个类里面有@Value注解的成员变量和@Bean注解的方法 @Configuration和@Component相同点是都是注解在类上的注解

@SpringBootApplication = @SpringBootConfiguration + @EnableAutoConfiguration + @ComponentScan @SpringBootApplication的作用是:将使用@SpringBootApplication注解的类作为spring容器(应用上下文);扫描所有的@Service,@Repository,@Component,@Controller并自动在容器中生成实例,替代了applicationContext.xml

我们现有项目打印日志都是如何声明log对象的? private final Log logger = LogFactory.getLog(getClass()); logger.info/error... 在spring boot项目中,通过引用 <dependency>     <groupId>org.projectlombok</groupId>     <artifactId>lombok</artifactId> </dependency> 在类上加入@Slf4j,就可以直接使用log.info/error来输出日志

有时候有这样子的情景,我们想把配置文件的信息,读取并自动封装成实体类,这样子,我们在代码里面使用就轻松方便多了,这时候,我们就可以使用@ConfigurationProperties,它可以把同类的配置信息自动封装成实体类

spring boot学习总结

spring boot学习总结