一、简介

使用 Spring Boot 目的主要是用来简化 Spring 应用的搭建及开发过程,因为使用 Spring 及 SpringMVC 框架时需要手动配置的地方非常多(各种包之间的依赖、各种配置)。有一句话叫“约定大于配置”,即有些地方应该设置合理的默认值,减少手动配置,而使用 Spring Boot 可以让 Spring 项目只需要很少的配置就能运行。

另外 Spring Boot 内嵌了 Web 服务器 (Tomcat/Jetty) 的可执行框架,即项目不需要打成 war 包部署到 Web 服务器中,而是打成 jar 直接放到服务器运行即可(通过 java -jar xx.jar 运行)。Spring Boot 比较适合微服务部署方式,不再把一堆项目放到一个 Web 服务器下,而是每个项目独立使用一个 Web 服务器,使重启和更新都很容易。

二、创建一个 Spring Boot 的 Web 项目

首先使用 IntelliJ IDEA 创建一个项目,选择 Spring Initializr,如图:

点击 Next 后,填写项目信息,如图:

点击 Next 后,选择 Spring Boot 版本,并勾选 Web 选项,如图:

点击 Next 后,填写项目名称,点击 finish 创建。在项目中 src/main/java 目录下可以看到一个 artifactId+Application 命名规则的类,这个类是整个项目的入口类,运行它就可以启动我们的 Web 项目,如图:

在入口类中,有一个 @SpringBootApplication 注解,目的是开启 Spring Boot 的自动配置。在运行该类之前,先给我们的 Web 项目添加一个 Controller 类,以便后续访问,如图:

运行入口类启动项目,然后我们就可以通过浏览器访问了,如图:

三、使用 thymeleaf 做动态页面

Spring Boot 推荐我们使用 thymeleaf 模版完全替代 JSP,好处是可以使用后缀为 html 的页面,浏览器能直接解析它,静态运行。它使用 html 标签,只是在标签里增加额外的属性,来达到展示数据的效果。当我们创建好项目后可以看到,在 resource 目录下已经创建好了两个目录,其中 static 用来存放一些静态资源,而 templates 用来存放模版页面,如下图:

我们创建一个 html 页面,并加入以下内容:

修改 HomeController 的代码,将 @RestController 注解换为 @Controller 注解 (@RestController = @Controller + @ResponseBody),如图:

另外还需要在 pom 文件中引入 thymeleaf 依赖:

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

再次运行项目,通过浏览器访问,得到如下效果:

上述过程中我们并没有配置视图解析器,因为 Spring Boot 中有默认配置:

页面默认的映射路径为 classpath:/templates/*.html

静态资源的映射路径为 classpath:/static/

四、Spring Boot的配置文件

Spring Boot 的配置文件是 application.properties,在 src/main/resources 目录下,如图:

除了此文件外 Spring Boot 也支持 yaml 语言的配置文件 application.yml,下面以 application.properties 为例来进行配置(点击查看官方 application-properties 配置文档)。

1、修改端口和访问路径

server.context-path=/test
server.port=8081

2、日志配置

Spring Boot 默认使用 Logback 日志框架,我们可以手动配置日志级别级日志输出位置:

logging.file=/home/workspace/log.log
logging.level.org.springframework.web=debug

3、Profile配置

我们在 src/main/resources 目录下创建两个文件:application-dev.properties 和 application-prod.properties,分别用来表示开发环境和生存环境的配置,然后在 application.properties 中设置 spring.profiles.active 指定使用哪个 Profile,如使用开发环境的配置:

spring.profiles.active=dev

4、常规属性值配置

在配置文件中进行如下配置:

tyh.name="滕云浩"
tyh.specialities="信息管理与信息系统"

并且还需要处理中文乱码问题:

server.tomcat.uri-encoding=UTF-8
spring.messages.encoding=UTF-8
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true

然后在变量中利用 @Value 注解进行注入,使用时可省略 value,如下:

@Value(value = "${tyh.name}")
private String name;
@Value("${tyh.specialities}")
private String specialities;

五、入口类简析

我们创建一个 Spring Boot 项目后会自动生成一个入口类,入口类中包含一个 main 方法,通过这个我们来启动 Web 项目,如图:

可以看到在入口类中有一个 @SpringBootApplication 注解,其源码如下:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication { /** 排除一些类,使其不会被自动配置,如 DataSource、DataSourceTransactionManager 等 */
@AliasFor(annotation = EnableAutoConfiguration.class)
Class<?>[] exclude() default {}; /** 根据类名排除一些类,使其不会被自动配置 */
@AliasFor(annotation = EnableAutoConfiguration.class)
String[] excludeName() default {}; /** 当 SpringBootApplication 启动时,会默认扫描入口类所在包及其子包,如果需要扫描其它包可以在此配置 */
@AliasFor(annotation = ComponentScan.class, attribute = "basePackages")
String[] scanBasePackages() default {}; /** 同上 */
@AliasFor(annotation = ComponentScan.class, attribute = "basePackageClasses")
Class<?>[] scanBasePackageClasses() default {}; }

