目录
目录
前言:
了解SpringBoot:
Spring是为了简化java开发,SpringBoot是为了简化Spring程序开发,是Spring的一次伟大进步
SpringBoot最核心功能:
- 快速添加依赖 不用在maven里面找了,直接在创建的时候勾选想要的依赖,不版心版本兼容性问题。
- 内置web容器 不用在本地下载一个tomcat进行部署打包,而是直接运行web容器
- 自动装配 比如数据库的操作,常规添加依赖,设置Spring datasorce xml设置一些连接数据库参数等,编写代码从Spring中读取从xml链接,设置给datasource对象,这些步骤都和Servlet类似.这些都是手工装配。现在通过Spring boot设置一下数据库,然后自动根据设置内容,构建一个datasouce对象,构建好的对象直接使用
一.SpringBoot的创建和使用:
创建Spring Boot项目
1.new project,注意我们使用的是Springboot 2对应jdk 8.
这个插件需要在Plugins里面搜索Spring boot heaper,下载2022.1月份都是免费版的
现在最新版的是Spring boot3 基于spring 6,jdk最低要17,jdk临时版每半年发布一次,长期版大概三年,隔5个版本
2.勾选一下,红色必要勾选,目前打包管理工具有maven和gradle,gradle比maven打包更快,增量打包和全量打包区别
3.选取Spring boot版本,和使用的工具包 2.x都是免费的,Spring boot devtools(热部署),spring web
4.设置项目名称和路径(不要出现中文)
5.完成项目的初始化,红色表示项目没有初始化好不能运行,需要右键添加maven
6.删除掉无用的目录(帮助文档)
2.目录结构:
创建一个类输出hello world
1.添加启动类:
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication//spring boot的启动类
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
2.创建一个类注意和Application平级,写一个方法,实现判别名字输入@RequestMapping设置路由地址
package com.example.demo;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller//当前类为控制器
@ResponseBody//返回的是数据,而非页面
public class TestController {
@RequestMapping("/hi")
public String sayHi(String name) {
// if (name == null || name.equals("")) {
// name = "zhangsan";
// }
if(!StringUtils.hasLength(name)){
name="zhangsan";
}
return "nihao " + name;
}
}
3.运行,输入网站:
网页版创建:
网址:Spring Initializr
生成jar包
解压文件在idea中打开即可
二.Spring Boot配置文件
配置文件的作用和格式
在整个项目中所有的重要数据都是在配置文件中配置的
- 数据库的连接信息 业务中数据库是很多的,到底和哪个连
- 项目的启动端口 微服务,每个项目分不同模块不同应用程序不同端口
- 第三方调用密钥等信息 权限限制,存取密钥(放到配置文件中,后期调整密钥直接在配置文件中调,jar包是调整不了的),调用密钥来解决接口
- 用于发现问题和定位问题的普通日志和异常日志
总结:1.系统的配置文件 如端口设置,连接数据库的配置,Springboot规定的必须要有
2.用户自定义配置文件 给用户自己用的
配置文件的格式:
yml可以看做是properties升级版,如果同时出现俩种格式,以properties为主
注意:
约定配置文件开头必须是application
约定yml是层级格式
在resource里面新建yml,设置端口6666,在properties设置8888,结果是8888
properties配置文件的基本语法:
键值形式,key value之间=连接,例如添加数据库的连接信息:
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/java105?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=123
读取配置文件
properties配置
在项目中想要主动读取配置文件内容使用注解@Value以&{}格式读取
在properties中自定义配置属性:
mytest="张三"
在TestContorller中读取
package com.example.demo;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller//当前类为控制器
@ResponseBody//返回的是数据,而非页面
public class TestController {
@Value("${mytest}")
private String mytest;
@RequestMapping("/gerconf")
public String getConfig(){
return mytest;
}
}
首先注意注解@Value,从指定的配置中找到建mytest将他的值赋给变量mytest,然后设置路径,中读取
结果如下:
缺陷: 出现乱码问题需要自定义编码格式
另外由于properties没有设置层级会出现很多重复代码:
使用yml配置文件
基础语法 key:value 中间使用:和空格连接的
server:
port: 6666
#连接数据库
Spring:
datasource:
url:jdbc:mysql://127.0.0.1:3306/java105?characterEncoding=utf8
name:root
password: 122
行内写法:也是有空格
Student: {id: 1,name: java,age: 18}
此时想要读取需要注解@ConfigurationProperties
2)yml配置不同数据类型
类型.value,注意~表示null
#字符串
string.value: hello
#布尔值
boolean.value: true
#整数
int.value: 10
#浮点数
float.value: 3.14
#NUll ~表示null
null.value: ~
3)yml单双引号的问题
yml里面存储数据
mystring: 你好\世界
mystring2: '你好\n世界'
mystring3: "你好\n世界"
在java中使用$读取
@Controller
public class UserController {
@Value("${myweixin.token}")
private String token;
@Value("${mystring2}")
private String mystring2;
@Value("${mystring3}")
private String mystring3;
@Value("${mystring}")
private String mystring;
@ResponseBody
@RequestMapping("/sayhi")
public String sayhi(){
System.out.println("mystring: "+mystring);
System.out.println("mystring2: "+mystring2);
System.out.println("mystring3" +mystring3);
return "hello world"+token;
}
}
控制台输出
结论:""会按原语义\n就是换行执行,如果是单引号,或什么都不加按照字符串中的字符进行
4)读取yml里的对象时,使用注解
@ConfigurationProperties("student")注意这里student是yml里的对象属性
#使用yml配置对象
student:
id: 1
name: 张三
age: 18
@Component
@ConfigurationProperties("student")
@Data
public class Student {
public int id;
public String name;
public int age;
}
@Autowired
private Student s;
@PostConstruct
public void postConstruct(){
System.out.println(s);
}
5)读取ym里的集合
dbtypes:
name:
-mysql
-sqlserver
-db2
@Component
public class ReadYml2 {
@Autowired
private ListConfig listConfig;
@PostConstruct
public void postConstruct(){
System.out.println(listConfig.getName());
}
}
@Component
@Data
@ConfigurationProperties("dbtypes")
public class ListConfig {
private List<String>name;
}
总结:yml,properties区别:
时间:properties诞生时间更早也是默认的配置文件格式,这种方式存在一定的冗余数据,yml可以更好的解决这个问题
语法:properties是以key=value形式配置的键值配置的文件而yml类似于json key: value之间有一个空格
中文问题:properties可能出现中文乱码问题
数据类型:yml通用性更好,支持更多的语言,并且支持更多的类型
三.