>  기사  >  Java  >  Spring Boot를 사용하여 SQL 실행 상태를 모니터링하는 방법

Spring Boot를 사용하여 SQL 실행 상태를 모니터링하는 방법

PHPz
PHPz앞으로
2023-05-11 17:13:061415검색

1. 준비

먼저 다음과 같이 Spring Boot 프로젝트를 생성하고 MyBatis 등을 소개합니다.

Spring Boot를 사용하여 SQL 실행 상태를 모니터링하는 방법

MyBatis 및 MySQL 드라이버를 선택하고 간단한 테스트 케이스를 만듭니다.

먼저 데이터베이스에 연결합니다:

spring.datasource.username=root
spring.datasource.password=123
spring.datasource.url=jdbc:mysql:///test05?serverTimezone=Asia/Shanghai

다음과 같이 User 엔터티 클래스를 만들고 간단한 쿼리 사례를 만듭니다.

public class User {
    private Integer id;
    private String username;
    private String address;
    private String password;
    private String email;
    //省略 getter/setter
}
@Mapper
public interface UserMapper {
    List<User> getUserByUsername(String username);
}
@Service
public class UserService {
    @Autowired
    UserMapper userMapper;
    public List<User> getUserByUsername(String username){
        return userMapper.getUserByUsername(username);
    }
}
@RestController
public class UserController {
    @Autowired
    UserService userService;

    @GetMapping("/user")
    public List<User> getUser(String username) {
        return userService.getUserByUsername(username);
    }
}

UserMapper.xml 다음과 같이:

<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.javaboy.druid_monitor.mapper.UserMapper">
    <select id="getUserByUsername" resultType="org.javaboy.druid_monitor.model.User">
        select * from user where username=#{username}
    </select>
</mapper>

아주 간단한 테스트입니다. 말할 것이 아무것도 없어.

이 환경을 자유롭게 구축할 수 있습니다. 이미 지속성 사례가 있는 경우 두 번째 섹션으로 이동하여 Druid를 소개하세요.

이 프로젝트에서 사용하는 기본 데이터베이스 연결 풀은 HikariDataSource입니다. 이는 Spring Boot의 기본 데이터베이스 연결 풀입니다.

2. Druid 소개

다음으로 Druid를 소개합니다:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.2.8</version>
</dependency>

참고: Spring Boot에서 소개하는 Druid는 위의 것인데 앞으로 모니터링 구성에 더 편리할 것입니다.

다음으로 application.properties에서 WebStatFilter를 구성합니다. WebStatFilter는 web-jdbc 관련 모니터링 데이터를 수집하는 데 사용됩니다.

