04.SpringBoot工程搭建

SpringBoot工程搭建

一、Spring与SpringBoot

1). Spring的优缺点分析

  • 优点:J2EE的轻量级替代品,通过依赖注入和面向切面实现EJB功能。
  • 缺点:xml配置时重量级,依赖版本的兼容管理

2). SpringBoot优点

  1. 入门快,不是对Spring的增强,而是一种快速使用Spring的方式。
  2. 开箱即用、无代码生成、无须xml(集成的其他技术除开),提供默认配置,可通过修改默认达到特定需求
  3. 提供了一些大型项目中常见的非功能性特性,如嵌入式服务器、安全、指标,健康检测、外部配置等

二、SpringBoot核心功能

1). 起步依赖

起步依赖本质上是一个Maven项目对象模型(Project Object Model,POM),定义了对其他库的传递依赖,这些东西加在一起即支持某项功能。简单的说,起步依赖就是将具备某种功能的坐标打包到一起,并提供一些默认的功能。

2). 自动配置

Spring Boot的自动配置是一个运行时(更准确地说,是应用程序启动时)的过程,考虑了众多因素,才决定Spring配置应该用哪个,不该用哪个。该过程是Spring自动完成的。

三、SpringBoot maven工程快速搭建

1). 添加SpringBoot的起步依赖

一部分坐标的版本、依赖管理、插件管理已经定义好,所以SpringBoot工程继承spring-boot-starter-parent后已经具备版本锁定等配置了。所以起步依赖的作用就是进行依赖的传递。

<!-- 起步依赖 -->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.1.RELEASE</version>
</parent>

<!-- 锁定JDK版本 -->
<properties>
    <java.version>1.8</java.version>
</properties>

2). 导入web依赖

SpringBoot要集成SpringMVC进行Controller的开发,所以项目要导入web的启动依赖;spring-boot-starter-web就是将web开发要使用的spring-web、spring-webmvc等坐标进行了“打包”,这样我们的工程只要引入spring-boot-starter-web起步依赖的坐标就可以进行web开发了,同样体现了依赖传递的作用。

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

3). 热部署

IDEA中不建议开启热部署

  1. 添加依赖
<!-- 热部署,idea中不建议使用,因为idea中会自动保存代码,很耗性能!Eclipse中建议使用-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
</dependency>

  1. idea配置
    1. File -> Settings... -> Compiler -> 勾选 Build project automatically
    2. 按下组合快捷键:Shift Ctrl Alt / -> Registry - > 勾选 compiler.automake.allow.when.app.running

4). 编写SpringBoot引导类

引导类的目的是快速启动项目,是项目运行的入口,其他的所有类都得放在与引导类同级目录或者同级目录的子包下!

  • 引导类与其他组件的关系
    • src/main/java
      • com/lingting
        • Application 引导类
        • controller/UserController 控制层
        • service/UserService... 服务层
        • ...
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/** SpringBoot 启动类;
 *      @SpringBootApplication:等同于下面三个配置的总合
 *          @Configuration: 等同于@SpringBootConfiguration,用于定义一个配置类
 *          @EnableAutoConfiguration :Spring Boot会自动根据你jar包的依赖来自动配置项目。
 *          @ComponentScan: 告诉Spring 哪个packages 的用注解标识的类 会被spring自动扫描并且装入bean容器。
 *      可以配置初始化的一些bean;
 * */

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class);
    }
}

5). 其他组件

这里以Controller组件为例

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping("/info")
    public List<User> getInfo() {
        return userService.findAll();
    }
}

6). 【了解】idea快速搭建SpringBoot的第二种方式

File -> New -> Module... -> Spring Initializr ...

四、SpringBoot的配置文件

SpringBoot配置信息的查询 : https://docs.spring.io/spring-boot/docs/2.0.1.RELEASE/reference/htmlsingle/#common-application-properties

1). application.properties配置文件常用的配置摘抄

# QUARTZ SCHEDULER (QuartzProperties)
spring.quartz.jdbc.initialize-schema=embedded # Database schema initialization mode.
spring.quartz.jdbc.schema=classpath:org/quartz/impl/jdbcjobstore/tables_@@platform@@.
sql # Path to the SQL file to use to initialize the database schema.
spring.quartz.job-store-type=memory # Quartz job store type.
spring.quartz.properties.*= # Additional Quartz Scheduler properties.

# ----------------------------------------
# WEB PROPERTIES
# ----------------------------------------

# EMBEDDED SERVER CONFIGURATION (ServerProperties)
server.port=8080 # Server HTTP port.
server.servlet.context-path= # Context path of the application.
server.servlet.path=/ # Path of the main dispatcher servlet.

