配置文件分类
如果想使用自己的配置,可以使用以下三种文件配置
- application.properties
- application.ym
- application.yaml
如果三个都配置了,那么优先级为properties > yml > yaml
properties
server.port=8080
yml
server: port: 8081 #冒号后面要有空格
yaml
server: port: 8082 #冒号后面要有空格
yaml数据格式
对象(map):键值对的集合
person: name: rikka #行内写法 person: {name: rikka}
数组:
address: - beijing - shanghai #行内写法 address: [beijing,shanghai]
纯量:单个的
msg1: 'hello \n world' #单引忽略转义字符 msg2: "hello \n world" #多引识别转义字符
参数引用
name: rikka person: name: ${name}
读取配置内容
@Value
@Value("${name}") private String name; @Value("${person.name}") private String personName; @Value("${person.age}") private int personAge; @Value("${address[0]}") private String address0; @Value("${address[1]}") private String address1; @Value("${msg1}") private String msg1; @Value("${msg2}") private String msg2; @RequestMapping("/users") public String users(){ System.out.println(name); System.out.println(personName); System.out.println(personAge); System.out.println(address0); System.out.println(address1); System.out.println(msg1); System.out.println(msg2); return "hello " + name; }
运行结果如下:
Environment
@Autowired private Environment ev; @RequestMapping("/users") public String users(){ System.out.println(ev.getProperty("name")); System.out.println(ev.getProperty("person.name")); System.out.println(ev.getProperty("person.age")); System.out.println(ev.getProperty("address[0]")); System.out.println(ev.getProperty("address[1]")); System.out.println(ev.getProperty("msg1")); System.out.println(ev.getProperty("msg2")); return "hello"; }
@ConfigurationProperties
首先创建实体类,并添加getting和setting方法
@Component @ConfigurationProperties(prefix = "person") public class Person { private String name; private String age; private String[] address; }
在controller中进行调用
@Autowired private Person person; @RequestMapping("/users") public String users(){ System.out.println(person.toString()); return "hello"; }
运行结果如下:
P.S:
这里我将yml文件中的address加入了person中,否则address为null。
profile——动态配置切换
多profile文件方式
首先创建多个配置文件
里面只配置了不同的端口,分别是8080,8081,8082,8083。
启动时,默认使用第一个
修改默认文件内容实现配置其他后缀的文件
spring: profiles: active: dev
这样使用的配置就是application-dev.yml中的内容,其他同理。
yml多文档方式(被弃用)
--- server: port: 8081 spring: profiles: dev --- server: port: 8082 spring: profiles: pro --- server: port: 8083 spring: profiles: test --- spring: profiles: active: dev
使用---进行分隔,其他和多文件方式没有区别。
加载顺序
内部配置加载顺序
file:./config/ 当前项目下的config目录下
file:./ 当前项目的根目录
classpath:/config/ classpath的config目录
classpath./ classpath的根目录
高优先级配置的属性会生效
外部配置加载顺序
通过命令行运行jar包时配置
如:
java -jar .\jar包名.jar --spring.config.location=配置文件路径
将配置文件放置与jar包同路径下,即可自动加载
SpringBoot整合其他框架
- 整合junit
- 需要starter-test依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <scope>test</scope> </dependency>
- 编写测试类
- 添加注解
- @RunWith(SpringRunner.class)
- @SpringBootTest(classer=启动类.class)
- 编写测试方法
@RunWith(SpringRunner.class) @SpringBootTest(classes = SpringbootInitApplication.class) public class UserServiceTest { @Autowired private UserService userService; @Test public void testAdd(){ userService.add(); } }
- 整合Redis
- 引入redis依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
- 配置redis属性
spring: redis: host: 127.0.0.1 port: 6379 #还可以配置其他属性
- 注入RedisTemplate模版
- 编写测试方法,测试
@Autowired private RedisTemplate redisTemplate; @Test public void testSet(){ redisTemplate.boundValueOps("name").set("rikka"); } @Test public void testGet(){ Object name = redisTemplate.boundValueOps("name").get(); System.out.println(name); }
电脑没有安装redis,不运行了
- SpringBoot整合MyBatis
- 搭建SpringBoot工程
- 引入mybatis依赖,添加mysql驱动
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.3.1</version> </dependency>
- 编写DataSource和MyBatis相关配置
#datasource spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/数据库名 username: root password: root mybatis: config-location: #指定mybatis核心配置文件 mapper-locations: classpath:mapper/*Mapper.xml type-aliases-package: com.rikka.springbootmybatis.domain
采用注解开发,不需要配置mybatis
- 定义表和实体类
- 编写dao和mapper文件/纯注解开发
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.rikka.springbootinit.mapper.UserXmlMapper"> <select id="findAllUser" resultType="com.rikka.springbootinit.domain.User"> select * from user_info </select> </mapper>
@Mapper @Repository public interface UserXmlMapper { public List<User> findAllUser(); }
- 测试
@Autowired private UserXmlMapper userXmlMapper; @Test public void findAllUser(){ List<User> users = userXmlMapper.findAllUser(); System.out.println(users); }