在控制类上可以使用@RestController替换@ResponseBody和@Controller注解
//这个类的所有方法返回的数据直接写给浏览器(如果是对象转为json数据)
/*@ResponseBody
@Controller*/
@RestController//替换上面两个注解
public class helloController {
@RequestMapping(“/hello”)
public String hello()
{
return “大忽悠”;
}
}
===================================================================
SpringBoot全局配置文件的名字是固定的application,但是格式可以是properties或者yml(yaml)
1.基本语法
字面量: 普通的值(数组,字符串,布尔)
对象,Map(属性和值)(键值对)
数组(List,Set)
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的注释配置处理器没有在类路径下找到,需要导入配置文件处理器的依赖
org.springframework.boot
spring-boot-configuration-processor
true
org.springframework.boot
spring-boot-maven-plugin
org.springframework.boot
spring-boot-configuration-processor
如果要完成对应类属性的注入,那么对应的类要提供set方法
@RunWith(SpringRunner.class)
@SpringBootTest
class SpringBootQuickStartOneApplicationTests {
@Autowired
peo people;
@Test
void contextLoads()
{
System.out.println(people);
}
}
显示结果:(出现乱码问题)===》原因: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
{
/*
-
*/
@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
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;
要注意Spring Boot配置文件的加载顺序,如果全局配置文件.properties, .yaml和peo.properties中都符合前缀匹配条件,那么先执行全局配置文件
@PropertySource 注解的使用详情看下面这两篇文章
@PropertySource和@ConfigurationProperties
【小家Spring】一篇文章彻底搞懂Spring Boot配置文件的加载顺序(项目内部配置和外部配置)
@ImportResource:导入Spring的配置文件,让配置文件中的内容生效
========================================================================================================
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推荐给容器中添加组件的方式,推荐使用全注解的方式
=================================================================================================
@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);
}
}
========================================================================
============================================================================
在application.properties主配置文件中激活不同环境的配置文件
在application.yml主配置文件中激活不同环境的配置文件
命令行的方式激活=项目打成jar包 ,然后启动dos命令行的方式激活以及使用虚拟机参数方式激活
SpringBoot配置Profile多环境支持可以看下面这篇文章
springboot多环境(dev、test、prod) 配置详解可以看下面这篇文章
pringboot多环境(dev、test、prod) 配置详解可以看下面这篇文章
=======================================================================
优先级高的覆盖优先级低的,可以注意点的是,只是对相同配置项才会产生覆盖作用,不同的话是互补作用,也就是说如果四个地方都配了的话,是会累加起来的。
Spring会从这四个位置全部加载主配置文件===》互补配置
例如:我们在高优先级配置文件中配置了端口号,低优先级配置文件中配置了端口号和项目的访问路径,那么高优先级只会覆盖低优先级的端口号,访问路径还是采用低优先级的
server.port=8081 ===>配置端口号
servlet.context-path=/hello ===>配置项目的访问路径
我们可以通过spring.config.location引用外部配置文件
总结
虽然我个人也经常自嘲,十年之后要去成为外卖专员,但实际上依靠自身的努力,是能够减少三十五岁之后的焦虑的,毕竟好的架构师并不多。
架构师,是我们大部分技术人的职业目标,一名好的架构师来源于机遇(公司)、个人努力(吃得苦、肯钻研)、天分(真的热爱)的三者协作的结果,实践+机遇+努力才能助你成为优秀的架构师。
如果你也想成为一名好的架构师,那或许这份Java成长笔记你需要阅读阅读,希望能够对你的职业发展有所帮助。
e9e464e2ebffd94769212d13d.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzUzMTU3MTcz,size_16,color_FFFFFF,t_70)
优先级高的覆盖优先级低的,可以注意点的是,只是对相同配置项才会产生覆盖作用,不同的话是互补作用,也就是说如果四个地方都配了的话,是会累加起来的。
Spring会从这四个位置全部加载主配置文件===》互补配置
例如:我们在高优先级配置文件中配置了端口号,低优先级配置文件中配置了端口号和项目的访问路径,那么高优先级只会覆盖低优先级的端口号,访问路径还是采用低优先级的
server.port=8081 ===>配置端口号
servlet.context-path=/hello ===>配置项目的访问路径
我们可以通过spring.config.location引用外部配置文件
总结
虽然我个人也经常自嘲,十年之后要去成为外卖专员,但实际上依靠自身的努力,是能够减少三十五岁之后的焦虑的,毕竟好的架构师并不多。
架构师,是我们大部分技术人的职业目标,一名好的架构师来源于机遇(公司)、个人努力(吃得苦、肯钻研)、天分(真的热爱)的三者协作的结果,实践+机遇+努力才能助你成为优秀的架构师。
如果你也想成为一名好的架构师,那或许这份Java成长笔记你需要阅读阅读,希望能够对你的职业发展有所帮助。
[外链图片转存中…(img-SiQGTftb-1714460601504)]