# HTTP encoding (HttpEncodingProperties)
spring.http.encoding.charset=UTF-8 # Charset of HTTP requests and responses. Added to
the "Content-Type" header if not set explicitly.

# JACKSON (JacksonProperties)
spring.jackson.date-format= # Date format string or a fully-qualified date format
class name. For instance, `yyyy-MM-dd HH:mm:ss`.

# SPRING MVC (WebMvcProperties)
spring.mvc.servlet.load-on-startup=-1 # Load on startup priority of the dispatcherservlet.
spring.mvc.static-path-pattern=/** # Path pattern used for static resources.
spring.mvc.view.prefix= # Spring MVC view prefix.
spring.mvc.view.suffix= # Spring MVC view suffix.

# DATASOURCE (DataSourceAutoConfiguration & DataSourceProperties)
spring.datasource.driver-class-name= # Fully qualified name of the JDBC driver. Auto-
detected based on the URL by default.
spring.datasource.password= # Login password of the database.
spring.datasource.url= # JDBC URL of the database.
spring.datasource.username= # Login username of the database.

# JEST (Elasticsearch HTTP client) (JestProperties)
spring.elasticsearch.jest.password= # Login password.
spring.elasticsearch.jest.proxy.host= # Proxy host the HTTP client should use.
spring.elasticsearch.jest.proxy.port= # Proxy port the HTTP client should use.
spring.elasticsearch.jest.read-timeout=3s # Read timeout.
spring.elasticsearch.jest.username= # Login username.
  • 常用配置
server.port=80
server.servlet.context-path=dev

2). 其他配置文件格式支持

加载顺序如下,靠后的(优先级包)配置如果有重的,会覆盖靠前的,

  1. **/application*.yml
  2. **/application*.yaml 与 .yml一样的格式,只是后缀名不同而已
  3. **/application*.properties

3). yml配置文件语法

YML:YAML(YAML Aint Markup Language)文件是以数据为核心的,比传统的xml方式更加简洁。YML文件的扩展名可以使用.yml或者.yaml;以空格缩进标志代码块,和python的语法思想类似键值对中的冒号“:”后面必须有一个空格

  1. 普通数据
name: lingting
  1. 配置对象/Map数据
# server配置
server:
  port: 80
  servlet:
    context-path: /

# 行内配置【很少使用】
# myserver: {port: 80, servlet: {context-path: /sb}}
  1. 配置集合(普通字符串)
# 配置数据、集合(普通字符串)
# mycity: [beijin,tianjin]
city:
  - beijing
  - tianjin
  - chongqing
  - shanghai
  1. 配置集合(对象数据)
# 配置数据、集合(对象数据)
# mystudent: [{name: tom, age: 18, addr: chengdu},{name: jury, age: 16, addr: chognqing}]
student:
  list:
    - name: tom
      age: 18
      addr: chengdu
    - name: jury
      age: 16
      addr: chognqing

4). yml配置文件辅助配置

<!-- 【可选,辅助功能!】配置一个执行器,当项目中有注解
@ConfigurationProperties(prefix = "xxx")
时,在配置相关的yml等配置文件的"xxx"前缀对应的配置时,
idea会有相应的配置提示
-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

五、配置文件与配置类的属性映射方式

1). 使用@Value

例如

  • application.properties配置如下:
person:
    name: zhangsan
    age: 18
  • 或者,application.yml配置如下:
person:
    name: zhangsan
    age: 18
  • bean中 代码
@Value("${person.name}")
private String name;

@Value("${person.age}")
private Integer age;

2). @ConfigurationProperties

使用的配置案例如上

  • bean中的写法
@RestController
@ConfigurationProperties(prefix = "person")
public class QuickStartController {

    private String name;
    private Integer age;

    @RequestMapping("/quick")
    public String quick(){
        return "springboot 访问成功! name="+name+",age="+age;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}
  • 补充
IDEA根据maven archetype的本质,其实是执行mvn archetype:generate命令,该命令执行时,需要指定一
个archetype-catalog.xml文件。该命令的参数-DarchetypeCatalog,可选值为:remote,internal  ,local等,
用来指定archetype-catalog.xml文件从哪里获取。默认为remote,即从
http://repo1.maven.org/maven2/archetype-catalog.xml路径下载archetype-catalog.xml文件。
http://repo1.maven.org/maven2/archetype-catalog.xml 文件约为3-4M,下载速度很慢,导致创建过程卡住。

-DarchetypeCatalog=internal
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,830评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,992评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,875评论 0 331
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,837评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,734评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,091评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,550评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,217评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,368评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,298评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,350评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,027评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,623评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,706评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,940评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,349评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,936评论 2 341

推荐阅读更多精彩内容