springboot项目修改会自动编译吗 springboot修改配置_spring

启动器

springboot项目修改会自动编译吗 springboot修改配置_java_02

springboot项目修改会自动编译吗 springboot修改配置_spring boot_03


主程序类(入口类)

========================================================================

//来标注一个主程序类,说明这是一个springBoot应用程序
@SpringBootApplication
public class Hello {
public static void main(String[] args)
{
//spring应用启动起来
SpringApplication.run(Hello.class,args);
}
}

springboot项目修改会自动编译吗 springboot修改配置_spring_04

下面是@SpringBootApplication个注解的内部信息:

springboot项目修改会自动编译吗 springboot修改配置_后端_05

下面解释这里面的组合注解的意思:

springboot项目修改会自动编译吗 springboot修改配置_spring boot_06

springboot项目修改会自动编译吗 springboot修改配置_spring boot_07

注意: springboot的包扫描底层原理


springboot项目修改会自动编译吗 springboot修改配置_spring_08

springboot项目修改会自动编译吗 springboot修改配置_后端_09

底层的@import注解,会帮我们导入非常多的配置类,例如:实现aop功能的配置类,实现批处理的…


springboot项目修改会自动编译吗 springboot修改配置_配置文件_10

springboot项目修改会自动编译吗 springboot修改配置_java_11

springboot项目修改会自动编译吗 springboot修改配置_配置文件_12


使用Spring Initializer快速创建SpringBoot项目

===================================================================================================

springboot项目修改会自动编译吗 springboot修改配置_后端_13

在控制类上可以使用@RestController替换@ResponseBody和@Controller注解


//这个类的所有方法返回的数据直接写给浏览器(如果是对象转为json数据)

/*@ResponseBody

@Controller*/

@RestController//替换上面两个注解

public class helloController {

@RequestMapping(“/hello”)

public String hello()

{

return “大忽悠”;

}

}


配置文件

===================================================================

springboot项目修改会自动编译吗 springboot修改配置_配置文件_14

SpringBoot全局配置文件的名字是固定的application,但是格式可以是properties或者yml(yaml)



yaml配置文件


springboot项目修改会自动编译吗 springboot修改配置_spring boot_15

springboot项目修改会自动编译吗 springboot修改配置_配置文件_16


YAML基本语法


1.基本语法

springboot项目修改会自动编译吗 springboot修改配置_java_17

2.值的写法


字面量: 普通的值(数组,字符串,布尔)

springboot项目修改会自动编译吗 springboot修改配置_后端_18

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

springboot项目修改会自动编译吗 springboot修改配置_后端_19

数组(List,Set)

springboot项目修改会自动编译吗 springboot修改配置_后端_20


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 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 getLists() {
return lists;
}
public void setLists(List lists) {
this.lists = lists;
}
public Dog getDog() {
return dog;
}
public void setDog(Dog dog) {
this.dog = dog;
}
}

导入配置文件处理器的依赖,这样对应组件和配置文件进行绑定就会有提示,且打包时排除对应的依赖

springboot项目修改会自动编译吗 springboot修改配置_配置文件_21

springboot的注释配置处理器没有在类路径下找到,需要导入配置文件处理器的依赖

org.springframework.boot
spring-boot-configuration-processor
true
org.springframework.boot
spring-boot-maven-plugin
org.springframework.boot
spring-boot-configuration-processor

SpringBoot单元测试刚才的注入结果


如果要完成对应类属性的注入,那么对应的类要提供set方法

@RunWith(SpringRunner.class)
@SpringBootTest
class SpringBootQuickStartOneApplicationTests {
@Autowired
peo people;
@Test
void contextLoads()
{
System.out.println(people);
}
}

springboot项目修改会自动编译吗 springboot修改配置_java_22


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

springboot项目修改会自动编译吗 springboot修改配置_spring_23

解决方案如下

springboot项目修改会自动编译吗 springboot修改配置_spring boot_24

结果


springboot项目修改会自动编译吗 springboot修改配置_spring_25


IDEA springboot项目中properties配置文件 {针对将对应GBK改为UTF-8并勾选转为ASCII后仍无效情况} 运行时中文乱码解决

IDEA springboot项目中properties配置文件 {针对将对应GBK改为UTF-8并勾选转为ASCII后仍无效情况} 运行时中文乱码解决


@Value注解和 @ConfigurationProperties的区别


