SpringBoot总结(一)

快速创建一个SpringBoot的项目

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.slc</groupId>
    <artifactId>spring-boot-01-helloworld-quick</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>spring-boot-01-helloworld-quick</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <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>
        <!--导入配置文件的处理器,在导入文件的时候就会有提示-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

也可以利用idea进行创建

yml的格式与语法

yml是用来表示配置文件的一种格式,非常人性化

(1)基本的语法:
  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进时不允许使用Tab键,只允许使用空格。
  • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
(2)支持数据结构主要有三种
  • 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)

  • 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)

  • 纯量(scalars):单个的、不可再分的值

SpringBoot中的@ConfigurationProperties和@value

@value:单个进行绑定,不支持松散绑定,支持SPEL,不支持JRS303数据校验,不支持复杂类型例如Map。
@ConfigurationProperties:批量的注入属性,支持松散绑定(lastName 或last_name),不支持,支持JRS303数据校验(例如@Email),支持复杂类型的赋值。

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;

import javax.validation.constraints.Email;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @author kiosk 用来与yml进行绑定
 */
@Component
@ConfigurationProperties(prefix = "person")
@Validated
public class Person {
//    @Value("${person.name}")
    @Email
    private String name;
//    @Value("#{10*20}")
    private Integer age;
    private boolean boss;
    private Date birthday;
    private Map<String,Object> map;
    private List<Object> list;
    private 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 getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

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

    public Dog getDog() {
        return dog;
    }

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

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

server.port=9090
person.name=张三
person.birthday=2019/2/24
person.boss=true
person.dog.name=С¹·
person.list=a,b,c
person.map.id=20
person.map.id2=30

SpringBoot实现热部署的方式

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <fork>true</fork>
                </configuration>
            </plugin>
        </plugins>
    </build>
     <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>

application.properties

spring.thymeleaf.cache=false
# 设置开启热部署
spring.devtools.restart.enabled=true
# 页面不加载缓存,修改时生效
spring.freemarker.cache=false

@PropertiesSource与@ImportResource

@PropertiesSource :可以不用使用全局的配置文件
例如:

person.name=张三
person.birthday=2019/3/10
person.boss=true
person.dog.name=000000000000
person.list=a,b,c
person.map.id=20
person.map.id2=30

然后再相应的配置的类上写以下的注解

@Component
@PropertySource(value = {"classpath:person.properties"})
@Validated
//@ConfigurationProperties(prefix = "person")
public class Person {
//    @Value("${person.name}")
//    @Email
    private String name;
//    @Value("#{10*20}")
    private Integer age;
    private boolean boss;
    private Date birthday;
    private Map<String,Object> map;
    private List<Object> list;
    private 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 getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

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

    public Dog getDog() {
        return dog;
    }

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

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

@ImportResource的使用的方法
(1)编写一个xml的文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="service" class="com.slc.springboot01helloworldquick.service.HelloService">

</bean>
</beans>

添加注解



@ImportResource(locations = {"classpath:beans.xml"})
@SpringBootApplication
public class SpringBoot01HelloworldQuickApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringBoot01HelloworldQuickApplication.class, args);
    }

}


(2)SpringBoot推荐的是使用注解的方式
写一个利用注解进行配置的类

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

/**
 * 指名当前类为一个配置类
 */
@Configuration
public class MyappConfig {
    /**
     * 将方法的返回值添加在容器中
     * 容器中的组件默认的id为方法名
     * @return
     */
    @Bean
    public HelloService helloService(){
        System.out.println("配置类@Bean给容器添加组件了");
      return new HelloService();
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_40843624/article/details/87796884