一、概述
1.简介
1.springboot不是一个新的框架
2.springboot使用的是程序员之间的约定,遵循“约定大于配置”原则
3.springboot是一个微服务的框架
2.微服务概念
参考:
原作者博客:martinfowler ---->中文翻译
例如: 微服务微服务是2014年martin fowler在自己的个人博客中提出基本概念,是一种软件架构的风格。将之前的单体应用拆分为多个小应用。小应用之间可以互相通信。同时每个应用都是独立的个体,可以单独,分别对其进行部署。
3.常用模块
Spring Boot提供了很多”开箱即用“的依赖模块,都是以spring-boot-starter-xx作为命名的,下面列举一些常用的模块
• spring-boot-starter-logging :使用 Spring Boot 默认的日志框架 Logback。
• spring-boot-starter-log4j :添加 Log4j 的支持。
• spring-boot-starter-web :支持 Web 应用开发,包含 Tomcat 和 spring-mvc。
• spring-boot-starter-tomcat :使用 Spring Boot 默认的 Tomcat 作为应用服务器。
• spring-boot-starter-jetty :使用 Jetty 而不是默认的 Tomcat 作为应用服务器。
• spring-boot-starter-test :包含常用的测试所需的依赖,如 JUnit、Hamcrest、Mockito 和 spring-test 等。
• spring-boot-starter-aop :包含 spring-aop 和 AspectJ 来支持面向切面编程(AOP)。
• spring-boot-starter-security :包含 spring-security。
• spring-boot-starter-jdbc :支持使用 JDBC 访问数据库。
• spring-boot-starter-redis :支持使用 Redis。
• spring-boot-starter-data-mongodb :包含 spring-data-mongodb 来支持 MongoDB。
• spring-boot-starter-data-jpa :包含 spring-data-jpa、spring-orm 和 Hibernate 来支持 JPA。
• spring-boot-starter-amqp :通过 spring-rabbit 支持 AMQP。
• spring-boot-starter-actuator : 添加适用于生产环境的功能,如性能指标和监测等功能。
详情可以参照官方帮助文档:springboot1.5.9.RELEASE:using-boot
4.常用注解
Java Config 自动配置(注解)
Spring Boot 推荐采用基于 Java Config 的配置方式,而不是传统的 XML。
例如,
- @Configuration
- @Bean
- @EnableAutoConfiguration
- @CompomentScan
- @PropertySource
- @Repository
- @Service
- @RestController等。
二、入门程序
1.统一环境
1.1统一版本
- Intellij idea2017
- jdk1.8
- maven3.x
- tomcat8
- SpringBoot 1.5.xx
1.2设置idea
修改全局编码:
Settings 修改编码为UTF-8设置本地maven信息: 修改maven
2.创建项目
springboot初始化工程 项目相关设置 选择版本及初始化功能 设置本地工作空间 项目创建成功初始化结构3.pom.xml文件
初始化的pom.xml配置文件
<!--父工程-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.14.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<!--设置属性-->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<!--引用jar包-->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<!--生成jar包,可以使用jar命令启动程序-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
4.application.properties和application.yml配置文件
默认会创建application.properties文件,但是该文件下没有配置任何的内容,都是使用默认的设置。我们可以根据自己的需求进行设置:
例如:设置项目的访问路径,和端口号
#设置项目访问路径 默认:/
server.servlet-path=/sb_01
#设置新的端口号 tomcat默认:8080
server.port=8888
5.启动程序
项目会自动创建启动文件 启动程序具体内容如下:
@SpringBootApplication
public class Sb01Application {
public static void main(String[] args) {
SpringApplication.run(Sb01Application.class, args);
}
}
6.测试
在com.hizt.sb包下创建一个controller包,和一个TestContrller类
@Controller
public class TestContrller {
@RequestMapping("/test")
@ResponseBody
public Object test01(){
return "hello sprintboot....";
}
}
由于在application.properties中设置了访问路径和端口,所以直接访问:
http://localhost:8888/sb_01/test
三、springboot细节
3.1pom文件管理
在初始化的pom文件中,有一个<parent>节点,该节点主要定义版本信息,当导入其他模块的时候可以不用指定版本信息,因为springboot会自动指定默认的版本。
例如:以下指定parent 之后在引用web模块的时候不需要指定版本。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.14.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
以下不指定版本也会进行默认版本的下载:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
junit模板版本4.12
那么什么会出现这种情况呢?那是因为 springboot模板帮我们加载了,那么具体加载的版本有哪些呢?
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring‐boot‐starter‐parent</artifactId>
<version>1.5.9.RELEASE</version>
</parent>
<!-- 他的父项目是 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring‐boot‐dependencies</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath>../../spring‐boot‐dependencies</relativePath>
</parent>
<!-- 他来真正管理Spring Boot应用里面的所有依赖版本-->;
<!--具体对应的版本如下 -->
<properties>
<!-- Dependency versions -->
<hsqldb.version>2.3.6</hsqldb.version>
<htmlunit.version>2.21</htmlunit.version>
<httpasyncclient.version>4.1.3</httpasyncclient.version>
<httpclient.version>4.5.5</httpclient.version>
<httpcore.version>4.4.9</httpcore.version>
<jboss-logging.version>3.3.2.Final</jboss-logging.version>
<jboss-transaction-spi.version>7.6.0.Final</jboss-transaction-spi.version>
<jdom2.version>2.0.6</jdom2.version>
<jedis.version>2.9.0</jedis.version>
<jersey.version>2.25.1</jersey.version>
<jest.version>2.0.4</jest.version>
<jetty.version>9.4.11.v20180605</jetty.version>
<jetty-jsp.version>2.2.0.v201112011158</jetty-jsp.version>
<jetty-el.version>8.0.33</jetty-el.version>
<jms-api.version>1.1-rev-1</jms-api.version>
<jmustache.version>1.13</jmustache.version>
<jna.version>4.2.2</jna.version>
<joda-time.version>2.9.9</joda-time.version>
<jolokia.version>1.3.7</jolokia.version>
<jooq.version>3.9.6</jooq.version>
<json.version>20140107</json.version>
<jsonassert.version>1.4.0</jsonassert.version>
<json-path.version>2.2.0</json-path.version>
<jstl.version>1.2</jstl.version>
<jtds.version>1.3.1</jtds.version>
<junit.version>4.12</junit.version>
<liquibase.version>3.5.5</liquibase.version>
<log4j2.version>2.7</log4j2.version>
<logback.version>1.1.11</logback.version>
<lombok.version>1.16.22</lombok.version>
<mariadb.version>1.5.9</mariadb.version>
<mssql-jdbc.version>6.1.0.jre7</mssql-jdbc.version>
<mockito.version>1.10.19</mockito.version>
<mongodb.version>3.4.3</mongodb.version>
<mysql.version>5.1.46</mysql.version>
<narayana.version>5.5.31.Final</narayana.version>
<nekohtml.version>1.9.22</nekohtml.version>
<neo4j-ogm.version>2.1.6</neo4j-ogm.version>
<postgresql.version>9.4.1212.jre7</postgresql.version>
<querydsl.version>4.1.4</querydsl.version>
......
</properties>
修改默认版本:
其实我们可以通过pom.xml中的<properties>节点修改版本信息:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<!--修改版本为4.11-->
<junit.version>4.11</junit.version>
</properties>
修改后的junit版本
3.2 springboot主程序启动文件
/*表示这是一个springboot主程序*/
@SpringBootApplication
public class Sb01Application {
public static void main(String[] args) {
/*启动程序*/
SpringApplication.run(Sb01Application.class, args);
}
}
@SpringBootApplication源代码:
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
//表示这是springboot的配置类
@SpringBootConfiguration
//开启自动配置功能
@EnableAutoConfiguration
//组件扫描
@ComponentScan(
excludeFilters = {@Filter(
type = FilterType.CUSTOM,
classes = {TypeExcludeFilter.class}
), @Filter(
type = FilterType.CUSTOM,
classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {
@SpringBootConfiguration源代码
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
//表示该类是一个配置类,同时也是容器的一个组件@Component
@Configuration
public @interface SpringBootConfiguration {
}
@EnableAutoConfiguration 源代码
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
//自动配置包
@AutoConfigurationPackage
//将主配置类(@SpringBootApplication)所在包及所有子包所有组件扫描到Spring容器
//导入指定组件。会给容器中导入非常多的自动配置类(xxxAutoConfiguration)
@Import({EnableAutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {
三、配置文件
1.配置文件
springboot遵循的是“约定大于配置”的原则,所以很多配置信息都是由默认的配置,同时springboot也提供了可以修改默认配置的方式。
1.1默认文件名称
application.properties或者application.yml
#设置项目访问路径
server.servlet.path=/sb_01
# 更改默认端口
server.port=8888
以上是springboot定义的可以设置的属性值,具体可以参考对应版本的帮助文档:文档1.5.9
2.yaml简介及基本语法
2.1简介
YAML(YAML Ain't a Markup Language)不是一种标记语言的外语缩写 ;但为了强调这种语言以数据做为中心,而不是以置标语言为重点,而用返璞词重新命名。它是一种直观的能够被电脑识别的数据序列化格式,是一个可读性高并且容易被人类阅读,容易和脚本语言交互,用来表达资料序列的编程语言。--百度百科
2.1、基本语法
k:(空格)v:表示一对键值对(空格必须有);
以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的
#单行内容
lastname: 张三
# 加载数据源
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
password: root
username: root
属性和值也是大小写敏感;
2.2、从配置文件注入内容值
2.2.1 普通的值(数字,字符串,布尔)
k: v:字面直接来写;
字符串默认不用加上单引号或者双引号;
"":双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思
name: "zhangsan \n lisi":输出;zhangsan 换行 lisi
'':单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据
name: ‘zhangsan \n lisi’:输出;zhangsan \n lisi
2.2.2 对象和map(键值对)
k: v:在下一行来写对象的属性和值的关系;注意缩进
maps: #键值对
1001: "赵子龙"
1002: "关羽"
address: {city: "深圳",phone: 12345678} #行内样式
2.2.3 数组和集合(List,Set)
也是有两种写法:
lists: [10,20,"a","b",false]
arrays:
- "小芳"
- "小明"
- "小猪"
2.2.4综合案例
a.创建实体类
Dept.java
/**
* @Component:必须扫描到容器中才可以使用一下ConfigurationProperties注解
* @ConfigurationProperties::告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑
* prefix:指定前缀
*/
@Component
@ConfigurationProperties(prefix = "dept")
public class Dept {
private Integer deptno;
private String dname;
private String loc;
private boolean vip;
private Date birth;
private Double sal;
private Address address;
private Map<String,Object> maps;
private Set<String> sets;
private List<Object> lists;
private String[] arrays;
//get set toString()
}
Address.java
@Component
@ConfigurationProperties(prefix = "address")
public class Address {
private Integer addressId;
private String city;
private Long phone;
//get/set toString()
}
b.配置application.yml
helloword: "这都是一个意外"
dept:
deptno: 1001
dname: "zhangsan lisi"
loc: '广东 深圳'
maps: #键值对
1001: "赵子龙"
1002: "关羽"
address: {city: "深圳",phone: 12345678} #行内样式
birth: 2018/10/12
lists: [10,20,"a","b",false]
arrays:
- "小芳"
- "小明"
- "小猪"
sets: ["123","456",789]
c.编写测试类
@RunWith(SpringRunner.class)
@SpringBootTest
public class Sb01ApplicationTests {
@Autowired
Dept dept;
@Value("${helloword}")
String helloword;
@Test
public void contextLoads() {
System.out.println(dept);
System.out.println("---->"+helloword);
}
}
d.打印结果
Dept{deptno=1001, dname='zhangsan lisi', loc='广东 深圳', vip=false, birth=Fri Oct 12 00:00:00 CST 2018, sal=null, address=Address{addressId=null, city='深圳', phone=12345678}, maps={1001=赵子龙, 1002=关羽}, sets=[123, 456, 789], lists=[10, 20, a, b, false], arrays=[小芳, 小明, 小猪]}
---->这都是一个意外
2.2.5 配置提示功能
<!-- 导入配置文件处理器,拥有提示功能 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<version>2.0.0.RELEASE</version>
<optional>true</optional>
</dependency>
ps:@Value获取值和@ConfigurationProperties都可以获取值
- @Value:只能获取单个值
- @ConfigurationProperties:可以批量获取值
网友评论