一、Spring Boot Admin的使用
1.使用Actuator检查与监控:
- 修改POM文件添加坐标依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
- 修改配置文件:
# 配置访问端点的根路径
management.endpoints.web.base-path=/actuator
# 配 置开启其他端点的 URI
management.endpoints.web.exposure.include=*
- Actuator配置信息:
开启端点访问通过在配置文件中配置:management.endpoints.web.exposure.include 节点。
关闭端点访问通过:management.endpoints.web.exposure.exclude节点。
![](https://img.haomeiwen.com/i18633299/c6a3184aeec802f0.png)
2.各项监控指标接口 URL 介绍:
![](https://img.haomeiwen.com/i18633299/34eeaae0cf55e362.png)
![](https://img.haomeiwen.com/i18633299/ecb42773fc92665b.png)
3.使用可视化监控应用Spring Boot Admin:
SpringBootAdmin 的使用是需要建立服务端与客户端。
服务端:独立的项目,会将搜集到的数据在自己的图形界面中展示。
客户端:需要监控的项目。
对应关系:一个服务端可以监控多个客户端。
- 修改POM文件:
:目前在 Spring BootAdmin StarterServer2.1.6 版本中不支持 SpringBoot2.2.x 版本, 只支持到2.1.X 。
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>2.1.6</version>
</dependency>
- 修改配置文件:
server.port=9090
- 修改启动类
@SpringBootApplication
@EnableAdminServer
public class SpringbootUactuatorApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootUactuatorApplication.class, args);
}
}
- 搭建客户端修改POM文件:
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>2.1.6</version>
</dependency>
- 修改配置文件:
# 配置访问端点的根路径
management.endpoints.web.base-path=/actuator
# 配 置开启其他端点的 URI
# 开 启 所有的 端点 访 问 : *
# 指 定 开启 端 点 访 问 : 如 :beans,env
management.endpoints.web.exposure.include=*
# 指 定 服 务 端 的 访 问 地 址
spring.boot.admin.client.url=http://localhost:9090
![](https://img.haomeiwen.com/i18633299/4f345179ed7c8bd4.png)
![](https://img.haomeiwen.com/i18633299/b6cb2d0dfc87a4eb.png)
二、Spring Boot日志管理
1.Logback读取配置文件的步骤:
SpringBoot 默认使用 Logback 组件作为日志管理。Logback 是由 log4j 创始人设计的一 个开源日志组件。
(1)在 classpath 下查找文件 logback-test.xml ;
(2)如果文件不存在,则查找 logback.xml ;
(3)如果两个文件都不存在,LogBack 用 BasicConfiguration 自动对自己进行最小化配 置,这样既实现了上面我们不需要添加任何配置就可以输出到控制台日志信息。
- 添加Logback.xml配置文件:
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
<property name="LOG_HOME" value="${catalina.base}/logs/"/>
<!-- 控制台输出 -->
<appender name="Stdout" class="ch.qos.logback.core.ConsoleAppender">
<!-- 日志输出编码 -->
<layout class="ch.qos.logback.classic.PatternLayout">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
</pattern>
</layout>
</appender>
<!-- 按照每天生成日志文件 -->
<appender name="RollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<FileNamePattern>${LOG_HOME}/server.%d{yyyy-MM-dd}.log</FileNamePattern>
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
</pattern>
</layout>
<!--日志文件最大的大小-->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
</appender>
<!-- 日志输出级别 -->
<root level="info">
<appender-ref ref="Stdout"/>
<appender-ref ref="RollingFile"/>
</root>
<!--日志异步到数据库 -->
<!-- <appender name="DB" class="ch.qos.logback.classic.db.DBAppender">
日志异步到数据库
<connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">
连接池
<dataSource class="com.mchange.v2.c3p0.ComboPooledDataSource">
<driverClass>com.mysql.jdbc.Driver</driverClass>
<url>jdbc:mysql://127.0.0.1:3306/databaseName</url>
<user>root</user>
<password>root</password>
</dataSource>
</connectionSource>
</appender> -->
</configuration>
- 在代码中使用Logback:
@RestController
@RequestMapping("/logback")
public class TestController {
private final static Logger logger = LoggerFactory.getLogger(TestController.class);
@Value("${msg}")
private String msg;
@RequestMapping("show")
public String showInfo() {
logger.info("记录日志");
return "Hello Logback " + msg;
}
}
- 在配置文件中屏蔽指定包的日志记录:
# 屏 蔽 指 定 包 中 的 日 志 输 出
logging.level.org=off
三、Spring Boot项目的打包方式
1.Spring Boot项目打包:
- 使用spring boot的打包插件:
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
-
在项目中打包的方式:
示例
- 在在命令行中执行命令:
找到打包完成的jar文件;在命令窗口中运行命令:java -jar 项目的名称;
2.Spring Boot的多环境配置:
(1)添加application-dev.properties和application-test.properties配置文件模拟多环境;
(2)在配置文件中分别添加:msg=dev和msg=test;
(3)将项目打包并拷贝到指定目录下;
(5)在Windows环境下进入命令行执行:java-jar xxx.jar--spring.profiles.active=dev/test;
(6)在Linux环境下:将jar文件和Server.sh上传到服务器;为server.sh脚本分配执行权限:chmod 777 server.sh;脚本启动命令:server.sh start;脚本关闭命令:server.sh stop;
(7)安装上传下载工具:安装yum installlrzsz-y ;上传命令:rz;下载命令:sz。
(8)修改server.sh文件:
SPRING_PROFILES_ACTIV="-Dspring.profiles.active=dev"
![](https://img.haomeiwen.com/i18633299/1c7972e3a2328286.png)
![](https://img.haomeiwen.com/i18633299/32833e3dfb79bfe8.png)
![](https://img.haomeiwen.com/i18633299/78709cb50c53742e.png)
四、Spring Data整合SpringData JPA
1.Spring Data:
SpringData:Spring 的一个子项目。用于简化数据库访问,支持NoSQL 和 关系数据存储。其主要目标是使数据库的访问变得方便快捷。
SpringData主要项目:
Spring Data Commons 核心概念支撑每一个Spring数据项目。
Spring Data JPA关系型数据库的实现;
Spring Data MongoDB 支持MongoDB文档对象仓库。
Spring Data Redis 提供简单的配置供Spring应用访问Redis;
Spring Data REST 支持将仓库导出为RESTFul 资源 ;
还支持Gemfire、ES等。
- Spring Data JPA:
Spring Data JPA 是spring data 项目下的一个模块。提供了一套基于JPA标准操作数据库的简化方案。底层默认的是依赖 Hibernate JPA 来实现的。
Spring Data JPA 的技术特点:我们只需要定义接口并继承 Spring Data JPA 中所提供的接口就可以了。不需要编写接口实现类。
2.整合Spring Data JPA:
- 创建项目修改POM添加依赖:
<dependencies>
<!-- jpa的启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- springBoot的启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
<version>5.1.38</version>
</dependency>
<!-- druid连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.12</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
- 配置application.properties:
#配置数据源信息
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/jpa
spring.datasource.username=root
spring.datasource.password=root
#配置连接池类型
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#开启正向工程 create:会造成已存在的数据丢失 update:创建或更新(推荐)
spring.jpa.hibernate.ddl-auto=update
#是否打印SQL语句
spring.jpa.show-sql=true
- 创建实体生成get和set方法:
@Entity
@Table(name= "users")
public class Users {
@Id //映射表中的主键
@GeneratedValue(strategy = GenerationType.IDENTITY)//主键生成策略表示主键自增
private int userid;
@Column(name = "username")
private String username;
@Column
private int userage;
@Column
private String address;
- 创建接口:
import com.zlw.springdatajpa.pojo.Users;
import org.springframework.data.jpa.repository.JpaRepository;
public interface UsersRepository extends JpaRepository<Users,Integer> {
}
- 测试:
@SpringBootTest
class SpringdataJpaApplicationTests {
@Autowired
private UsersRepository usersRepository;
//添加
@Test
public void addUser() {
Users users = new Users();
users.setUsername("张三");
users.setUserage(18);
users.setAddress("郑州");
usersRepository.save(users);
}
//查询所有
@Test
public void findAll(){
List<Users> list = usersRepository.findAll();
for (Users user:list) {
System.out.println(user);
}
}
//ID查找
@Test
public void findById(){
Optional<Users> optional = usersRepository.findById(1);
Users users = optional.get();
System.out.println(users);
}
//修改
@Test
public void updateUser(){
Users users = new Users();
users.setUserid(1);
users.setUsername("李四");
users.setUserage(20);
users.setAddress("北京");
usersRepository.save(users);
}
//删除
@Test
public void deleteUser(){
usersRepository.deleteById(2);
}
}
3.Spring Data JPA的接口继承结构:
![](https://img.haomeiwen.com/i18633299/3b5b9afe51d18aac.png)
![](https://img.haomeiwen.com/i18633299/64d52c3d8545bfc0.png)
- Repository接口:
Repository 接口是 Spring Data JPA 中为我我们提供的所有接口中的顶层接口Repository 提供了两种查询方式的支持:
(1)基于方法名称命名规则查询;
(2)基于@Query 注解查询;
网友评论