SpringBoot--- 入门和配置,深入 java 虚拟机百度云
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);
}
}
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.运行主程序测试
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
命令行使用 java -jar 的命令执行这个 jar 包即可,记住先要来到当前 jar 包对应的目录,通过 cd 目录路径–》来到对应目录
============================================================================
父项目(父依赖)
启动器
========================================================================
//来标注一个主程序类,说明这是一个 springBoot 应用程序
@SpringBootApplication
public class Hello {
public static void main(String[] args)
{
//spring 应用启动起来
SpringApplication.run(Hello.class,args);
}
}
下面是 @SpringBootApplication 个注解的内部信息:
下面解释这里面的组合注解的意思:
底层的 @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)
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<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>
如果要完成对应类属性的注入,那么对应的类要提供 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
{
/*
<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;
![在这里插入图片描述](https://img-blog.csdnimg.cn/38cf277d295d463f89364f68670f64d6.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmN
zZG4ubmV0L20wXzUzMTU3MTcz,size_16,color_FFFFFF,t_70)
配置文件 yml 还是 properties 他们都可以获取到值
如果我们只是需要在业务逻辑中获取一下配置文件中的值,可以使用 @Value 注解
如果说我们编写了一个类和配置文件进行映射,我们就直接使用 @ConfigurationProperties
对于是否支持 JSR303 校验的演示
SpringBoot @Vaild 注解拦截不生效的问题解决
不要单独引入包,可能引入的包不全导致不生效!
直接引入 SpringBoot 的 starter
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
注解 @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<Object> lists;
private Dog dog;
要注意 Spring Boot 配置文件的加载顺序,如果全局配置文件.properties, .yaml 和 peo.properties 中都符合前缀匹配条件,那么先执行全局配置文件
全局配置文件都不满足,才会执行 peo.properties
@PropertySource 注解的使用详情看下面这两篇文章
@PropertySource和@ConfigurationProperties
Spring Boot 配置文件的加载顺序详情看下面这篇文章
【小家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">
<bean class="com.Bean.pig" id="pig"/>
</beans>
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 推荐给容器中添加组件的方式,推荐使用全注解的方式
=================================================================================================
评论