@Value注解使用演示:
@Controller
public class peo
{
/*
 

• 
• */
@Value(“${person.name}”)
private String name;
@Value(“#{11*2}”)
private Integer age;
@Value(“true”)
private Boolean boss;

springboot项目修改会自动编译吗 springboot修改配置_spring_26


springboot项目修改会自动编译吗 springboot修改配置_spring boot_27

springboot项目修改会自动编译吗 springboot修改配置_后端_28

配置文件yml还是properties他们都可以获取到值

如果我们只是需要在业务逻辑中获取一下配置文件中的值,可以使用@Value注解

springboot项目修改会自动编译吗 springboot修改配置_后端_29

如果说我们编写了一个类和配置文件进行映射,我们就直接使用 @ConfigurationProperties


对于是否支持JSR303校验的演示

springboot项目修改会自动编译吗 springboot修改配置_spring_30

springboot项目修改会自动编译吗 springboot修改配置_配置文件_31

SpringBoot @Vaild注解拦截不生效的问题解决

不要单独引入包,可能引入的包不全导致不生效!

直接引入SpringBoot 的starter

org.springframework.boot
spring-boot-starter-validation
RELEASE
compile

注解@ConfigurationProperties 和 @Value 对比,详细篇

注解@ConfigurationProperties 和 @Value 对比


@ConfigurationProperties(prefix = “person”)默认从全局配置文件中获取值,全局配置文件的名字是固定的application

================================================================================================================================================


@PropertySource加载指定配置文件===>加载类路径下peo.properties,并绑定到对象中


@PropertySource(value={“classpath:peo.properties”})
@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 lists;
private Dog dog;

springboot项目修改会自动编译吗 springboot修改配置_java_32

要注意Spring Boot配置文件的加载顺序,如果全局配置文件.properties, .yaml和peo.properties中都符合前缀匹配条件,那么先执行全局配置文件


全局配置文件中.properties优先级高于.yaml


全局配置文件都不满足,才会执行peo.properties


springboot项目修改会自动编译吗 springboot修改配置_配置文件_33


@PropertySource 注解的使用详情看下面这两篇文章


@PropertySource 注解的使用

@PropertySource和@ConfigurationProperties


Spring Boot配置文件的加载顺序详情看下面这篇文章


【小家Spring】一篇文章彻底搞懂Spring Boot配置文件的加载顺序(项目内部配置和外部配置)


@ImportResource:导入Spring的配置文件,让配置文件中的内容生效

========================================================================================================

springboot项目修改会自动编译吗 springboot修改配置_spring boot_34

spring.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”>
springBoot单元测试:
@RunWith(SpringRunner.class)
@SpringBootTest
class SpringBootQuickStartOneApplicationTests {
@Autowired
peo people;
@Autowired //注入IOC容器
ApplicationContext ioc;
@Test
void contextLoads()
{
//判断容器中是否由pig
boolean ret = ioc.containsBean(“pig”);
System.out.println(ret);
}
}

如果此时不在配置类上导入我们写的spring的配置文件,那么结果为false,即容器中没有保存对应的Bean

如果写了,如下面这样:

@ImportResource(locations = {“classpath:spring.xml”})
@SpringBootApplication
public class SpringBootQuickStartOneApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootQuickStartOneApplication.class, args);
}
}

springboot项目修改会自动编译吗 springboot修改配置_后端_35


SpringBoot推荐给容器中添加组件的方式,推荐使用全注解的方式

=================================================================================================

配置类=====Spring配置文件


@Configuration: 指明当前类是一个配置类,替代之前Spring配置文件

@Bean(“此处可以设置id名”):将方法的返回值添加到容器中,容器中这个组件默认的id就是方法名(不是首字母小写)

配置类:

@Configuration//指明当前类是一个配置类,替代之前Spring配置文件
public class MyConfig
{
@Bean(“pig”)//将方法的返回值添加到容器中,容器中这个组件默认的id就是方法名(不是首字母小写)
public pig HelloPig()
{
return new pig();
}
}
单元测试类:
@RunWith(SpringRunner.class)
@SpringBootTest
class SpringBootQuickStartOneApplicationTests {
@Autowired
peo people;
@Autowired //注入IOC容器
ApplicationContext ioc;
@Test
void contextLoads()
{
//判断容器中是否由pig
boolean ret = ioc.containsBean(“HelloPig”);
System.out.println(ret);
}
}

springboot项目修改会自动编译吗 springboot修改配置_后端_36


配置文件中的占位符

========================================================================

springboot项目修改会自动编译吗 springboot修改配置_配置文件_37

springboot项目修改会自动编译吗 springboot修改配置_后端_38

springboot项目修改会自动编译吗 springboot修改配置_spring boot_39


Propfile多环境支持

============================================================================

springboot项目修改会自动编译吗 springboot修改配置_java_40


多profile文件


springboot项目修改会自动编译吗 springboot修改配置_配置文件_41

springboot项目修改会自动编译吗 springboot修改配置_配置文件_42


在application.properties主配置文件中激活不同环境的配置文件