Spring Boot学习笔记day01

一、Spring Boot入门

1.Spring Boot简介

在spring的基础上,对开发做了一些简化操作,不需要进行大量的配置,进一步提高了开发效率,Spring Boot并不是替代了Spring,还是需要Spring支持的。
特点:约定大于配置

2.创建一个maven工程

在pom文件导入相关依赖


org.springframework.boot</groupId>
spring‐boot‐starter‐parent</artifactId>
1.5.9.RELEASE</version>
</parent>


org.springframework.boot</groupId>
spring‐boot‐starter‐web</artifactId>
</dependency>
</dependencies>

spring-boot-starter:spring-boot场景启动器,帮我们导入了web模块正常运行所依赖的组件,Spring Boot将所有的功能场景都抽取出来,做成一个个的starters(启动器),只需要在项目里面引入这些starter
相关场景的所有依赖都会导入进来。要用什么功能就导入什么场景的启动器

编写一个主程序:

package com.txl;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
//@SpringBootApplication 来标注一个主程序类,说明这是一个Spring Boot应用
@SpringBootApplication
public class HelloWorldApplication {

    public static void main(String[] args) {

        SpringApplication.run(HelloWorldApplication.class,args);

    }
}

@SpringBootApplication用来标注主程序类,说明是一个SpringBoot应用

编写Controller:

package com.txl.springboot.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

//@Controller
//@ResponseBody
@RestController
public class HelloController {

    @RequestMapping("/hello")
    public String hello(){
        return "hello world";
    }
}

@Controller和@ResponseBody可以用@RestController代替

此时可以不用配置tomcat,直接运行主程序:
Spring Boot学习笔记day01_第1张图片
可以在pom文件添加插件,将用于打包成jar包,用命令行执行

<!‐‐ 这个插件,可以将应用打包成一个可执行的jar包;‐‐>



org.springframework.boot</groupId>
spring‐boot‐maven‐plugin</artifactId>
</plugin>
</plugins>
</build>
  • @SpringBootConfiguration:Spring Boot的配置类,标注在某个类上,表示这是一个Spring Boot的配置类;
  • @Configuration:配置类上来标注这个注解
  • @EnableAutoConfiguration:开启自动配置功能;
  • @AutoConfigurationPackage:自动配置包

二、配置文件

1.配置文件类型

SpringBoot使用一个全局的配置文件,配置文件固定为application,有properties和YAML两种格式
配置文件的作用:修改SpringBoot的默认配置

YAML以数据为中心,比xm、json等l文件更适合做配置文件
YAML:

server:
	port: 8081

xml:

<server>
<port>8081</port>
</server>

2.YAML语法

基本语法

k:(空格)v:表示一对键值对(空格必须有);
以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的,对大小写敏感
例如:

server:
	port: 8081
	path: /hello

普通的值(数字,字符串,布尔)

k: v:字面直接来写;
字符串默认不用加上单引号或者双引号;
"":双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思

name: “Rick \n Morty”
输出:Rick 换行 Morty

’’:单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据,会原原本本的输出

name: ‘Rick \n Morty’:
输出:Rick \n Morty

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

k: v:在下一行来写对象的属性和值的关系;注意缩进
对象还是k: v的方式

friends:
	lastName: Rick
	age: 20

行内写法:

friends: {lastName: Rick,age: 18}

数组(List、Set):

用- 值表示数组中的一个元素

pets:
 ‐ cat
 ‐ dog
 ‐ pig

行内写法:

pets: [cat,dog,pig]

3.配置文件注入数据

创建javaBean:

package com.txl.springboot.bean;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;

import java.util.Date;
import java.util.List;
import java.util.Map;

@Component
@EnableConfigurationProperties(Person.class)
@ConfigurationProperties(prefix = "person")
public class Person {
    private String lastName;
    private Integer age;
    private Date birth;
    private boolean boss;

    private Dog dog;
    private Map<String,Object> map;
    private List<Object> list;

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public Integer getAge() {
        return age;
    }

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

    public Date getBirth() {
        return birth;
    }

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

    public boolean isBoss() {
        return boss;
    }

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

    public Dog getDog() {
        return dog;
    }

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

    public Map<String, Object> getMap() {
        return map;
    }

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

    public List<Object> getList() {
        return list;
    }

    public void setList(List<Object> list) {
        this.list = list;
    }

    @Override
    public String toString() {
        return "Person{" +
                "lastName='" + lastName + '\'' +
                ", age=" + age +
                ", birth=" + birth +
                ", boss=" + boss +
                ", dog=" + dog +
                ", map=" + map +
                ", list=" + list +
                '}';
    }
}

导入入配置文件处理器依赖:

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

yml配置文件:

person:
  lastName: lisi
  age: 21
  birth: 1999/6/5
  boss: false
  map: {k1: v1,k2: v2}
  list:
    - rick
    - morty
  dog:
    name: 狗剩
    age: 8
@ConfigurationProperties @Value
功能 批量注入配置文件中的属性 一个个指定
松散绑定(松散语法) 支持 不支持
SpEL 不支持 支持
JSR303数据校验 支持 不支持
复杂类型封装 支持 不支持
  • 我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value;
  • 我们专门编写了一个javaBean来和配置文件进行映射,我们就直接使用@ConfigurationProperties;
  • @Validated注解用于数据校验

@PropertySource:加载指定的配置文件

@PropertySource(value = {"classpath:person.properties"})

@ImportResource:导入Spring的配置文件,让配置文件里面的内容生效,写在主类

@ImportResource(locations = {"classpath:beans.xml"})
导入Spring的配置文件让其生效

也可以不写配置文件,用配置类代替,需要在配置类上加@Configuration,在方法上加@Bean

package com.txl.springboot.config;

import com.txl.springboot.service.HelloService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


@Configuration
public class MyAppConfig {

    @Bean
    public HelloService helloService(){
        System.out.println("配置类@Bean给容器添加了组件");
        return new HelloService();
    }
}

4.配置占位符

1.随机数

${random.value}${random.int}${random.long}
${random.int(10)}${random.int}

2、占位符获取之前配置的值

如果没有,可以指定默认值

person.last-name=李狗不嗨${random.uuid}
person.age=${random.int}
person.birth=1999/6/5
person.boss=true
person.list=hello,a,c,d
person.map.k1=v1
person.map.k2=v2
person.dog.name=阿狗_${hello:hello1}
person.dog.age=7

5.profile

1.多profile文件

创建多个配置文件
Spring Boot学习笔记day01_第2张图片

我们在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml
默认使用application.properties的配置。
激活特定文件,该文件配置会生效:

spring.profiles.active=dev

2、yml支持多文档块方式

spring:
  profiles:
    active: prod
---
server:
  port: 8082
spring:
  profiles: dev
---
server:
  port: 8083
spring:
  profiles:prod

3、激活指定profile

1、在配置文件中指定 spring.profiles.active=dev
2、命令行:
java -jar spring-boot-02-config-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev;
可以直接在测试的时候,配置传入命令行参数
3、虚拟机参数;
-Dspring.profiles.active=dev

6、配置文件加载位置

springboot 启动会扫描以下位置的application.properties或者application.yml文件作为Spring boot的默认配置文

–file:./config/
–file:./
–classpath:/config/
–classpath:/
优先级由高到底,高优先级的配置会覆盖低优先级的配置;
SpringBoot会从这四个位置全部加载主配置文件;互补配置

你可能感兴趣的:(java框架,spring,boot,spring,java)