目录
一、简介SpringBoot
二、SpringBoot项目的创建与使用
1、创建SpringBoot项目
2、使用SpringBoot项目
三、 SpringBoot中的配置文件
.properties配置文件
读取配置文件信息
.yml配置文件
读取配置文件信息
四、SpringBoot中的日志文件
1、日志文件简介
2、自定义日志打印
3、日志级别
4、日志保存
5、自定义日志文件的更简单实现
SpringBoot是在Spring的基础上引入的,引入SpringBoot就是为了简化Spring的开发,SpringBoot的开发效率相比Spring也是达到了质的提升,目前SpringBoot也是主流的框架。
SpringBoot的优点:
- 快速集成框架;
- 内置了运行容器,无需再配置Tomcat等Web容器,可以直接运行和部署程序;
- 快速部署项目,无需外部容器即可启动并运行项目;
- 使用注解和配置的方式进行开发,完全抛弃繁琐的XML;
- 支持更多的的指标,可以更好了解项目的运行情况;
使用IDEA开发工具来创建SpringBoot项目,对于IDEA社区版需要下载并应用,专业版则不用。
点击file选择新建项目,之后选择如下:
一般选择次新版较为稳定。
等项目创建好之后,启动main文件夹下的DemoApplication的main方法进行运行。
运行结果:
使用SpringBoot项目的时候,需要创建的类应该位于SpringBoot项目启动类的根路径或者子路径之中,在SpringBoot中配置较少,并且约定是大于配置的。
那么我们就在SpringBoot启动类的根路径下创建一个UserController类,使用@Controller注解,并且在方法上添加@RequestMapping注解来设置路由地址,在设置路由地址时尽量都使用小写,在Windows系统中不严格区分大小写,但是在LInux系统中是严格区分大小写的。使用ResponseBody注解表明返回的是一个数据,而不是静态页面:
@Controller
public class UserController {
@ResponseBody//返回的不是一个静态页面,而是数据
@RequestMapping("/sayhi")//设置路由地址
public String sayHi(){
return "hi,world";
}
}
在启动类启动成功之后,使用localhost:8080/sayhi来进行访问:
SpringBoot的配置文件就是位于resource文件夹下的:
整个项目中的重要数据信息都是在配置文件中配置的,例如数据库的连接信息,还有项目的启动端口以及第三方系统的调用密钥等信息。
配置文件的分类:
- 系统的配置文件信息;
- 用户自定义的配置文件信息。
配置文件通常有两种:
- .properties文件:是SpringBoot的默认配置文件的格式,其优先级相比.yml文件较高,两者配置相同的信息时以.properties的信息优先。
- .yml文件:属于较新的文件类型。
.properties的文件格式采用键值对的形式:
key=value
等号左右都不能使用空格,使用#来添加注释信息。
在.properties文件中可能会出现中文乱码,就需要进行如下设置:
在Settings中搜索encoding,将页面上的字符集都设置为utf-8:
设置如下的配置信息:
#数据库配置信息
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=abc123
#用户自定义配置信息
mystring=string
mystring2=string2
使用@Value("${xx}"),xx代表配置信息中的key,例如读取配置文件中的mystring并将其输出到页面上:
@Controller
public class UserController {
@Value("${mystring}")
public String mystring1;
@ResponseBody//返回的不是一个静态页面,而是数据
@RequestMapping("/sayhi")//设置路由地址
public String sayHi(){
return "hi,world" + "mystring:"+mystring1;
}
}
读取配置文件的数据库用户名信息并进行打印:
@Controller
public class User {
@Value("${spring.datasource.username}")
public String user;
@PostConstruct
public void getUser(){
System.out.println("userName:"+user);
}
}
.properties配置信息时存在信息冗余的问题,例如在配置数据库信息时,每个key都要加上spring.datasource。
相较于.properties文件,.yml文件有如下优点:
- 写法简单,可读性高;
- 支持更多的数据类型;
- 跨语言使用:java/gaolang等等。
.yml的配置文件的语法与json字符串较为相似,例如:
#配置数据库信息
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8
username: root
password: abc123
#用户自定义配置信息
coding: utf-8
冒号后必须要有一个空格否则非法。
在配置信息的值加单引号或不加引号时表示特殊含义的字符会按照普通字符处理,如果加了双引号就会按照原语义进行执行。
在读取基本的属性时与.properties配置文件相似,也是使用@Value("${xx}")注解例如:
@Controller
public class User {
@Value("${coding}")
public String coding;
@PostConstruct
public void getCoding(){
System.out.println("coding:"+coding);
}
}
在yml中也可以对对象进行配置与读取。
在yml配置对象时也可采用行内写法,例如配置User对象:
#配置对象
user:
name: lisa
sex: female
age: 23
user2: { name: jake,sex: male,age: 22 }
在读取对象时使用@ConfigurationProperties(prefix = "xx") ,xx代表对象名,并且在类之前还要加上@Component注解,在创建该类时,一定不能省略getter和setter方法。
@ConfigurationProperties(prefix = "user2")
@Component
public class User {
private String name;
private String sex;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", sex='" + sex + '\'' +
", age=" + age +
'}';
}
}
在读取对象时,加上@AutoWired注解。
@Component
public class UserController {
@Autowired
private User user;
@PostConstruct
public void getUser(){
System.out.println("User:"+user);
}
}
在yml中也可以对集合进行配置与读取。
#配置集合
person:
name:
- zhangsan
- lisi
- liuyang
person2: { name: [zhagsan,lisi,wanwu]}
在进行读取时,与对象的读取类似,也需要添加 @ConfigurationProperties注解,然后在调用时使用@AutoWired注解,在创建实体类之前加上@Data注解,可省去定义getter、setter和toString方法。
@Data
@Component
@ConfigurationProperties("person")
public class ListConfig {
private List name;
}
@Controller
public class ListController {
@Autowired
private ListConfig list;
@PostConstruct
public void getList(){
System.out.println(list.getName());
}
}
运行结果:
所谓日志文件就是记录程序运行时的信息。
日志文件是程序的重要组成部分,利用日志文件可以发现和排除信息。
我们通常在启动SpringBoot项目时,SpringBoot的logo下面就是日志信息:
首先得到日志对象,使用LoggerFactory.getLogger(类名.class)来获取日志对象:
private static Logger logger = LoggerFactory.getLogger(LoggerTest.class);
使用日志对象提供的方法进行日志打印:
public void printLog(){
logger.trace("i am trace");
logger.debug("i am debug");
logger.info("i am info");
logger.warn("i am warn");
logger.error("i am error");
}
在打印日志的时候并没有将我们要输出的所有日志都进行打印,没出输出trace和debug的信息,这就与日志的级别有关系了,只能输出比当前日志级别高的日志信息,项目默认的日志级别为info。
日志文件有如下的六种级别(日志级别逐渐递增):
- trace:少许的日志。
- debug:调试日志。
- info:普通信息的日志。
- warn:警告日志。
- error:错误日志。
- fatal:致命的日志,该类型的日志文件是系统进行输出,不能自定义打印。
项目中默认的日志级别是info,也可以在配置文件中对输出的日志级别进行修改:
设置全局的日志级别:
#设置全局的日志级别: logging.level.root=warn
再次启动项目:
随着日志级别增加,打印的日志信息就会减少。
也可以设置局部的日志级别:
#设置局部的日志级别: logging.level.com.example.demo.log=trace
由于局部日志级别设置为最低的trace, 上文自定义日志文件此时就可以打印全部的日志信息。
日志的信息也可以持久化存储到磁盘上:
在配置文件中设置日志的保存路径:
#设置日志文件的保存路径 logging.file.path=D:/spring/
当再次启动项目之后就可以在磁盘的指定路径下找到日志文件:
如下为日志文件的内容:
logging.file.name=D:/spring/log
项目的日志文件信息也会保存到指定文件中。
日志文件中的信息时追加输入的,当日志文件超过10kb的时候,就会自动再生成一个文件例如log1、log2依次类推。
首先需要添加lombok到当前项目:
然后再pom.xml文件右击generate将Lombok的依赖添加进来
完成上述操作后只需要在实现类之前添加@Slf4j注解就可以直接使用log对象,不用再进行获取,例如:
public void printLog(){ log.trace("i am trace"); log.debug("i am debug"); log.info("i am info"); log.warn("i am warn"); log.error("i am error"); }
lombok能直接使用log对象原因在于他已经在target目录下的字节码文件中获取了log对象。