一篇讲完SpringBoot

        Spring Boot是全新的框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域成为领导者。

        原来使用的Spring开发一般都会集成SpringMvc、myBatis、redis等一些框架,每个框架都有每个框架的标准(比如SpringMvc的前缀和后缀配置),几乎这些标准的实现都是在xml中配置,也就导致resources目录下一大堆的配置文件,有人就在Spring社区吐槽说你们的xml太多太恶心了,而且配置错了IDE也无法检查,只能启动了才能检查的出来。后来有人提出尝试用注解的方式来替代xml,并发现可行,于是就诞生了SpringBoot的前身,后来也就演变成SpringBoot   

       也就是说SpringBoot旨在减少xml配置(并非完全消灭),秉承开箱即用的原则就像初学java的时候写的main方法输出HelloWorld一样,你只需要编写main方法,接着打印一句话就可以了;    那么他真的有这么神奇吗?

       如果你的idea新建项目中没有

      

在Settings-->plugins-->搜索spring assistant   如果有就勾选,没有就点击

 Search in repositories  在仓库中查找

点击安装,重启Idea           到此SpringBoot插件就安装完了。

点击新建项目   

        

点击next     这个界面就是maven项目的配置,填写你的Group 和  Artifact

点击next          勾选上web模块

点击next    -->   next   -->   finish    这时候你已经完成了SpringBoot项目的创建

SpringBoot会帮我们自动下载很多依赖,需要稍微等一下   创建好之后会看到这样一个目录

然后我们新建一个controller

然后       启动DemoApplication中的main方法     (右键直接run)

访问localhost:8080/hello  注意不要加项目名称  

不需要任何xml,也不需要配置tomcat,直接就可以运行    一个字   爽

查看SpringBoot中的pom.xml文件会发现有parent标签和一个没有写version的依赖

在这篇文章中有详细介绍   https://blog.csdn.net/qq_39205291/article/details/88634077

接着查看SpringBoot启动类上面的@SpringBootApplication标签

点进去这个注解会发现     @SpringBootApplication   由@SpringBootConfiguration,@EnableAutoConfiguration,@ComponentScan三个注解构成

@SpringBootConfiguration  本质就是一个@Configuration表示这本身就是一个配置类,是Spring容器的主配置类

@EnableAutoConfiguration  自动加载配置类,使用该标签可以把符合条件的@Configuration配置类自动加载到应用中

@ComponentScan  自动扫描包注解,默认扫描该包及其子包,所以把启动类放在最外层就不需要写包的扫描范围了

SpringBoot打包

     SpringBoot运行只需要打包成一个jar包  然后使用  java -jar xxx.jar  的命令来运行

     使用  maven project 中的package命令打包

然后会在target目录下出现两个jar文件    运行第一个jar文件,访问项目测试

 

如果报错

检查项目是否有SpringBoot的maven插件

 

参数设置

    既然是main方法启动,且main方法有个args[]的参数,那么我们使用以前的方法来给SpringBoot传参也是可行的;

    SpringBoot会把传入的参数封装到ApplicationArguments对象中,这时Spring上下文中的对象,所以可以直接用 @Autowired注解来注入,然后用applicationArguments.getNonOptionArgs()来获取我们所传入的参数

     

那该怎么给args[] 设置参数值呢,首先可以用idea的  program arguments

如果打包成jar包来运行的话,可以用

运行命令后面加个 ‘空格’  然后写上参数,也是可以获取的到的。这样设置两套环境,或者输入数据库用户名密码等,都很方便

端口设置

    application.properties文件中加上   server.port=8081   就可以将项目启动端口设置为8081

                                                           server.context-path=/demo  将项目上下文路径设置为demo

    重启项目后访问http://localhost:8081/demo/hello

    https://blog.csdn.net/weixin_41997172/article/details/80537992 这里有application.properties所有的配置详细介绍

SpringBoot默认读取application.properties作为配置文件

       默认情况下读取classpath:application.properties、classpath:config/application.properties、

       项目根目录/application.properties、项目根目录/config/application.properties  这四个路径的配置文件

优先级为  项目根目录/config/application.properties > 项目根目录/application.properties > classpath:config/application.properties  > classpath:application.properties

Banner设置

     在resources目录下添加banner.txt文件,形状随意  就可以把启动时的默认图像替换掉

改为

参数属性注入

     在使用SSM框架时,我们往类中的属性注入值时使用@Value("${}")来注入

     但往往忽略了,其实Spring默认帮我们加载了属性注入器PropertySourcesPlaceholderConfigurer

     并且在applicationContext.xml中加载了app.properties文件    所以才能使用@Value("${}")来注入值

     那么在SpringBoot中同样需要这样的参数绑定     

     

首先在application.properties中添加属性   、 然后在绑定类中贴上  @ConfigurationProperties(prefix = "db")  前缀名根据自己定义

但如果使用的是DruidDataSource,无法在类上贴注解值    可以在返回Bean的方法上贴上该注解

同样可以完成注入属性的功能

application.properties中的属性也可以使用命令行方式注入

   先把application.properties中的db.属性全部注释掉

   然后使用maven package 打包一个jar包

   运行  访问   

   使用参数绑定方式运行

再次访问

热部署插件

    SpringBoot本身没有热部署的功能,在启动之后修改代码重新编译并不会马上生效,需要重启项目

    首先在项目pom.xml中添加

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-devtools</artifactId>
   <optional>true</optional>
</dependency>

然后再次修改代码,点击编译。会出现重启的状态,但是会很快,这就是SpringBoot的热部署

再次访问就是修改之后的效果。   修改完一定要先编译才有效果

其实就是重启项目,但是把不变的类一直放在内存中,只是把改变过的类重新加载了一次

static和template目录下的编译是不会触发重启的   (修改静态资源也要编译才会生效)

