SpringBoot工程搭建
一、Spring与SpringBoot
1). Spring的优缺点分析
- 优点:J2EE的轻量级替代品,通过依赖注入和面向切面实现EJB功能。
- 缺点:xml配置时重量级,依赖版本的兼容管理
2). SpringBoot优点
- 入门快,不是对Spring的增强,而是一种快速使用Spring的方式。
- 开箱即用、无代码生成、无须xml(集成的其他技术除开),提供默认配置,可通过修改默认达到特定需求
- 提供了一些大型项目中常见的非功能性特性,如嵌入式服务器、安全、指标,健康检测、外部配置等
二、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中不建议开启热部署
- 添加依赖
<!-- 热部署,idea中不建议使用,因为idea中会自动保存代码,很耗性能!Eclipse中建议使用-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
- idea配置
- File -> Settings... -> Compiler -> 勾选 Build project automatically
- 按下组合快捷键:
Shift Ctrl Alt /
-> Registry - > 勾选 compiler.automake.allow.when.app.running
4). 编写SpringBoot引导类
引导类的目的是快速启动项目,是项目运行的入口,其他的所有类都得放在与引导类同级目录或者同级目录的子包下!
- 引导类与其他组件的关系
- src/main/java
- com/lingting
- Application 引导类
- controller/UserController 控制层
- service/UserService... 服务层
- ...
- com/lingting
- src/main/java
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). 其他配置文件格式支持
加载顺序如下,靠后的(优先级包)配置如果有重的,会覆盖靠前的,
**/application*.yml
-
**/application*.yaml
与 .yml一样的格式,只是后缀名不同而已 **/application*.properties
3). yml配置文件语法
YML:YAML(YAML Aint Markup Language)文件是以数据为核心的,比传统的xml方式更加简洁。YML文件的扩展名可以使用.yml或者.yaml;以空格缩进标志代码块,和python的语法思想类似键值对中的冒号“:”后面必须有一个空格
- 普通数据
name: lingting
- 配置对象/Map数据
# server配置
server:
port: 80
servlet:
context-path: /
# 行内配置【很少使用】
# myserver: {port: 80, servlet: {context-path: /sb}}
- 配置集合(普通字符串)
# 配置数据、集合(普通字符串)
# mycity: [beijin,tianjin]
city:
- beijing
- tianjin
- chongqing
- shanghai
- 配置集合(对象数据)
# 配置数据、集合(对象数据)
# 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