Spring Boot 使用笔记

Spring Boot 实战:配置devtools与日志管理
本文详细介绍了如何在Spring Boot中配置devtools实现热部署,解析了devtools的工作原理,并展示了配置过程。此外,还探讨了Spring Boot的日志管理,包括引入日志依赖、配置日志级别以及日志文件设置。最后,文章讲解了Spring Boot与数据库交互,涉及数据库配置和JPA(Hibernate)操作。

创建日期:2019-04-19
更新日期:2019-05-07

SpringBoot配置devtools实现热部署

参考网址https://www.cnblogs.com/lspz/p/6832358.html

devtools的原理

深层原理是使用了两个ClassLoader,一个Classloader加载那些不会改变的类(第三方Jar包),另一个ClassLoader加载会更改的类,称为restart ClassLoader,这样在有代码更改的时候,原来的restart ClassLoader 被丢弃,重新创建一个restart ClassLoader,由于需要加载的类相比较少,所以实现了较快的重启时间。

配置
<!-- 添加配置devtools依赖,实现热部署 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional>
</dependency>

<build>
	<plugins>
		<plugin>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-maven-plugin</artifactId>
			<!-- 添加配置fork,如果不进行配置则无法实现热部署 -->
			<configuration>
				<fork>true</fork>
			</configuration>
		</plugin>
	</plugins>
</build>

Spring Boot 使用日志

引入日志

通常情况下,若使用Logback需要在pom文件中引入以下依赖:

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-logging</artifactId>
</dependency>

但实际项目开发过程中,如下的依赖中,已经将该依赖及相应的依赖引入,因此,无需再配置该依赖。

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter</artifactId>
</dependency>

配置日志

配置日志级别

注意:默认情况下,Spring Boot会使用Logback进行日志的记录,默认的日志级别是INFO。

通常情况下,我们使用slf4j作为日志的API,org.slf4j.Logger日志的级别分别有TRACE、DEBUG、INFO、WARN、ERROR五种级别,一般只使用后面的四个,且日志级别等级是递增的。

package com.example.demo.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class Hello {
	private Logger logger = LoggerFactory.getLogger(Hello.class);
	@RequestMapping("/hello")
	public String excute() {
		logger.trace("默认trace级别");
		logger.debug("默认debug级别");
		logger.info("默认info级别");
		logger.warn("默认warn级别");
		logger.error("默认error级别");
		return "Hello World";
	}
}

执行的结果如下:

2019-04-19 14:15:29.380  INFO 2588 --- [nio-8080-exec-1] com.example.demo.controller.Hello        : 默认info级别
2019-04-19 14:15:29.380  WARN 2588 --- [nio-8080-exec-1] com.example.demo.controller.Hello        : 默认warn级别
2019-04-19 14:15:29.380 ERROR 2588 --- [nio-8080-exec-1] com.example.demo.controller.Hello        : 默认error级别

由此可以发现,在默认情况下,日志的等级为INFO。

一般情况下,默认的配置已经足够使用,日志级别也设置的比较合理,但对于一些特别的要求,比如说需要更详细的日志,需要设置DEBUG级别或者为了减少日志输出,将日志级别设置为ERROR,默认的设置便不再适用,那么该怎样操作才能满足需要呢?

运行程序时指定日志级别

将项目打包,如打包成jar
运行程序设置参数,如下

# java -jar demo.jar --debug
在配置文件中追加日志级别

在application.properties文件中设置如下:

更改日志系统的的输出等级
	debug=true

该属性设置为true时,日志会输出日志系统内部的日志级别为DEBUG的信息,但自定义的DEBUG日志不会输出,如上的程序重新执行的结果如下:

2019-04-19 14:48:07.579  INFO 3800 --- [nio-8080-exec-1] com.example.demo.controller.Hello        : 默认info级别
2019-04-19 14:48:07.579  WARN 3800 --- [nio-8080-exec-1] com.example.demo.controller.Hello        : 默认warn级别
2019-04-19 14:48:07.579 ERROR 3800 --- [nio-8080-exec-1] com.example.demo.controller.Hello        : 默认error级别
2019-04-19 14:48:07.599 DEBUG 3800 --- [nio-8080-exec-1] m.m.a.RequestResponseBodyMethodProcessor : Using 'text/html', given [text/html, application/xhtml+xml, image/webp, image/apng, application/xml;q=0.9, */*;q=0.8] and supported [text/plain, */*, text/plain, */*, application/json, application/*+json, application/json, application/*+json]
2019-04-19 14:48:07.600 DEBUG 3800 --- [nio-8080-exec-1] m.m.a.RequestResponseBodyMethodProcessor : Writing ["Hello World"]
2019-04-19 14:48:07.609 DEBUG 3800 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Completed 200 OK

因此这种设置仅仅针对日志系统,无法更改自定义日志级别。

更改自定义日志输出级别
logging.level.com=DEBUG

该配置表示com包下的日志输出等级为DEBUG,如果同时配置如下,则以外包的配置为准

logging.level.com=DEBUG
logging.level.com.example=ERROR

经测试,自定义输出日志级别为DEBUG。

配置日志文件

在application.properties默认配置文件中配置如下:

logging.file=F://logs/demo.log

Spring Boot 数据库交互

配置数据库

参数配置连接数据库

在application.properties文件中配置如下:

#配置数据库
spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@127.0.0.1:1521:XE
spring.datasource.username=demo
spring.datasource.password=demo
#Hikari连接配置
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.hikari.minimum-idle=5
spring.datasource.hikari.maximum-pool-size=15
spring.datasource.hikari.auto-commit=true
spring.datasource.hikari.idle-timeout=30000
spring.datasource.hikari.pool-name=DatebookHikariCP
spring.datasource.hikari.max-lifetime=1800000
spring.datasource.hikari.connection-timeout=30000
spring.datasource.hikari.connection-test-query=select 1 from dual

#Hibernate方言配置
spring.jpa.database-platform=org.hibernate.dialect.OracleDialect

我使用的是默认连接池Hikari,无需添加额外的依赖配置,直接配置即可,由于连接的数据库是Oracle,Oracle是收费的,导致Oracle的驱动包无法在中央仓库中获取,需要进行本地依赖的配置。

数据操作

JPA(Hibernate)配置

在pom文件中引入如下依赖配置:

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
创建实体类
package com.example.demo.entity;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "DEMO_USER")
public class DemoUser {
	@Id
	@Column(name = "ID", length = 10, nullable = false)
	private Integer id;
	@Column(name = "NAME", length = 40, nullable = false)
	private String name;
	@Column(name = "SEX", length = 1, nullable = true)
	private String sex;
	@Column(name = "CREATEDATE", nullable = false)
	private Date createDate;

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	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 Date getCreateDate() {
		return createDate;
	}

	public void setCreateDate(Date createDate) {
		this.createDate = createDate;
	}

	@Override
	public String toString() {
		return "DemoUser [id=" + id + ", name=" + name + ", sex=" + sex + ", createDate=" + createDate + "]";
	}
}
创建Dao层接口

对于一些简单的操作,比如对单表的增删改查,可以直接继承JpaRepository类,可以重写或者直接使用父类方法

package com.example.demo.dao;

import org.springframework.data.jpa.repository.JpaRepository;

import com.example.demo.entity.DemoUser;

public interface DemoUserDao extends JpaRepository<DemoUser, Integer> {
}
测试使用接口操作数据库
package com.example.demo.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.example.demo.dao.DemoUserDao;
import com.example.demo.entity.DemoUser;

@RestController
public class TestDemoUserController {
	@Autowired
	private DemoUserDao demoUserDao;
	@RequestMapping("/testDemoUser")
	public void test(){
		System.out.println("开始查询表DEMO_USER的所有结果");
		List<DemoUser> userDaos = demoUserDao.findAll();
		for (DemoUser demoUser : userDaos) {
			System.out.println(demoUser.toString());
		}
	}
}

测试结果如下:

DemoUser [id=2, name=李四, sex=0, createDate=2019-04-25 11:57:22.0]
DemoUser [id=1, name=张三, sex=1, createDate=2019-04-25 12:01:51.0]
DemoUser [id=3, name=王五, sex=0, createDate=2019-04-25 12:03:00.0]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值