美文网首页
Springboot01_入门详解

Springboot01_入门详解

作者: IT蚱蜢哥 | 来源:发表于2018-06-15 10:54 被阅读0次

    一、概述

    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

    相关文章

      网友评论

          本文标题:Springboot01_入门详解

          本文链接:https://www.haomeiwen.com/subject/krmpeftx.html