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 初体验(10)使用使用freemarker
215.Spring Boot+Spring Security:初体验