# 启用 WebStatFilter
spring.datasource.druid.web-stat-filter.enabled=true
# 配置拦截规则
spring.datasource.druid.web-stat-filter.url-pattern=/*
# 排除一些不必要的 url,这些 URL 不会涉及到 SQL 查询
spring.datasource.druid.web-stat-filter.exclusions=*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*
# 开启 session 统计功能
spring.datasource.druid.web-stat-filter.session-stat-enable=true
# 缺省 sessionStatMaxCount 是 1000 个,我们可以按需要进行配置
spring.datasource.druid.web-stat-filter.session-stat-max-count=1000
# 配置 principalSessionName,使得 druid 能够知道当前的 session 的用户是谁
# 根据需要,这个参数的值是 user 信息保存在 session 中的 sessionName
#spring.datasource.druid.web-stat-filter.principal-session-name=
# 下面这个配置的作用和上面配置的作用类似,这个是通过 Cookie 来识别用户
#spring.datasource.druid.web-stat-filter.principal-cookie-name=
# 开启 profile 后就能够监控单个 URL 地址调用列表
#spring.datasource.druid.web-stat-filter.profile-enable=

처음 5개만 구성하면 되고 마지막 3개는 구성할 필요가 없습니다. 구성이 느슨합니다. Brother가 이미 코드에 이를 나열했습니다.

다음으로 StatViewServlet의 구성을 다음과 같이 엽니다.

# 启用内置的监控页面
spring.datasource.druid.stat-view-servlet.enabled=true
# 内置监控页面的地址
spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*
# 开启 Reset All 功能
spring.datasource.druid.stat-view-servlet.reset-enable=true
# 设置登录用户名
spring.datasource.druid.stat-view-servlet.login-username=javaboy
# 设置登录密码
spring.datasource.druid.stat-view-servlet.login-password=123
# 白名单(如果allow没有配置或者为空,则允许所有访问)
spring.datasource.druid.stat-view-servlet.allow=127.0.0.1
# 黑名单(deny 优先于 allow,如果在 deny 列表中,就算在 allow 列表中,也会被拒绝)
spring.datasource.druid.stat-view-servlet.deny=

페이지 주소와 흑백 목록을 구성합니다.

재설정 활성화 속성이 false로 설정되어 있어도 재설정 버튼이 표시되지만 버튼을 클릭해도 재설정되지 않는다는 점에 유의하세요.

그렇습니다.

3. Test

자, 테스트를 위해 Spring Boot 프로젝트를 시작하겠습니다.

Spring Boot 프로젝트가 성공적으로 런칭된 후, 먼저 다음 주소로 접속하세요: http://localhost:8080/druid/login.html

이때, 다음과 같은 로그인 인증 페이지를 보실 수 있습니다:

Spring Boot를 사용하여 SQL 실행 상태를 모니터링하는 방법

Enter us 이전에 설정한 사용자 이름/비밀번호(javaboy/123)로 로그인합니다. 로그인에 성공하면 다음 페이지를 볼 수 있습니다.

Spring Boot를 사용하여 SQL 실행 상태를 모니터링하는 방법

제목 표시줄에서 볼 수 있듯이 데이터 소스, SQL 모니터링 , SQL방화벽 외 기타 기능은 모두 가능합니다.

다음으로 http://localhost:8080/user?username=aaa 주소를 방문하여 SQL을 실행한 후 SQL 모니터링을 확인합니다. http://localhost:8080/user?username=aaa 地址,执行一条 SQL,执行完成后,我们来查看 SQL 监控:

Spring Boot를 사용하여 SQL 실행 상태를 모니터링하는 방법

可以看到,此时就有 SQL 执行的监控记录了。

其他的监控数据也都可以看到,我就不一一列举了。如果小伙伴们觉得这里展示的数据不直观,想自己画 HTML 页面,那也是可以的,点击最后面的 JSON API,可以看到每一个监控项的 JSON 地址,拿着 JSON 自己想怎么显示就怎么显示。

4. 去广告

如果想直接用这个监控页面,这个上面有阿里的广告,如下图,公司用的话就特别别扭:

Spring Boot를 사용하여 SQL 실행 상태를 모니터링하는 방법

我们可能想去掉这个广告,这也很容易。

首先,经过分析,我们发现广告是由一个叫做 common.js 的文件构建出来的,该文件位于 druid-1.2.8.jar!/support/http/resources/js/common.js 这里,common.js 文件中有如下几行:

init : function() {
 this.buildFooter();
 druid.lang.init();
},
buildFooter : function() {
 var html =&#39;&#39;;
 $(document.body).append(html);
},

大概逻辑就是上面这样,buildFooter 方法负责构建页面末尾的广告,在 init 方法中完成对 buildFooter 方法的调用。

那么想要去除广告,就别调用 buildFooter 方法就行了。

所以我们的去广告思路也很简单,写一个过滤器,拦截下对 common.js 的请求,然后做一点点修改,如下:

@WebFilter(urlPatterns = "/druid/js/common.js")
public class RemoveAdFilter implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        String text = Utils.readFromResource("support/http/resources/js/common.js");
        text = text.replace("this.buildFooter();", "");
        servletResponse.getWriter().write(text);
    }
}

可以看到,这个过滤器就是拦截 /druid/js/common.js 请求,拦截到之后,自己去文件中读取 common.js 文件,然后手动替换掉 this.buildFooter();

Spring Boot를 사용하여 SQL 작업을 모니터링하는 방법

에서 SQL이 실행되는 것을 볼 수 있습니다. 이번에는 모니터링이 녹화되었습니다.

다른 모니터링 데이터도 볼 수 있으니 일일이 나열하진 않겠습니다. 여기에 표시되는 데이터가 직관적이지 않다고 느껴 나만의 HTML 페이지를 그려보고 싶다면, 마지막에 JSON API를 클릭하면 각 모니터링 항목의 JSON 주소를 확인할 수 있습니다. JSON 쇼를 원합니다. 🎜🎜4. 광고로 이동 🎜🎜이 모니터링 페이지를 직접 사용하려면 아래와 같이 알리바바 광고가 있는데 회사에서 사용하면 특히 어색합니다. 🎜🎜Spring Boot를 사용하여 SQL 작업을 모니터링하는 방법🎜🎜이 광고를 제거해야 할 수도 있습니다. 쉬운. 🎜🎜우선 분석 결과 druid-1.2.8.jar!/support/http/resources/js/common에 위치한 common.js라는 파일에서 광고가 구성되어 있음을 발견했습니다. js 여기에서 common.js 파일에는 다음 줄이 포함되어 있습니다. 🎜<pre class="brush:java;">@SpringBootApplication @ServletComponentScan(&quot;org.javaboy.druid_monitor.filter&quot;) public class DruidMonitorApplication { public static void main(String[] args) { SpringApplication.run(DruidMonitorApplication.class, args); } }</pre>🎜논리는 아마도 위와 같을 것입니다. buildFooter 메소드는 페이지 끝에 광고를 작성하고 buildFooter 메소드에 대한 호출을 담당합니다. init 메소드에서 완료됩니다. 🎜🎜따라서 광고를 제거하려면 buildFooter 메소드를 호출하지 마세요. 🎜🎜따라서 광고를 제거하려는 우리의 아이디어도 매우 간단합니다. 필터를 작성하고 common.js에 대한 요청을 가로채고 다음과 같이 약간 수정합니다. 🎜rrreee🎜보시다시피 이 필터는 /druid/js/common.js 요청을 가로챈 후 파일에 있는 common.js 파일을 직접 읽은 다음 this.buildFooter(); 문장을 수동으로 바꿉니다. 마지막으로 파일을 작성하면 됩니다. 🎜🎜🎜물론 다음과 같이 시작 클래스에서 필터를 스캔하는 것을 잊지 마세요. 🎜🎜rrreee

위 내용은 Spring Boot를 사용하여 SQL 실행 상태를 모니터링하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제