Spring Boot学习笔记 02
0x01 多环境下核心配置文件的使用(properties)
需要注意.properties中的属性值不要出现空格,会被识别出现问题!
在工作中的开发环境有
- 开发环境(dev)
- 测试环境(test)
- 准生产环境(pre)
- 生产环境(product)
老样子,我们在创建号的SpringBoot环境下,在Application.java文件的同级目录或下级目录创建一个Controller/IndexController.java,内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| package com.springboot.springboot006multienvironment.controller;
import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody;
@Controller public class IndexController { @RequestMapping(value = "/say") @ResponseBody public String say() { return "Hello Multi-Environment!"; } }
|
下面我们分别对应上面四个开发环境创建对应的核心配置文件:
1 2 3 4 5
| touch application.properties touch application-dev.properties touch application-test.properties touch application-pre.properties touch application-product.properties
|
每个环境的核心配置文件名的格式都是 application-XXXX.properties
其中的XXXX
由自己命名,并在 主核心配置文件 中调用:
application.properties:
1 2 3
|
spring.profiles.active=XXXX
|
其他核心配置文件则与原来单核心配置文件相同:
application-dev.properties:
1 2
| server.port=8080 server.servlet.context-path=/dev
|
application-test.properties:
1 2
| server.port=8081 server.servlet.context-path=/test
|
application-pre.properties:
1 2
| server.port=8082 server.servlet.context-path=/pre
|
application-product.properties:
1 2
| server.port=8083 server.servlet.context-path=/product
|
这样我们就完成了在不同环境下的核心配置文件配置,浏览器URL框输入时区分默认路径即可。
比如输入http://localhost:8081/test/say 就会显示出我们在IndexController中创建的函数say返回的内容”Hello Multi-Environment!”。
0x02 多环境下的核心配置文件的使用(yml)
yml(或者yaml)与properties文件的配置方法大同小异,只有文件内容格式上的差异,其他基本一样。
所以这里只给出配置后的核心文件的内容:
application.yml:
1 2 3
| spring: profiles: active: dev
|
application-dev.yml:
1 2 3 4
| server: port: 8080 servlet: context-path: /dev
|
application-test.yml:
1 2 3 4
| server: port: 8081 servlet: context-path: /test
|
application-product.yml:
1 2 3 4
| server: port: 8082 servlet: context-path: /product
|
application-pre.yml:
1 2 3 4
| server: port: 8083 servlet: context-path: /pre
|
0x03 获取application.properties(.yml)自定义配置
上面我们用的配置诸如server.port=
server.servlet.context-path=
等等都是SpringBoot项目自带的配置项,如何自己创建一个自定义配置并获取它呢?
这里我们使用到__@Value__
在Application.java文件的同级目录或下级目录创建一个Controller/IndexController.java,内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| package com.spring.springboot008customerconfiguration.Controller;
import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody;
@Controller public class IndexController { @Value("${school.name}") private String schoolName;
@Value("${website}") private String website;
@RequestMapping(value = "/say") @ResponseBody public String say() { return "hello :" + schoolName + " Website : http://" + website; } }
|
配置文件application.properties中:
1 2 3 4 5 6 7
| server.port=8080
server.servlet.context-path=/
school.name=ECJTU website=www.ecjtu.jx.cn
|
运行项目后我们打开浏览器输入http://localhost:8080/say,浏览器显示
1
| hello :ECJTU Website : http://www.ecjtu.jx.cn
|
说明我们获取成功。
0x04 成组获取自定义配置对象
上一个部分0x03中,我们获取自定义配置是一个一个获取的,我们如何一组一组的获取呢,比如我们现在创建的application.properties文件如下:
1 2 3 4 5 6 7 8 9 10
| server.port=8080
server.servlet.context-path=/
school.name=ECJTU school.website=www.ecjtu.jx.cn
department.name=ECJTU1 department.website=www.ecjtu1.jx.cn
|
如何把school和department的name和website属性分别存到他们对应的构造体里面呢。
我们在application.java同级目录或下级目录中分别创建school.java和department.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| package com.spring.springboot008customerconfiguration.Controller;
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component;
@Component @ConfigurationProperties(prefix = "school") public class School { private String name; private String website;
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getWebsite() { return website; }
public void setWebsite(String website) { this.website = website; } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| package com.spring.springboot008customerconfiguration.Controller;
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component;
@Component @ConfigurationProperties(prefix = "department") public class Department { private String name; private String website;
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getWebsite() { return website; }
public void setWebsite(String website) { this.website = website; } }
|
然后再创建一个IndexController.java 来输出结果。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| package com.spring.springboot008customerconfiguration.Controller;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody;
@Controller public class IndexController { @Autowired private School school;
@Autowired private Department department;
@RequestMapping(value = "/say") @ResponseBody public String say() { String hello1 = "hello :" + department.getName() + " Website : http://" + department.getWebsite(); String hello2 = "hello :" + school.getName() + " Website : http://" + school.getWebsite(); return hello2 + "<br>" + hello1; } }
|
这样我们在浏览器输入http://localhost:8080/say 就可以得到如下结果:
1 2
| hello :ECJTU Website : http://www.ecjtu.jx.cn hello :ECJTU1 Website : http://www.ecjtu1.jx.cn
|
此方法只能获取核心配置文件中有前缀的属性,若没有前缀的单独属性必须要用0x03的方法!!
0x0401 使用@ConfigurationProperties注解出现警告处理:
当我们配置好School.java和Department.java这两个文件的时候IDEA上方会出现红色警告:
未配置Spring Boot注解处理器
但是这个并不影响我们代码的执行,如果要消除该警告,只需要在pom.xml配置文件中添加一个依赖:
1 2 3 4 5
| <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
|
这样就没有上述的警告了。