spring.devtools.restart.additional-exclude=public/**,views/**   编译重启检查 会排除这些目录
spring.devtools.restart.trigger-file=trigger.file   指定文件修改后才会触发重启  也基本上就是手动重启

配置 指定文件修改后才会触发重启后,每次编译不会触发重启,只有当trigger.file这个文件被修改且编译的时候才会触发重启

集成MyBatis

------------------------------------------------------------集成druidDataSource-------------------------------------------------------

SpringBoot提供了很多工具包   

名字大多为  spring-boot-starter-*   这些是springBoot自带的starter  也就是springBoot提供的支持

还有一些名字为 *-spring-boot-starter 这些是第三方工具自己整合的springBoot的starter  如  druid-spring-boot-starter

这些jar包一般包含了jar包本身的原始依赖  druid.jar   还有一个自动装配的依赖 

自动装配的依赖 

     以前我们Spring集成Druid的时候用DruidDataSource会在xml中配置一个

<bean id="com.alibaba.druid.DruidDataSource">   

      中间配置数据库连接属性

</bean>

现在就不需要配置这个xml了,因为springBoot会自动装配这个依赖,我们只需要按照SpringBoot提供的标准,在application.properties中配置连接池属性就可以了

首先导入jar包   连接池的包   驱动包  和   spring jdbc的包

<dependency>
   <groupId>com.alibaba</groupId>
   <artifactId>druid-spring-boot-starter</artifactId>
   <version>1.1.10</version>
</dependency>
<dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

然后在application.properties中配置连接池属性

spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

创建测试类,访问

然后再增加一个属性   

spring.datasource.druid.initial-size=5

再次访问


更多的druidDataSource参数  参考  https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter

-----------------------------------------------------------------集成MyBatis------------------------------------------------------------

上面已经把dataSource集成到了SpringBoot项目中,如果集成MyBatis的话还需要再

配置一个sqlSessionFactory(设置mybatis的全局配置文件路径、配置别名扫描包的路径、管理映射文件)

扫描Mapper接口位置、配置事务等;   sqlSessionFactory是springBoot默认帮我们创建出来的 不需要去管

        首先在pom.xml中加入mybatis集成springBoot的依赖包    

<dependency>
   <groupId>org.mybatis.spring.boot</groupId>
   <artifactId>mybatis-spring-boot-starter</artifactId>
   <version>1.3.2</version>
</dependency>

        设置mybatis的全局配置文件路径:  (非必须配置不需要全局setting就可以不用)

                    直接在application.properties文件中加入mybatis.config-location=classpath:mybatis-config.xml

        配置别名扫描包的路径:  (非必须配置不需要使用别名就可以不用)

                    mybatis.type-aliases-package=com.xiaoww.mybatis.mapper

       管理映射文件(mapper.xml):(非必须配置Mapper.xml和Mapper同名同包就可以不用)            

                    mybatis.mapper-locations=classpath:com/xiaoww/mybatis/mapper

       扫描Mapper接口位置:

                    成springBoot的依赖包    在springBoot启动类中加上@MapperScan("com.xiaoww.mybatis.mapper")

      需要注意Mapper接口位置只能扫描mapper包而不能扫描mapper的上级包,因为@MapperScan注解扫描到的所有接口都会使用动态代理创建类,那么也会给service创建导致在spring容器中的service都会有两个Bean,启动就会报错注入XxxService失败

      配置打印sql:             

               application.properties文件logging.level.com.xiaoww.mybatis.mapper=debug设置某个包的特定日志级别

SpringBoot集成事务

      集成完mybatis做了查询操作之后,就要开始做增删改操作,那么就得提到事务

      先写个save方法来测试一下,然后故意在service中抛出一个错误

     同样的保存到了数据库中

     说明SpringBoot默认是没有事务的

     在service上贴上注解@Transactional开启事务,在springBoot启动类中贴上@EnableTransactionManagement 扫描第三方注解,就可以开启SpringBoot中的事务,再次测试,数据没有保存。

     SpringBoot会自动加载@EnableTransactionManagement注解,所以@EnableTransactionManagement可以省略

自动装配原理      

     相比XML配置来说   SpringBoot的方式让我们省去了在xml中配置各种Bean的繁琐,但是这些Bean始终是在使用之前创建出来的,那么SpringBoot是如何创建这些Bean的,根据什么方式呢;

     

首先读取所有jar包和项目中的spring.factories文件  该文件中标明了,启动哪个类来进行自动装配

然后Spring会加载这些类,而在这些类会贴上@Configuration标签标明是配置类  而且会有一个或多个@Bean标签装载Bean

静态资源

    classpath下的static是SpringBoot的默认静态资源文件放置路径,也就是说相当于webapp一样,直接可以访问的

    除了static之外,public、resources、MATE-INF/resources都可以作为静态资源路径;

    SpringBoot默认只认这几个路径,如果需要再加上多个路径就在application.properties中配置

spring.resources.static-locations = classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,classpath:/mydir/

集成FreeMarker

   由于SpringBoot对jsp支持并不好,所以动态页面模板一般会使用其他的模板,而FreeMarker就是个比较好的选择

   首先导入依赖jar包

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>

编写请求

在  classpath:templates目录下新建 freeMarker.ftl    

<h1>Hello : ${name}</h1>

就可以访问了,SpringBoot默认会设置前缀(也就是MVC中配置的/WEB-INF/views)后缀名(也就是MVC中配置的.jsp)

freeMarker默认是不能在页面中取session中的数据

在application.properties中加上

spring.freemarker.expose-session-attributes=true   这行属性就可以取session中的数据了

错误处理页面

     直接在classpath:public/error目录中定义相应的错误页面就可以了

可以使用5xx.html来匹配所有500、501、502等错误

servlet组件

     要启用servlet组件只需要在SpringBoot启动类上贴@ServletComponentScan标签就可以自动扫描该包及其子包下的servlet

文件上传

  spring.http.multipart.enabled=true          是否允许文件上传  
  spring.http.multipart.max-file-size=1MB     上传单个文件最大的size    
  spring.http.multipart.max-request-size=10MB 单次请求的最大size

跟SpringMvc上传一模一样,但是SpringBoot一般是打包成jar包运行,所以也不存在webapp目录,那么就必须指定上传图片的盘符而不能使用servletRequest.getContextPath()获取项目根路径下的某个文件夹

拦截器

  让SpringBoot启动类去继承WebMvcConfigurerAdapter重写addInterceptors方法 

使用InterceptorRegistry去注册一个拦截器对象,并设置拦截路径信息就可以了。

也可以另外新建一个类来存放拦截器注册器

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值