SpringBoot---入门和配置

Posted 大忽悠爱忽悠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot---入门和配置相关的知识,希望对你有一定的参考价值。

SpringBoot

SpringBoot的简介


微服务


环境约束


maven设置—默认使用jdk-1.8版本来编译和运行项目

	    <profile>
      <id>jdk-1.8</id>
      <activation>
	  <activeByDefault>true</activeByDefault>
        <jdk>1.8</jdk>
      </activation>
          <properties>
		  <maven.compiler.source>1.8</maven.compiler.source>
		  <maven.compiler.target>1.8</maven.compiler.target>
		  <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
		  </properties>
    </profile>

SpringBoot的hello world入门案例

1.创建maven工程

2.导入springBoot的依赖

<!--导入一个父项目-->
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.2.RELEASE</version>
  </parent>
  <dependencies>
    <!--添加starter-web模块的依赖-->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
  </dependencies>

3.编写主程序,启动springboot应用

package com;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
//来标注一个主程序类,说明这是一个springBoot应用程序
@SpringBootApplication
public class Hello {
    public static void main(String[] args)
    {
        //spring应用启动起来
        SpringApplication.run(Hello.class,args);
    }
}

4.编写相关的controller和service

package com.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class HelloController {
    @ResponseBody
    @RequestMapping("/hello")
    public String hello()
    {
        return "hello world";
    }
}

5.运行主程序测试


6.部署,将项目打包成可执行的jar包,安装插件即可

      <!-- 将应用打包成可执行jar包 -->
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>

命令行使用java -jar的命令执行这个jar包即可,记住先要来到当前jar包对应的目录,通过cd 目录路径–》来到对应目录


Hello World探究

POM文件

父项目(父依赖)


启动器



主程序类(入口类)

//来标注一个主程序类,说明这是一个springBoot应用程序
@SpringBootApplication
public class Hello {
    public static void main(String[] args)
    {
        //spring应用启动起来
        SpringApplication.run(Hello.class,args);
    }
}


下面是@SpringBootApplication个注解的内部信息:

下面解释这里面的组合注解的意思:

注意: springboot的包扫描底层原理


底层的@import注解,会帮我们导入非常多的配置类,例如:实现aop功能的配置类,实现批处理的…




使用Spring Initializer快速创建SpringBoot项目

在控制类上可以使用@RestController替换@ResponseBody和@Controller注解

//这个类的所有方法返回的数据直接写给浏览器(如果是对象转为json数据)
/*@ResponseBody
@Controller*/
@RestController//替换上面两个注解
public class helloController {
     @RequestMapping("/hello")
    public String hello()
     {
         return "大忽悠";
     }
}

配置文件

SpringBoot全局配置文件的名字是固定的application,但是格式可以是properties或者yml(yaml)


yaml配置文件



YAML基本语法

1.基本语法

2.值的写法

字面量: 普通的值(数组,字符串,布尔)

对象,Map(属性和值)(键值对)

数组(List,Set)


YAML配置文件注入组件

yaml:

server:
  port: 8081



person:
  name: 大忽悠
  age: 18
  boss: false
  birth: 2002/1/2
  maps: {k1: v1,k2: 12}
  lists:
    - 历史
    - 语文
    - 数学
  dog:
    name: 小狗
    age: 1



将配置文件中配置的每一个属性的值,映射到这个组件中;

@ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中的相关的配置进行绑定

prefix = “person”:配置文件中哪个下面的所有属性进行一一映射

只有这个组件是容器中的组件,才能使用容器中提供的@ConfigurationProperties功能

peo类:

/*
* 将配置文件中配置的每一个属性的值,映射到这个组件中
* @ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中的相关的配置进行绑定
* prefix = "person":配置文件中哪个下面的所有属性进行一一映射
* 只有这个组件是容器中的组件,才能使用容器中提供的@ConfigurationProperties功能
* */
@Controller
@ConfigurationProperties(prefix = "person")
public class peo
{
    private  String name;
    private  Integer age;
    private  Boolean boss;
    private Date birth;

