写点什么

SpringBoot--- 入门和配置,深入 java 虚拟机百度云

用户头像
极客good
关注
发布于: 刚刚

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 包,安装插件即可




<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;






![在这里插入图片描述](https://img-blog.csdnimg.cn/38cf277d295d463f89364f68670f64d6.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmN


【一线大厂Java面试题解析+核心总结学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


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 中都符合前缀匹配条件,那么先执行全局配置文件




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




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







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




@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 推荐给容器中添加组件的方式,推荐使用全注解的方式


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


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




用户头像

极客good

关注

还未添加个人签名 2021.03.18 加入

还未添加个人简介

评论

发布
暂无评论
SpringBoot---入门和配置,深入java虚拟机百度云