SpringBoot

时间:2022-10-07 07:54:07

目录

SpringBoot项目创建

 SpringBoot项目的web应用

 配置文件

 properties

读取配置文件信息

value注解产生中文乱码 

引号的问题

 yml

yml配置对象

yml配置集合


SpringBoot可以简化Spring程序,它使用 “约定大于配置” 的理念让你的项目快速运行起来。

SpringBoot优点:

1、快速集成框架,SpringBoot提供了启动添加依赖的功能,用于秒级生成各类框架

2、内置运行容器,无需自己配置Tomcat等web容器,直接运行和部署程序

3、快速部署项目,无需外部容器即可启动并且运行项目

4、完全抛弃xml,使用注解和配置来开发

5、支持更多监控的指标

SpringBoot项目创建

使用社区版的idea来创建SpringBoot项目

1、安装Spring Assistant插件

File-》settings-》plugins-》搜索Spring Assistant插件安装

SpringBoot

2、创建SpringBoot项目:File-》new Project

SpringBoot

 选择初始化Spring服务时,如果是Default,默认从国外拉取配置,可以在custom内输入国内源来配置

SpringBoot

 SpringBoot

 3、运行项目

SpringBoot

 SpringBoot项目的web应用

Spring项目只是一个简单的java项目,不可以直接和浏览器关联进行web开发,而SpringBoot项目内置了Tomcat容器,我们可以直接进行web开发

在文件创建时生成的com.eample.demo的同级目录或者子级目录中创建类, SpringBoot项目不需要使用xml文件设置扫描路径,因为默认com.eample.demo包是扫描路径,在他外面的类是不会注册到容器的(这是SpringBoot的约定)

SpringBoot

@Controller//加五大注解之一 让这个类对象注册到Spring框架内
public class Hello {
    @ResponseBody //说明返回的是一个String类型的数据,这个数据存放在body内
    @RequestMapping("/hello")//设置路由 也就是设置url路径
    public String print() {
        return "hello SpringBoot";
    }
}

点击运行

SpringBoot

 SpringBoot

RequestMapping注解可以加到类上,也可以加到方法上

SpringBoot

 SpringBoot

 配置文件

用于配置项目中重要的数据,例如:

1、数据库连接信息(用户名,密码等)

2、项目端口

3、日志文件

4、第三方系统调用的密钥

配置文件分为两类:系统的配置文件、自定义的配置文件

配置文件的两种格式:properties和yml

properties是之前的格式,yml是对properties的升级更新

SpringBoot

SpringBoot

SpringBoot

 创建File,命名application.yml,创建yml文件

SpringBoot

 SpringBootyml和properties可以共存,但是如果更改重复,会以properties为准

同一目录下存在:application.properties和application.yml时,application.properties优先级>application.yml。

也就是说,两者同时存在时properties文件会覆盖yml文件。

properties默认没有提示,可以安装Spring Tools插件

 properties

默认格式:键值对 key=value

properties是默认不支持中文的,可以进行修改:settings->输入encoding

SpringBoot

 上述设置的是当前文件,还要设置新创建文件

SpringBoot

SpringBoot

 这时,当前项目的properties不支持中文编码的格式已经成型了,删除properties文件后重新创建,后序文件都支持中文了

读取配置文件信息

使用@value注解,@value注解使用”${}“格式读取

value注解只可以一次读取一个注解信息

SpringBoot

@Controller
public class Get {
    @Value("${server.port}")
    private int port;//读取到的配置信息 会被填充到port变量内
    private String name="servlet.port";

    @ResponseBody
    @RequestMapping("/get")
    public  String get(){
        return  name+"="+port;
    }
}

value注解产生中文乱码 

SpringBoot

@Controller
public class Get {
    @Value("${demo.name}")
    private String demo;//读取到的配置信息 会被填充到port变量内

    @ResponseBody
    @RequestMapping(value = "/get", produces = "application/json;charset=UTF-8")//设置路径 和返回数据的格式
    public String get() {
        System.out.println(demo);
        return demo;
    }
}

发现浏览器输出和打印都是乱码,也就是说在value注解读取时发生乱码了 

SpringBoot

Spring读取application.properties中间默认编码是ISO-8859-1,如果需要中文显示,需要设置spring读取配置设置编码为UTF-8

方法1、在application.properties中添加如下配置

spring.banner.charset=UTF-8
spring.messages.encoding=UTF-8
spring.http.encoding.charset=UTF-8
spring.http.encoding.force=true
spring.http.encoding.enabled=true
server.tomcat.uri-encoding=UTF-8

然后settings-》File Encodings-》设置Transparent native-to-ascii conversion为true

SpringBoot

 重启后运行,显示中文

SpringBoot

