SpringBoot---入门和配置
Posted 大忽悠爱忽悠
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot---入门和配置相关的知识,希望对你有一定的参考价值。
SpringBoot
- SpringBoot的简介
- 微服务
- 环境约束
- maven设置---默认使用jdk-1.8版本来编译和运行项目
- SpringBoot的hello world入门案例
- Hello World探究
- 主程序类(入口类)
- 使用Spring Initializer快速创建SpringBoot项目
- 配置文件
- @ConfigurationProperties(prefix = "person")默认从全局配置文件中获取值,全局配置文件的名字是固定的application
- @ImportResource:导入Spring的配置文件,让配置文件中的内容生效
- SpringBoot推荐给容器中添加组件的方式,推荐使用全注解的方式
- 配置文件中的占位符
- Propfile多环境支持
- 配置文件加载位置
- 自动配置的原理(重点)
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---入门和配置的主要内容,如果未能解决你的问题,请参考以下文章