Heim  >  Artikel  >  Java  >  So verwenden Sie Spring Boot, um den SQL-Ausführungsstatus zu überwachen

So verwenden Sie Spring Boot, um den SQL-Ausführungsstatus zu überwachen

PHPz
PHPznach vorne
2023-05-11 17:13:061463Durchsuche

1. Vorbereitung

Zuerst erstellen wir ein Spring Boot-Projekt und führen MyBatis usw. wie folgt ein:

So verwenden Sie Spring Boot, um den SQL-Ausführungsstatus zu überwachen

Wählen Sie MyBatis- und MySQL-Treiber aus und erstellen Sie einen einfachen Testfall.

Stellen Sie zunächst eine Verbindung zur Datenbank her:

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

Erstellen Sie eine Benutzer-Entitätsklasse und erstellen Sie einen einfachen Abfragefall wie folgt:

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 wie folgt:

<!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>

Ein sehr einfacher Test, nein Nichts zu sagen.

Es steht Ihnen frei, diese Umgebung zu erstellen. Wenn Sie bereits einen Persistenzfall haben, gehen Sie einfach zum zweiten Abschnitt, um Druid vorzustellen.

Der von diesem Projekt verwendete Standard-Datenbankverbindungspool ist HikariDataSource. Dies ist der Standard-Datenbankverbindungspool in Spring Boot.

2. Wir stellen Druid vor:

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

Hinweis:

Der von Spring Boot eingeführte Druid ist für die zukünftige Konfiguration der Überwachung praktischer. Als nächstes konfigurieren wir WebStatFilter in application.properties. WebStatFilter wird zum Sammeln von Web-JDBC-bezogenen Überwachungsdaten verwendet:

# 启用 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=

Wir müssen nur die ersten fünf konfigurieren, die letzten drei müssen nicht konfiguriert werden Die Konfiguration ist lose. Brother hat sie bereits im Code aufgeführt.

Als nächstes öffnen Sie die Konfiguration von StatViewServlet wie folgt:

# 启用内置的监控页面
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=
Konfigurieren Sie die Seitenadresse und die Black- und Whitelist.

Es ist zu beachten, dass die Reset-Schaltfläche zwar angezeigt wird, auch wenn das Reset-Enable-Attribut auf „false“ gesetzt ist, das Klicken auf die Schaltfläche jedoch nicht zurückgesetzt wird.

Okay, das ist es.

3. Testen

Okay, starten wir das Spring Boot-Projekt zum Testen.

Nachdem das Spring Boot-Projekt erfolgreich gestartet wurde, besuchen Sie zunächst die folgende Adresse: http://localhost:8080/druid/login.html

Zu diesem Zeitpunkt sehen wir die Anmeldeauthentifizierungsseite wie folgt:

So verwenden Sie Spring Boot, um den SQL-Ausführungsstatus zu überwachenGeben Sie uns ein. Melden Sie sich mit dem zuvor konfigurierten Benutzernamen/Passwort (javaboy/123) an. Nach erfolgreicher Anmeldung sehen Sie die folgende Seite:

So verwenden Sie Spring Boot, um den SQL-Ausführungsstatus zu überwachenIn der Titelleiste können Sie sehen, dass Datenquelle, SQL-Überwachung, SQL-Firewall und weitere Funktionen sind alles vorhanden.

Als nächstes besuchen wir die http://localhost:8080/user?username=aaa-Adresse und führen eine SQL aus. Nachdem die Ausführung abgeschlossen ist, überprüfen wir die SQL-Überwachung:

So verwenden Sie Spring Boot zum Überwachen des SQL-Vorgangshttp://localhost:8080/user?username=aaa 地址,执行一条 SQL,执行完成后,我们来查看 SQL 监控:

So verwenden Sie Spring Boot, um den SQL-Ausführungsstatus zu überwachen

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

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

4. 去广告

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

So verwenden Sie Spring Boot, um den SQL-Ausführungsstatus zu überwachen

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

首先,经过分析,我们发现广告是由一个叫做 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();

Sie können sehen, dass SQL unter ausgeführt wird Diesmal wurde die Überwachung aufgezeichnet.

Andere Überwachungsdaten sind ebenfalls sichtbar, daher werde ich sie nicht einzeln auflisten. Wenn Sie der Meinung sind, dass die hier angezeigten Daten nicht intuitiv sind und Sie Ihre eigene HTML-Seite erstellen möchten, klicken Sie am Ende auf die JSON-API, um die JSON-Adresse jedes Überwachungselements anzuzeigen Sie wollen mit der JSON-Show.

4. Gehen Sie zu Anzeigen 🎜🎜Wenn Sie diese Überwachungsseite direkt verwenden möchten, befinden sich darauf Alibaba-Anzeigen, die bei Verwendung durch ein Unternehmen besonders umständlich wären: 🎜🎜So verwenden Sie Spring Boot zur Überwachung des SQL-Vorgangs🎜🎜Möglicherweise möchten wir diese Werbung entfernen, was auch der Fall ist einfach. 🎜🎜Zunächst haben wir nach der Analyse herausgefunden, dass die Werbung aus einer Datei namens common.js erstellt wurde, die sich unter druid-1.2.8.jar!/support/http/resources/js/common befindet. js Hier enthält die Datei common.js die folgenden Zeilen: 🎜<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>🎜Die Logik ist wahrscheinlich wie oben. Die buildFooter-Methode ist für die Erstellung der Anzeige am Ende der Seite und den Aufruf der buildFooter-Methode verantwortlich wird in der Init-Methode abgeschlossen. 🎜🎜Wenn Sie also Anzeigen entfernen möchten, rufen Sie einfach nicht die buildFooter-Methode auf. 🎜🎜Unsere Idee, Werbung zu entfernen, ist also auch sehr einfach. Schreiben Sie einen Filter, fangen Sie die Anfrage an common.js ab und nehmen Sie dann ein paar Änderungen vor, wie folgt: 🎜rrreee🎜Wie Sie sehen können, fängt dieser Filter <code ab>/ druid/js/common.js-Anfrage, lesen Sie nach dem Abfangen die Datei common.js selbst in der Datei und ersetzen Sie dann manuell den Satz this.buildFooter();. Zum Schluss schreiben Sie einfach die Datei aus. 🎜🎜🎜Denken Sie natürlich daran, Filter in der Startup-Klasse wie folgt zu scannen: 🎜🎜rrreee

Das obige ist der detaillierte Inhalt vonSo verwenden Sie Spring Boot, um den SQL-Ausführungsstatus zu überwachen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen