Spring Boot系列Spring Boot初级应用及配置文件

Posted 一宿君

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Boot系列Spring Boot初级应用及配置文件相关的知识,希望对你有一定的参考价值。

二、Spring Boot初级应用

2.1 Spring Boot项目目录结构

  • src/main/java:文件目录(启动类和java代码编写)

  • src/main/resource:存放静态资源文件的目录、配置文件、mybatis映射文件、属性文件等;

  • src/test/java:测试代码目录;

2.2 Spring Boot核心注解

核心注解作用
@SpringBootApplication代表是SpringBoot的启动类
@SpringBootConfiguration通过bean对象来获取配置信息
@Configuration通过对bean对象的操作代替对spring中的xml文件
@EnableAutoConfiguration完成一些初始化环境的配置
@ComponentScan来完成Spring组件的扫描,替代之前我们在xml文件中配置组件扫描的配置<context:component-scan pacage=" ">
@RestController表示一个Controller,表示当前这个Controller类下的所有方法都会以JSON格式的数据返回

1、@SpringBootApplication

申明SpringBoot自动给程序进行必要的配置,这个配置等同于:@Configuration、@EnableAutoConfiguration、@ComponentScan三个配置。

(1)@Configuration:的注解类标识这个类可以使用Spring IoC容器作为Bean定义的来源。;
(2)@EnableAutoConfiguration:能够自动配置Spring的上下文,视图猜测和配置你想要的Bean类,通常会自动根据你的类路径和你的Bean定义自动配置;
(3)@ComponentScan:会自动扫描指定包下的玩不标有@Component的类,并注册成Bean,当然包括@Component下的子注解@service、@Respository、@Controller。

2、@ResponseBody

该注解修改的函数方法,会将结果直接填充到HTTP的响应体中,一般用于构建Restful的api,该注解一般会配合@RequestMapping一起使用。

3、@Controller

用于定义控制器类,在Spring项目中由控制器负责将用户发来的URL请求转发到对应的服务接口(Service层),一般这个注解在类中,通常该方法需要配合注解@ResquestMapping注解使用。

4、@RestController

@ResponseBody和@Controller的结合体。

5、@EnableAutoConfiguration

Spring Boot自动配置(auto-configuration):尝试根据你添加的jar依赖自动配置你的Spring应用。例如,如果你的classpath下存在HSQLDB,并且你没有手动配置任何数据库连接Beans,那么我们将自动配置一个内存型(in-memeory)数据库。你可以将@EnableAutoConfiguration或者@SpringBootApplication注解添加到一个@Configuration类上来选择自动配置。如果发现应用了你不想要的特定自动配置类,你可以使用@EnableAutoConfiguration注解的排除属性来禁用它们。

6、@ComponentScan

表示将该类自动发现(扫描)并注册为Bean,可以自动收集所有的Spring组件,包括@Configuration,我们经常使用@ComponentScan注解搜索Beans,并结合@Autowired注解导入。如果没有配置的话,SpringBoot会扫描启动类所在包下以及子包下所有使用@Service、@Respository等注解的类。

7、@Configuration

相当于传统的xml配置文件,代替Spring的配置文件,如果有些第三方库需要用到xml文件,建议仍然通过@Configuration类作为项目的配置主类——可以使用@ImportResource注解加载xml配置文件。

	@Configuration
    public class RedisConfig {
        @Bean(name="jedisPoolConfig")
        @ConfigurationProperties(prefix="spring.redis")
        public JedisPoolConfig getRedisConfig(){
            return new JedisPoolConfig();
        }
    }

8、@PropertySource

如果需要有自定义的属性文件需要加载,可以使用该注解进行注入,并用@Value注解配合使用。

	@Component
    @PropertySource(value = "classpath:config.properties")
    public class ConfigUtil {
        @Value("${hos.id}")
        private String hosId;
        @Value("${hos.name}")
        private String hosName;
    }

9、@ImportResource
Spring Boot里面没有Spring的配置文件,我们自己编写的配置文件,不能自动识别;
想让Spring的配置文件生效,必须加载进来;@ImportResource标注在一个配置类上,导入Spring的配置文件,让配置文件里面的内容生效

//beans.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 id="helloService" class="com.wbs.springboot.service.HelloService"></bean>
</beans>
//导入Spring的配置文件让其生效
@ImportResource(locations = {"classpath:beans.xml"})

10、@Bean

用@Bean标注方法等价于XML中配置的bean。

11、@Value

注入Spring Boot application.properties配置的属性的值。

  • application.properties
    message:消息
    
    @Value(value = "#{message}")
    private String message;
    

12、Environment

org.springframework.core.env.Environment,环境类,spring3.1以后开始引入。比如JDK环境,Servlet环境,Spring环境等等;每个环境都有自己的配置数据,如System.getProperties()、System.getenv()等可以拿到JDK环境数据;ServletContext.getInitParameter()可以拿到Servlet环境配置数据等等;也就是说Spring抽象了一个Environment来表示环境配置。
在springBoot中使用直接用@Resource注入,即可获得系统配置文件application.properties/yml的属性值,如果是自定义的配置文件,则需要预先通过@PropertySource等其他注解注入后,才能获取。获取通过getProperty()方法获取。

2.3 Spring Boot配置文件(properties、yml)

1、配置文件

Spring Boot使用一个全局的配置文件,配置文件名是固定的;

  • application.properties
  • application.yml(推荐)

配置文件的作用:修改SpringBoot自动配置的默认值;SpringBoot在底层都给我们自动配置好;

2、三种配置文件的区别

  • properties配置文件:key=value的格式。key之间是以“.”进行分割。
    server.port = 8081
    
  • yml配置文件:是Spring Boot中新增的一种配置文件格式,以树状结构展示。
  • key之间使用“:”进行分割;
  • 缩进一定不能使用tab键,否则会报错;
  • key和value之间的分号后面必须要有一个空格。
    server:
      port: 8081
    
  • xml文件的配置
    <server>
    	<port>8081</port>
    </server>
    

YAML(YAML Ain’t Markup Language)

​YAML A Markup Language:是一个标记语言

YAML isn’t Markup Language:不是一个标记语言;

标记语言:

以前的配置文件;大多都使用的是 xxx.xml文件;
YAML:以数据为中心,比json、xml等更适合做配置文件;

3、多环境配置文件

(1)语法结构:application-{profile}.yml,

profile:代表的就是一个环境变量
application-dev.yml 开发环境
application-test.yml 测试环境
application-prod.yml 生产环境

(2) 新增全局配置文件application.properties或application.yml文件,打包的时候通过active指定变量。

#application.properties文件
spring.profiles.active = dev
#applicaition.yml(推荐)
spring:
	profile:
		active:dev

(3)按环境加载配置文件运行项目,控制台运行项目

  java -jar xxx.jar --spring.profiles.active=dev

4 YAML语法

1、基本语法

  • k:(空格)v:表示一对键值对(空格必须有);
  • 空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的
    属性和值也是大小写敏感;
    server:
        port: 8081
        path: /hello
    

2、值的写法

2.1 字面量:普通的值(数字,字符串,布尔)
  • k:(空格)v:字面直接来写;

  • 字符串默认不用加上单引号或者双引号;

  • ​" ":双引号;会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思

    name:   "zhangsan \\n lisi":输出:zhangsan 换行  lisi
    
  • ​’ ':单引号;不会转义特殊字符,特殊字符最终只是一个普通的字符串数据

    name:   ‘zhangsan \\n lisi’:输出:zhangsan \\n  lisi
    
2.2 对象、Map(属性和值)(键值对):
  • k: v:在下一行来写对象的属性和值的关系;注意缩进
    ​- 对象还是k: v的方式
    friends:
    	lastName: zhangsan
    	age: 20
    
  • 行内写法:
    friends: {lastName: zhangsan,age: 18}
    
2.3 数组(List、Set):
  • 用- 值表示数组中的一个元素
    pets:
     - cat
     - dog
     - pig
    
  • 行内写法
    pets: [cat,dog,pig]
    

3、配置文件值注入

  • 配置文件

    person:
        lastName: hello
        age: 18
        boss: false
        birth: 2017/12/12
        maps: {k1: v1,k2: 12}
        lists:
          - lisi
          - zhangsan
        dog:
          name: 小狗
          age: 12
    
  • javaBean:

    将配置文件中配置的每一个属性的值,映射到这个组件中;
    @ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定;
    prefix = “person”:配置文件中的属性可以和下面标注类中所有属性进行一一映射;
    只有这个组件是容器中的组件,才能使用容器提供的@ConfigurationProperties功能;

    @Component
    @ConfigurationProperties(prefix = "person")
    public class Person {
    
        private String lastName;
        private Integer age;
        private Boolean boss;
        private Date birth;
    
        private Map<String,Object> maps;
        private List<Object> lists;
        private Dog dog;
    
    

4 properties配置文件在idea中默认utf-8可能会乱码

5 @Value获取值和@ConfigurationProperties获取值比较

@ConfigurationProperties@Value
功能批量注入配置文件中的属性一个个指定
松散绑定(松散语法)支持不支持
SpEL不支持支持
JSR303数据校验支持不支持
复杂类型封装支持不支持

配置文件yml还是properties他们都能获取到值;

如果说,我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value;

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

以上是关于Spring Boot系列Spring Boot初级应用及配置文件的主要内容,如果未能解决你的问题,请参考以下文章

Spring boot初入门

Spring Boot 初体验(10)使用使用freemarker

Spring Boot 初体验(11)添加JSP支持

215.Spring Boot+Spring Security:初体验

215.Spring Boot+Spring Security:初体验

Spring Boot 初体验——FastJson