方法2、使用PropertySource注解

在Controller类的这个位置加上
@PropertySource(value = “classpath:application.properties”,encoding = “UTF-8”)

@Controller
@PropertySource(value = "classpath:application.properties",encoding = "UTF-8")
public class Get {
    @Value("${demo.name}")
    private String demo;//读取到的配置信息 会被填充到port变量内
    @ResponseBody
    @RequestMapping(value = "/get", produces = "application/json;charset=UTF-8")//设置路径 和返回数据的格式
    public String get() {
        System.out.println(demo);
        return demo;
    }
}

方法3、直接使用yml

yml是默认支持中文的,value读取时不会引起乱码

SpringBoot

@Controller
public class Get {
    @Value("${demo2.name}")
    private String name;//读取到的配置信息 会被填充到port变量内
    @ResponseBody
    @RequestMapping(value = "/get")//设置路径 和返回数据的格式
    public String get() {
        System.out.println(name);
        return name;
    }
}

引号的问题

 SpringBoot

@Controller
public class Get {
    @Value("${Text.name1}")
    private String name1;//读取到的配置信息 会被填充到port变量内
    @Value("${Text.name2}")
    private String name2;//读取到的配置信息 会被填充到port变量内
    @Value("${Text.name3}")
    private String name3;//读取到的配置信息 会被填充到port变量内

    @ResponseBody
    @RequestMapping(value = "/get")//设置路径
    public String get() {
        System.out.println(name1);
        System.out.println(name2);
        System.out.println(name3);
        return "ok";
    }
}

SpringBoot

 也就是说

1、字符串默认不需要单引号或者双引号

2、如果没有引号或是单引号,会自动对特殊字符转义:你好 \n SpringBoot-》你好 \\n SpringBoot

让\n这个换行符转译为"\n"字符串

3、如果是双引号,不会对特殊字符转义

 yml

yml是跨语言的,java,golang,python等都可以使用yml作为配置文件

yml格式如下


key: value

中间有一个空格 

在poperties中连接数据库:

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/Infor?charsetEncoding=utf-8&&useSSL=false
spring.datasource.name=root
spring.datasource.password=123

 yml中连接数据库:

 spring:
    datasource:
      url: jdbc:mysql://127.0.0.1:3306/Infor?charsetEncoding=utf-8&&useSSL=false
      name: root
      password: 123

yml表述会比 poperties简单

另外,yml支持多种数据类型 整形,浮点型,布尔类型,NULL(使用~表示)

yml配置对象

# 配置对象
Student:
  name: 张三
  age: 10

# 或者 使用行内写法
Student1: { name: 李四 , age: 20}

使用@ConfigurationProperties注解读取信息

@Controller//在项目启动时,配置文件的读取 就已经完成了 要加入五大类注解
@ConfigurationProperties(prefix = "Student")//prefix 绑定配置信息的key
// Student是一个类,会生成一个对象,通过Student类的方法来将配置文件的属性填充入对象
public class StudentInfo {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

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

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

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
@Controller
public class GetStudent {
    //配置文件的Student已经存在了 可以根据 属性注入来获取

    @Autowired
    private StudentInfo studentInfo;

    @ResponseBody
    @RequestMapping("/student")
    public StudentInfo getStudent() {
        return studentInfo;
    }
}

SpringBoot

 报错原因:

SpringBoot要求配置文件不能使用驼峰式

SpringBoot

解决办法

在prefix中写出规范形式即可

例如:Student-》student ; Student_info->student-info

SpringBoot

 SpringBoot

 Data注解可以产生getting、setting、toString等方法

@Controller//在项目启动时,配置文件的读取 就已经完成了 要加入五大类注解
@ConfigurationProperties(prefix = "student")//prefix 绑定配置信息的key
@Data
// Student是一个类,会生成一个对象,通过Student类的方法来将配置文件的属性填充入对象
class StudentInfo {
    private String name;
    private int age;
}

yml配置集合

# 配置集合
student :
  name:
    - 张三
    - 李四
    - 王五

 或者

student3 : {name: [张三,李四,王五,糖豆] }

@PostConstruct是java5的时候引入的注解,指的是在项目启动的时候执行这个方法,也可以理解为在spring容器启动的时候执行,可作为一些数据的常规化加载,比如数据字典之类的。

被@PostConstruct修饰的方法会在服务器加载Servle的时候运行,并且只会被服务器执行一次。

@Data
@Controller
@ConfigurationProperties(prefix = "student")//根据配置信息 创建Student对象
public  class Student {
    private List<String> name;
}
@Controller
public class ListName {
    @Autowired
    private Student student;//将Student对象注入

    @PostConstruct
    public void  PostConstruct () {
        System.out.println(student.getName());
    }
}