    private Map<String,Object> maps;
    private List<Object> lists;
    private  Dog dog;

    @Override
    public String toString() {
        return "peo{" +
                "name='" + name + '\\'' +
                ", age=" + age +
                ", boss=" + boss +
                ", birth=" + birth +
                ", maps=" + maps +
                ", lists=" + lists +
                ", dog=" + dog +
                '}';
    }

    public String getName() {
        return name;
    }

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

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Boolean getBoss() {
        return boss;
    }

    public void setBoss(Boolean boss) {
        this.boss = boss;
    }

    public Date getBirth() {
        return birth;
    }

    public void setBirth(Date birth) {
        this.birth = birth;
    }

    public Map<String, Object> getMaps() {
        return maps;
    }

    public void setMaps(Map<String, Object> maps) {
        this.maps = maps;
    }

    public List<Object> getLists() {
        return lists;
    }

    public void setLists(List<Object> lists) {
        this.lists = lists;
    }

    public Dog getDog() {
        return dog;
    }

    public void setDog(Dog dog) {
        this.dog = dog;
    }
}

导入配置文件处理器的依赖,这样对应组件和配置文件进行绑定就会有提示,且打包时排除对应的依赖


springboot的注释配置处理器没有在类路径下找到,需要导入配置文件处理器的依赖

        <!-- 导入配置文件处理器,配置文件进行绑定就会有提示-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
 <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.springframework.boot</groupId>
                            <artifactId>spring-boot-configuration-processor</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
</build>

SpringBoot单元测试刚才的注入结果

如果要完成对应类属性的注入,那么对应的类要提供set方法

@RunWith(SpringRunner.class)
@SpringBootTest
class SpringBootQuickStartOneApplicationTests {
    @Autowired
    peo people;
    @Test
    void contextLoads()
    {
        System.out.println(people);
    }
}


properties配置文件编码问题

显示结果:(出现乱码问题)===》原因:idea使用的是UTF-8 而properties文件一般都是ASCALL

#配置person的值
person.name=大忽悠
person.age=18
person.birth=2002/1/2
person.maps.k1=v1
person.maps.k2=14
person.lists=1,2,3
person.dog.name=dog
person.dog.age=2

解决方案如下

结果


IDEA springboot项目中properties配置文件 {针对将对应GBK改为UTF-8并勾选转为ASCII后仍无效情况} 运行时中文乱码解决

IDEA springboot项目中properties配置文件 {针对将对应GBK改为UTF-8并勾选转为ASCII后仍无效情况} 运行时中文乱码解决


@Value注解和 @ConfigurationProperties的区别

@Value注解使用演示:

@Controller
public class peo
{
    /*
    * <bean>
       <property name="name" value="字面值/${key}从环境变量,配置文件中获取值/#{SPEL}"></property>
    * </bean>
    * */
    @Value("${person.name}")
    private  String name;
    @Value("#{11*2}")
    private  Integer age;
    @Value("true")
    private  Boolean boss;


配置文件yml还是properties他们都可以获取到值

如果我们只是需要在业务逻辑中获取一下配置文件中的值,可以使用@Value注解

如果说我们编写了一个类和配置文件进行映射,我们就直接使用 @ConfigurationProperties


对于是否支持JSR303校验的演示


SpringBoot @Vaild注解拦截不生效的问题解决

不要单独引入包,可能引入的包不全导致不生效!

直接引入SpringBoot 的starter

<!--引入JSR303校验启动器-->
        <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-validation</artifactId>
        <version>RELEASE</version>
        <scope以上是关于SpringBoot---入门和配置的主要内容,如果未能解决你的问题,请参考以下文章

springboot 入门二- 读取配置信息一

Springboot入门

SpringBoot——SpringBoot入门SpringBoot的自动配置配置文件和开发小技巧

Spring Boot入门及第一个案例

springboot入门(项目搭建及基本配置)

SpringBoot -- 概述和快速入门快速构建SpringBoot工程