[Spring] 学习Spring Boot之一:基本使用及简析的更多相关文章

  1. [原创]java WEB学习笔记109:Spring学习---spring中事物管理

    博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好 ...

  2. Spring 学习——Spring框架结构、概念

    maven项目结构 记忆:在一个项目中,project下一层级时src,也就是源文件,所有需要进行编译的文件都是在这个目录下,其实也就是这一个目录,然后向下扩展.在src目录下,存在main文件夹,里 ...

  3. 【转】Spring学习---Spring 学习总结

    什么是Spring ? Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson在其著作Expert One-On-One J2EEDev ...

  4. 【转】Spring学习---Spring IoC容器的核心原理

    [原文] Spring的两个核心概念:IoC和AOP的雏形,Spring的历史变迁和如今的生态帝国. IoC和DI的基本概念 IoC(控制反转,英文含义:Inverse of Control)是Spr ...

  5. [Spring] 学习Spring Boot之二:整合MyBatis并使用@Trasactional管理事务

    一.配置及准备工作 1.在 Maven 的 pom 文件中新增以下依赖: <dependency> <groupId>mysql</groupId> <art ...

  6. [原创]java WEB学习笔记109:Spring学习---spring对JDBC的支持:使用 JdbcTemplate 查询数据库,简化 JDBC 模板查询,在 JDBC 模板中使用具名参数两种实现

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  7. [原创]java WEB学习笔记103:Spring学习---Spring Bean配置:基于注解的方式(基于注解配置bean,基于注解来装配bean的属性)

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  8. [原创]java WEB学习笔记102:Spring学习---Spring Bean配置:bean配置方式(工厂方法(静态工厂方法 & 实例工厂方法)、FactoryBean) 全类名

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  9. [原创]java WEB学习笔记101:Spring学习---Spring Bean配置:IOC容器中bean的声明周期,Bean 后置处理器

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

随机推荐

  1. 巧用Alt 键

    1,查看表的元数据信息 在TSQL 查询编辑器中,选中一个表,如图 点击Alt+F1,就可以查看表的元数据,列的定义和ID列等 2,使用Alt批量插入逗号 在TQL语句中,有时为了使用 in 子句,必 ...

  2. 并发系列(一)-----synchronized关键字

    一 简介 说到并发不得不提的synchronized,synchronized关键字是元老级别的角色.在Java SE 1.6之前synchronized被称为是重量,在1.6之后对同步进行了一系列的 ...

  3. spring boot 2.0 源码分析(二)

    在上一章学习了spring boot 2.0启动的大概流程以后,今天我们来深挖一下SpringApplication实例变量的run函数. 先把这段run函数的代码贴出来: /** * Run the ...

  4. DevOps on AWS之Cloudformation概念介绍篇

    Cloudformation的相关概念 AWS cloudformation是一项典型的(IAC)基础架构即代码服务..通过编写模板对亚马逊云服务的资源进行调用和编排.借助cloudformation ...

  5. 通过blockchain_go分析区块链交易原理

    原文链接-石匠的Blog 1.背景 在去中心化的区块链中进行交易(转账)是怎么实现的呢?本篇通过blockchain_go来分析一下.需要进行交易,首先就需要有交易的双方以及他们的认证机制,其次是各自 ...

  6. PAT甲题题解-1001. A+B Format (20)-字符串处理,水

    计算A+B的和,并且按标准格式处理,每3个就要有个逗号 #include <iostream> #include <cstdio> #include <algorithm ...

  7. LeetCode 637. Average of Levels in Binary Tree二叉树的层平均值 (C++)

    题目: Given a non-empty binary tree, return the average value of the nodes on each level in the form o ...

  8. Sprint report

    Sprint report 一.需求分析:随着在校大学生人数的不断增加,许多高校出现了许多个校区并存的局面,并且校区之间的地理位置跨度非常大,给高校选课带来了很大的不方便,数据处理手工操作,工作量大, ...

  9. week9:个人博客作业

    团队作业(5) 以下内容多数是网上的内容,只是做了整合的过程. 要求 在PM 带领下, 每个团队深入分析下面行业的App, 找到行业的Top 5 (从下面的三个备选中,任选一个行业即可) 英语学习/词 ...

  10. 屏蔽系统热键钩子Hook程序

    在winform时候,经常需要做屏蔽系统热键: 1.屏蔽左"WIN".右"Win" 2.屏蔽Ctrl+Esc 3.屏蔽Alt+f4 4.屏蔽Alt+Esc 5. ...