springboot是什么
传统的开发模式下,无论是基于xml
或注解
,都要做许多配置,如果项目中集成越多的其他框架,配置内容也会越多。为了让开发人员以最少的配置去开发应用,springboot诞生了。springboot的原则是约定大于配置
(能不配就不配)。
springboot还未spring项目提供了很多非功能特性,比如嵌入式tomcat。
创建springboot项目
点击File
->New
->Project
,然后左侧选择Spring Initializr
,输入相关项目信息,点击next
,然后选择相关依赖,选择Spring Web
,点击Create
。
springboot配置文件
实际开发中,经常需要用到自定义配置
(下面是以微信公众号开发时为例)。
/src/main/resources/application.yml
wechat:
appid: wx123456789asdsad
token: ca
appSecret: a123b456c789d147e258f369
读取配置项的方式(一)
/src/main/java/com/asd/config/WeChat.java
@ConfigurationProperties("wechat") // 参数输入前缀。@ConfigurationProperties和@Value注解用于获取配置文件中的属性定义并绑定到Java Bean或属性中
@Component
public class WeChat {
private String appId;
private String token;
private String appSecret;
...getter setter
}
/src/main/java/com/asd/controller/HellowController.java
@RestController // 等同于@Controller + @ResponseBody
public class HellowController {
// 注入WeChat实体类
@Autowired
private WeChat weChat;
...
@GetMapping("/getWeChat")
public WeChat getWeChat() {
return weChat;
}
}
重启服务后,访问 localhost:8080/getWeChat :
{
"appId":"wx123456789asdsad", "token":"ca", "appSecret":"a123b456c789d147e258f369"}
读取配置项的方式(二)
/src/main/java/com/asd/config/WeChatConfig.java
@Configuration // 标识这是一个配置类
public class WeChatConfig {
@Bean // 这样的话springboot就自动帮我们注入weChat对象
@ConfigurationProperties("wechat")
public WeChat weChat() {
return new WeChat();
}
}
读取配置项的方式(三)
/src/main/java/com/asd/controller/HellowController.java
@RestController
public class HellowController {
@Value("${wechat.appId}")
private String appId;
@Value("${wechat.token}")
private String token;
@Value("${wechat.appSecret}")
private String appSecret;
...
@GetMapping("/getWeChat")
public WeChat getWeChat() {
WeChat weChat = new WeChat();
weChat.setAppId(appId);
weChat.setAppSecret(appSecret);
weChat.setToken(token);
return weChat;
}
}
如果属性较少,可以用@Value。如果属性较多,建议用第一种或第二种。
在实际项目开发中,有时需要读取自定义的配置文件。新建自定义配置文件:
/src/main/resources/my.yml
wechat1:
appid: wx123456789asdsad
/src/main/java/com/asd/config/MyWeChat.java
@PropertySource("my.yml")
@ConfigurationProperties("wechat1")
@Component
public class MyWeChat {
private String appId;
...getter setter
}
/src/main/java/com/asd/controller/HellowController.java
@RestController
public class HellowController {
@Resource
private MyWeChat myWeChat;
...
@GetMapping("/getWeChat2")
public MyWeChat getWeChat2() {
return myWeChat;
}
}
springboot多环境配置
开发项目时,通常需要经历几个阶段。
- 本地开发接口(本地开发环境,local)
- 开发完后与前端做接口联调(前后端联调环境,dev)
- 联调完后提交测试(测试环境,test)
- 测试完后有些公司会预发布(预发布环境,pre)
- 部署到线上(生产环境,prod)
不同的开发环境,属性配置一般都不一样。如果不做多环境配置,就得去频繁修改配置文件,这样有一定的安全隐患。比如在本地开发时,不小心连上线上数据库,这样会对线上数据库造成一定的数据污染。
在resources目录下创建各环境的配置文件,springboot在启动的过程中,首先会加载application.yml,其次去加载这N个不同环境配置文件中的某一个。
在application.yml中的属性名可以当做变量,即${
}来进行引用。
application-local.yml
server:
port: 8001
application-dev.yml
server:
port: 8002
application.yml
wechat:
appid: wx123456789asdsad
token: ca
appSecret: a123b456c789d147e258f369
port: ${
server.port}# 引用属性值,如果是引入local配置文件,其值就会是8001
spring:
profiles:
active: local #写你要启动的配置文件的后缀就行
获取参数
比如有实体类Student,他有name、age属性。
1)通过request对象获取参数
2)@RequestParam
(针对请求头方式为x-www-form-urlencoded,比如form表单)
@GetMapping("/get")
public Student getById(@RequestParam Integer id,@RequestParam String name) {
return id;
}
如果请求参数的name是id1,就得写成@RequestParam("id1")。
3)@RequestBody
(针对请求头方式为application/json)
@PostMapping("/save")
public Student save(@RequestBody Student student) {
return student;
}
4)@PathVariable
(接收url路径参数)
@GetMapping("/get/{id}")
public Student getById(@PathVariable Integer id) {
return id;
}
若是