SpringBoot从介绍到各个框架的整合
1.背景:以前假如想创建一个Spring应用, 比如Spring、SpringMVC、Mybatis三大框架的整合, 我们需要一堆繁琐的步骤:maven导一堆依赖-->写一堆配置文件-->测试-->打成war包部署到Servlet容器上,可以说是相当繁琐。SpringBoot就是来简化这些步骤的。
2.SpringBoot的作用:帮助我们很快的创建一个产品级别的Spring应用,简化J2EE开发。SpringBoot会自动帮我们配置好Spring
的相关配置,因此用户可以无需去清楚Spring的配置,就可以从SpringBoot这个微小的入口打开J2EE的大门。
3.归纳一下SpringBoot的优点:
(1)快速创建独立运行的Spring项目以及与主流框架集成
(2)使用嵌入式的Servlet容器,应用无需打成WAR包跑在servlet容器上。打成Jar包,然后java -jar即可运行
(3)starters自动依赖与版本控制
(4)大量的自动配置,简化开发,也可以修改默认值
(5)无需配置XML,无代码生成,开箱即用
(6)准生产环境的运行时应用监控
(7)与云计算的天然集成
4,SpringBoot的缺点:入门容易,精通难。之所以那么说,是因为SpringBoot是基于Spring的一个再封装,如果你对Spring框架一无所知,那就做不到精通。
5.HelloWord(基于maven创建)
(1)创建一个maven工程。
(2)导入SpringBoot的依赖
(3)建一个类,在类上标注@SpringBootApplication,来告诉SpringBoot这是一个主程序类,说明这是一个SpringBoot应用
(4)再主程序类里添加main方法(idea快捷键:psvm),然后在main方法里添加SpringApplication.run(主程序类.class,args);
(5)编写相关的Controller、Service等。
(6)运行测试:主程序里直接运行main方法即可开启应用。tomcat8080端口(内置了tomcat)。
(7)部署:导入SpingBoot的Maven插件
这个插件的作用就是将应用打包成可执行的jar包。
(8)运行:java -jar命令即可启动。即使目标服务器里没有装tomcat也没问题。
5.Spring-Boot-starter(SpringBoot场景启动器):每个功能场景都有自己的starter,每个starter里面都导入了自己需要的依赖,要用什么功能就导入什么场景启动器
6.需要将所有组件都放到主配置类(@SpringBootApplication标注的类)所在包及下面所有子包里面,不然不会被扫描到Spring容器里。所有自动配置的信息(比如SpringMVC等)都配置在@SpringBootApplication注解里。
7.使用Spring Initializer快速创建SpringBoot应用:
(1)
(2)
(3)选择模块
创建完成之后主程序会自动生成好, 我们只需要写我们自己的逻辑。
resources文件目录结构:static:保存所有的静态资源(js、css、images)
templates:保存所有的模板页面,SpringBoot默认jar包嵌入式的Tomcat,默认不知处jsp页面)
可以使用模板引擎代替。
application.properties:SpringBoot的配置文件。可以在这里修改默认配置。e.g 默认tomcat不想用
8080端口了,可以在里面写上sever.port=8081
8.SpringBoot的配置
有两种全局配置文件,分别是application.properties和application.yml 文件名固定不可变.
配置文件的作用: 修改SpringBoot的自动配置默认值.
yml和xml的对比:
yml:
xml:
很明显, yml文档要比xml文档来的更加简洁.
8.1yml基本语法
普通的值 K:(空格)V 注意:这里的空格必须有. 只要是左对齐的一列数据, 都是同一层级的. 属性和值是大小写敏感的.
字符串默认不用加单引号或者双引号 ""双引号不会转义里面的特殊字符, 特殊字符会作为本身想表示的意思 例: "zhangsan /n lisi", 输出: zhangsan 换行 lisi
''单引号会转义特殊字符,特殊字符只是一个普通的字符串输出.例: "zhangsan /n lisi", 输出: zhangsan /n lisi
对象 friends:
lastName: zhangsan
age: 20
对象(行内写法) friends: {lastName: zhangsan,age: 20}
数组 用-(空格)表示数组中的一个元素 例:pets:
- cat
-dog
数组(行内写法) pets: [cat,dog]
8.2 如何在yml里面配置属性, 然后注入到bean中.
public class Person {private String lastName;private Integer age;private Boolean boss;private Date birth;private Map<String,Object> maps;private List<Object> list;private Dog dog;
定义一个Person类.
yml配置.
接下来要怎样把yml文件里面的配置信息映射到这个bean中呢?
用@ConfigurationProperties(prefix = "person") 注解, 这个注解的意义是告诉SpringBoot将本类中的所有属性和配置文件中的相关属性进行绑定
@ConfigurationProperties(prefix = "person") public class Person {private String lastName;private Integer age;private Boolean boss;private Date birth;private Map<String,Object> maps;private List<Object> list;private Dog dog;
此时IDEA会报一个提示, 没有在类路径下找到SpringBoot的配置注释处理器
只需要点击Open Documentation, 到达SpringBoot官网, 把依赖添加过来即可. 加入这个插件以后还有个好处就是在yml或者properties里配置信息的时候会有提示
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional> </dependency>
注意:这个bean必须要是Spring容器中的组件, 也就是必须加上@Component注解. 此时已经设置完毕, 可以开始进行测试.
到测试包下可以看到一个Test类, 这是SpringBoot的单元测试
注入Person,然后在控制台输出一下即可看到效果. 由此可以得出, 把一些初始化配置配置在yml里面, 修改相当方便.
当然, 我们的配置信息也可以放在application,properties当中, 语法与yml文件略有不同.
person.last-name=张三 person.age=50 person.birth=1992/06/19 person.boss=true person.dog.name=555 person.dog.age=5 person.maps.k1=v1 person.maps..k2=v2 person.list=1,2,3
插入之后执行测试, 发现有中文乱码情况. 原因: idea默认是utf-8, 而application.properties默认的不是utf-8.因此我们输入的"张三"并不是utf-8格式
解决方法:file->setting->搜索FileEncoding
这样在输入时就是utf-8格式, 然后帮我们自动转化为ascii格式让程序进行获取.
那么问题来了, application.properties和application.yml都可以进行配置, 那么谁的优先级更高呢? 博主测试了一下, 是application,properties更高! yml与properties相比较, 看上去更清晰, 更有层次感些.
用@ConfigurationProperties在注入时, 也可以进行数据验证, 在@ConfigurationProperties下面加上@Validated, 表示注入需要验证.接下来就可以在各个属性上添加不一样的格式(比如@Email)
1 @Component 2 @ConfigurationProperties(prefix = "person") 3 @Validated 4 public class Person { 5 @Email 6 private String lastName;//此时在配置文件中lastName若不是email格式,则会报错
从配置文件中注入属性值有两种方法, 一种是在类上添加@ConfigulationProperties(支持数据校验), 一种是在属性上添加@Value(不支持数据校验)
何时用何种情况:如果说我们只是在某个业务逻辑中需要获取一下配置文件中的某项值, 使用@Value
如果说我们专门编写了一个JavaBean来和配置文件进行映射, 我们就直接使用@ConfigulationProperties
那么我们所有配置Javabean的信息都配到application.yml(全局配置文件)或者application.properties(全局配置文件)真的好吗?当然不好, 这样配置文件也太大了. 我们一般把和SpringBoot无关的配置信息单独放到别的配置文件中去, 然后通过@PropertySource(value="classpath:***")来注入.
1 @Component 2 @PropertySource(value = "classpath:person.properties")//person.properties放在resources文件夹下 3 @ConfigurationProperties(prefix = "person")//这个注解不能删除, 不然无法注入, 默认为从全局配置文件中获取配置信息, 加了@PropertiesSource之后就从这个指定的配置文件中获取配置信息 4 public class Person { 5 private String lastName; 6 private Integer age; 7 private Boolean boss; 8 private Date birth; 9 10 private Map<String,Object> maps; 11 private List<Object> list; 12 private Dog dog;
在配置文件里我们还可以使用占位符${属性名},占位符里也可以添加SpringBoot提供的一些功能, 比如随机数/uuid等
1 dog: 2 name: 欢欢${person.birth} 3 age: 1 4 last-name: 一头生猛的程序猿${random.uuid}
9.Profile
为了方便我们的多环境配置, 比如测试环境/生产环境, 他们的配置信息肯定是不同的, 如何快速的切换, 就要用到我们的Profile
多profile文件模式: 我们在主配置文件编写的时候, 文件名可以是:application-{profile}.Properties/yml
例: 现在有Application.properties 设置端口8080
Application-{test}.properties 设置端口8081
Application-{product}.properties 设置端口8082
测试跑起来之后, 开启的端口为8080, 采用了默认设置
此时, 在Application.properties中添加一行 spring.profiles.active=test //激活test
执行测试发现开启的端口是8081. 由此得出, 我们可以在默认全局配置文件Application.Properties中进行灵活的切换, 缺点就是需要新建很多个profile文件(用yml支持多文档块方式即可弥补这个缺点)
yml支持多文档块方式:以yml作为主配置文件, yml内部可以分为多个文档块, 通过"---"进行划分,这样就避免了多个profile文件的创建
10.配置文件的加载位置:
SpringBoot启动会扫描以下位置的application.yml或application,properties作为Spring boot默认配置文件
file:./config/
file:./
classpath:/config/
classpath:/
优先级从上到下是从高到低, 相同的属性配置, 低优先级的会被高优先级的覆盖 ; 一些低优先级包含,高优先级不包含的则以低优先级的为准. 也就是互补配置! 默认打包只会打包类路径下的, 工程路径下的不打包.
我们还可以通过spring.config.location来改变默认的配置文件位置(应用场景: 在运维过程中,当项目已经打包, 但是想修改一些配置的时候),注意:这里也是互补配置
转载于:https://www.cnblogs.com/shenhanboBlog/p/9946946.html
SpringBoot从介绍到各个框架的整合相关推荐
- spring日志报错提醒_使用爬虫框架htmlunit整合springboot出现的一个不兼容问题
使用爬虫框架htmlunit整合springboot不兼容的一个问题 本来使用htmlunit爬虫爬取数据非常正常好用,之前一直是直接java程序或者整合Javaswing界面,都没有问题,但是后来整 ...
- 【SpringBoot应用篇】SpringBoot集成j2cache二级缓存框架
[SpringBoot应用篇]SpringBoot集成j2cache二级缓存框架 j2cache介绍 j2cache入门使用 pom application.yml caffeine.properti ...
- Springboot简单介绍
Springboot入门介绍 一.Spring框架概述 1.1 什么是Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnso ...
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
登录 | 注册 收藏成功 确定 收藏失败,请重新收藏 确定 查看所有私信查看所有通知 暂没有新通知 想要绕过微信小程序开发中的坑吗?不妨来听这个,今晚8点,1小时帮你搞定! 14小时以前 CSDN日报 ...
- [转]SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
使用SSM(spring.SpringMVC和Mybatis)已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方.之前没有记录SSM整合 ...
- 微服务架构介绍和RPC框架对比
微服务架构介绍和RPC框架对比 1.微服务架构 1.1 特征 自动化部署,端点智能化,语言和数据的去中心化控制. 1.2架构 一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中 ...
- java框架ssm整合_SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis)
使用 SSM ( Spring . SpringMVC 和 Mybatis )已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方.之前没 ...
- 三大框架题目整合考试题(含详解)
三大框架题目整合考试题(含详解) 1.在Hibernate的关联关系映射配置中,下列选项对于inverse说法错误的是(bd). (选择二项) A. inverse属性指定了关联关系中的方向 //in ...
- SpringBoot进阶教程 | 第四篇:整合Mybatis实现多数据源
这篇文章主要介绍,通过Spring Boot整合Mybatis后如何实现在一个工程中实现多数据源.同时可实现读写分离. 准备工作 环境: windows jdk 8 maven 3.0 IDEA 创建 ...
最新文章
- 基于python的开源商业软件套装 Odoo 简介
- TI C6000DSP上TCP/IP协议栈的实现
- 用到的lib、dll整理
- redis学习总结2
- WinForm sender初级应用
- 产品经理的简历怎么写?
- 2019测试指南-web应用程序安全测试(二)指纹Web应用程序
- 按字母顺序排列c语言,C语言有n个国家名,要求按字母先后顺序排列,并按升序输出。(要求:尽量使用标准字符串函数)...
- H5实现win10日历效果
- 安装虚拟机(VMware)保姆级教程(附安装包)
- 案例-使用python实现基于opencv的形状识别
- Linux如何访问网络 - 管理Linux的联网
- 活体检测——多帧深度估计防作伪
- c语言 跨子程序跳转,PLC的条件跳转,子程序调用等指令使用方法
- wgt文件怎么安装到手机_APP更新无法正确安装wgt
- 自定义Vue颜色选择器
- CentOS7的Tiger VNC设置
- C#面向对象的UML工具:StarUML介绍和入门使用
- 考研英语81经验分享
- 信息安全等级保护划分五级及等保级别适用行业...
热门文章
- SpringBoot中实现CommandLineRunner接口在项目启动后立即执行某方法
- Eclipse中安装插件时提示:No repository found containing: osgi.bundle,org.eclipse.emf,2.8.0.v20180706-1146
- Winform中设置ZedGraph鼠标悬浮显示线上的点的坐标并自定义显示的内容
- SpringBoot+thymeleaf实现文件下载(已实践,全流程)
- java游戏+弹幕_JAVA 弹幕小游戏 1.0版本
- 直播预告丨聚焦银行数字化运营体系搭建,助力银行构建核心竞争力
- 神策数据《银行4.0数字化运营体系构建的方法与实践》正式发布
- Listener(监听器)
- Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 3 ----数据访问层
- Mac下制作Ubuntu的启动U盘