Springboot01_入门详解

一、概述

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:可以批量获取值

四、springboot+mybaits+thymeleaf

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容