SpringBoot学习笔记一——环境搭建&基础配置

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_38930706/article/details/93383074

官方网址:https://spring.io/projects/spring-boot/

简介:

Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can "just run".

We take an opinionated view of the Spring platform and third-party libraries so you can get started with minimum fuss. Most Spring Boot applications need very little Spring configuration.


Spring Boot可以轻松创建独立的,生产级的基于Spring的应用程序,您可以“直接运行”。 我们对Spring平台和第三方库有所了解,因此您可以从最小的麻烦开始。大多数Spring Boot应用程序只需要很少的Spring配置。

使用IDEA快速创建SpringBoot应用

高版本的IDEA提供SpringBoot应用快速创建的引导,相比于maven创建省去了查询依赖和创建包目录的麻烦。new -> Project... 选择Spring Initializr -> 修改Project MetaData -> 根据需要选择依赖 -> 项目起名、项目选址 -> 完成。目录结构如下图所示:

 目录结构区别传统web项目,没有WebContent目录,只有resources。次级目录static放置静态资源如html、CSS、JavaScript等;templates放置动态资源,SpringBoot不建议使用JSP,建议使用Thymeleaf。Thymeleaf依赖:

<dependency>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-thymeleaf</artifactId>  
</dependency> 

 application.properties 和 application.yml作为配置文件用来存放自定义的配置信息。

YAML语法

yaml以数据为中心区别于properties。

K:(空格)V   表示一对键值对,空格必须有。

层级关系适用空格的缩进表示。demo:
 

server:
  port: 8086
  path: /hello

字符串默认不使用引号,单双引号都有特殊作用。

name: "zhangsan /n lisi"       name: zhangsan 换行 lisi
name: 'zhangsan /n lisi'       name: zhangsan /n lisi

对象属性值的写法

friend:
    name: zhangsan
    age: 23

&行内写法:

friend: {name: zhangsan,age: 23}

数组

pets:
 - cats
 - pigs
 - dogs

##行内写法:
pets: [cats,pigs,dogs]

yaml如何映射bean

实体组件:

package com.mlgg.bean;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

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

@Component
@ConfigurationProperties(prefix = "person")
public class Person {
    private String name;
    private Integer age;
    private boolean boss;
    private Date date;

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

    public Dog getDog() {
        return dog;
    }

    public void setDog(Dog dog) {
        this.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 isBoss() {
        return boss;
    }

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

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

    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;
    }

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

狗:

package com.mlgg.bean;

public class Dog {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

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

    @Override
    public String toString() {
        return "Dog{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

yaml:

person:
  name: zhangsan
  age: 23
  boss: false
  date: 2019/7/8
  maps: {g1: lol,g2: cf,g3: dnf}
  lists: [zhangsan,lisi,wangwu]
  dog:
    name: 小狗
    age: 2

SpringBoot测试类:

package com.mlgg.springboot;

import com.mlgg.bean.Person;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class springbootTest {

    @Autowired
    Person person;

    @Test
    public void contextLoads(){
        System.out.println(person);
    }
}

结果:

Person{name='zhangsan', age=23, boss=false, date=Mon Jul 08 00:00:00 CST 2019, maps={g1=lol, g2=cf, g3=dnf}, lists=[zhangsan, lisi, wangwu], dog=Dog{name='小狗', age=2}}

 properties赋值对象

我们将yaml的person配置注释掉,改用properties赋值:

person.name=张毅飞
person.age=23
person.boss=false
person.maps.g1=lol
person.maps.g2=cf
person.maps.g3=dnf
person.date=2019/7/8
person.lists=a,b,c
person.dog.name=dog
person.dog.age=2

其他代码不变,需要注意的是IDEA中properties文件默认使用ASCII编码,IDEA默认使用utf-8,所以会造成中文乱码问题,需要修改IDEA的配置:

 @ConfigurationProperties(prefix = "person") 和Spring注解@Value的区别:

前者批量注入数值  后者单独指定;

前者支持松散语法  后者不支持;

前者不支持SpEL表达式  后者支持;

前者支持JSR303校验  后者不支持。

配置文件无论yml还是properties都可使用占位符,包括随机占位符${random.uuid}、${random.int} ... 和普通占位符

也可指定配置文件中的键来获取值如:person.dog.name=${person.name}_dog   那么person.dog.name对应   张毅飞_dog 。注意:如果取的值没有配置,那么会报错。当然我们可以给他赋值: person.dog.name=${person.name:zhangyifei}_dog 这种赋值方法甚至可以创建一个新的值比如从未定义过hello字段,我们可以这样定义: person.dog.name=${person.hello:hello}_dog。

加载指定配置文件

@ConfigurationProperties默认从全局配置文件中获取值,提取局部配置文件就需要用到另一个注解@PropertySource(value = {"classpath:person.properties","..."})用来加载指定的配置文件集。

在SpringBoot中不存在也不能识别Spring的配置文件,如何让我们手动编写的Spring配置文件生效就需要使用注解:@ImportResource 标在需要配置的类上。注解的value值和@PropertySource相似,可以读多个配置文件。

@ImportResource用来导入Spring的配置文件,让配置文件生效。

SpringBoot推荐使用全注解的方式向容器中添加组件。不推荐xml。

一个简单的Spring配置类:

package com.mlgg.config;

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

@Configuration
public class MyAppConfig {

    @Bean //将返回值添加到容器中,容器名默认使用方法名 , 即helloService
    public HelloService helloService(){
        return new HelloService();
    }
}

Profile

      Profile是Spring对不同环境配置的支持,可以通过激活、指定参数等方式快速切换,可以在生产、测试、开发环境中使用不同的配置。

可选配置文件的命名格式为:application-{profile}.properties

比如我们可以创建两种环境下的配置文件:application-product.properties 和 application-develop.properties 。

系统默认使用的配置文件是application.properties 我们需要在application.properties中添加一个键值对来确定使用哪种环境下的配置,如下选择开发环境:

spring.profile.active=develop

yml配置多环境

yml使用 “---”来将一个yml分成多个document块。我们可以在不同的document块中进行不同的配置。例子如下:

spring:
    profile:
        active:develop
---
server:
    port:8083
spring:
    profile:develop
---
server:
    port:8086
spring:
    profile:product

执行的端口为8083。

命令行激活配置:

命令行是运行时的配置。

也可以在运行jar的时候配置:

在jar的目录中启动命令行,输入命令: java -jar jar名 --spring.profile.active=develop指定为开发环境的配置。 

虚拟机配置:

配置文件加载位置和优先级

以及互补配置,运维指定配置文件,这里省略。 

添加debug=true让控制台打印debug信息。

猜你喜欢

转载自blog.csdn.net/weixin_38930706/article/details/93383074