Maison  >  Article  >  Java  >  Comment utiliser Spring Boot pour surveiller l'état d'exécution de SQL

Comment utiliser Spring Boot pour surveiller l'état d'exécution de SQL

PHPz
PHPzavant
2023-05-11 17:13:061414parcourir

1. Préparation

Nous créons d'abord un projet Spring Boot et introduisons MyBatis, etc., comme suit :

Comment utiliser Spring Boot pour surveiller létat dexécution de SQL

Sélectionnez les pilotes MyBatis et MySQL et réalisons un cas de test simple.

Connectez-vous d'abord à la base de données :

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

Créez une classe d'entité User et faites un cas de requête simple, comme suit :

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 comme suit :

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

Un test très simple, non Rien à dire.

Vous êtes libre de construire cet environnement. Si vous avez déjà un cas de persistance, rendez-vous simplement dans la deuxième section pour présenter Druid.

Le pool de connexions à la base de données par défaut utilisé par ce projet est HikariDataSource. Il s'agit du pool de connexions à la base de données par défaut dans Spring Boot. En fait, ce n'est pas mal.

2. Présentation de Druid

Ensuite, nous présentons Druid :

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

Remarque : Le Druid introduit par Spring Boot est celui ci-dessus, qui sera plus pratique pour configurer la surveillance à l'avenir.

Ensuite, nous configurons WebStatFilter dans application.properties. WebStatFilter est utilisé pour collecter les données de surveillance liées au 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=

Nous n'avons besoin de configurer que les cinq premiers, et les trois derniers n'ont pas besoin d'être configurés. la configuration est lâche Brother l'a déjà répertorié dans le code.

Ensuite, ouvrez la configuration de StatViewServlet, comme suit :

# 启用内置的监控页面
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=

Configurez l'adresse de la page et la liste noire et blanche.

Il convient de noter que même si l'attribut reset-enable est défini sur false, le bouton de réinitialisation sera affiché, mais cliquer sur le bouton ne le réinitialisera pas.

D'accord, c'est tout.

3. Test

D'accord, commençons le projet Spring Boot pour les tests.

Une fois le projet Spring Boot lancé avec succès, visitez d'abord l'adresse suivante : http://localhost:8080/druid/login.html

À ce moment-là, nous verrons la page d'authentification de connexion, comme suit :

Comment utiliser Spring Boot pour surveiller létat dexécution de SQL

Entrez-nous Connectez-vous avec le nom d'utilisateur/mot de passe précédemment configuré (javaboy/123). Après une connexion réussie, vous pouvez voir la page suivante :

Comment utiliser Spring Boot pour surveiller létat dexécution de SQL

Comme vous pouvez le voir sur la barre de titre, la source de données, la surveillance SQL. , le pare-feu SQL et d'autres fonctions sont tout est disponible.

Ensuite, nous visitons l'adresse http://localhost:8080/user?username=aaa et exécutons un SQL Une fois l'exécution terminée, nous vérifions la surveillance SQL : http://localhost:8080/user?username=aaa 地址,执行一条 SQL,执行完成后,我们来查看 SQL 监控:

Comment utiliser Spring Boot pour surveiller létat dexécution de SQL

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

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

4. 去广告

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

Comment utiliser Spring Boot pour surveiller létat dexécution de 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();

Comment utiliser Spring Boot pour surveiller le fonctionnement SQL

Vous pouvez voir que SQL est exécuté à cette fois Surveillance enregistrée.

D’autres données de surveillance peuvent également être consultées, je ne les énumérerai donc pas une par une. Si vous estimez que les données affichées ici ne sont pas intuitives et souhaitez dessiner votre propre page HTML, cela est également possible. Cliquez sur l'API JSON à la fin et vous pourrez voir l'adresse JSON de chaque élément de surveillance. Vous pouvez l'afficher comment. vous voulez avec le show JSON. 🎜🎜4. Accédez aux publicités 🎜🎜Si vous souhaitez utiliser cette page de surveillance directement, elle contient des publicités Alibaba, comme indiqué ci-dessous, qui seraient particulièrement gênantes si elles étaient utilisées par une entreprise : 🎜🎜Comment utiliser Spring Boot pour surveiller le fonctionnement SQL🎜🎜Nous souhaiterons peut-être supprimer cette publicité, qui est également facile. 🎜🎜Tout d'abord, après analyse, nous avons constaté que la publicité est construite à partir d'un fichier appelé common.js, qui se trouve dans druid-1.2.8.jar!/support/http/resources/js/common. js Ici, le fichier common.js contient les lignes suivantes : 🎜<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>🎜La logique est probablement la même que ci-dessus. La méthode buildFooter est chargée de construire la publicité en fin de page, et de l'appel à la méthode buildFooter. est complété dans la méthode init. 🎜🎜Donc, si vous souhaitez supprimer les publicités, n'appelez simplement pas la méthode buildFooter. 🎜🎜Donc, notre idée de supprimer la publicité est également très simple. Écrivez un filtre, interceptez la requête vers common.js, puis apportez une petite modification, comme suit : 🎜rrreee🎜Comme vous pouvez le voir, ce filtre intercepte <code>/ druid/js/common.js, après l'avoir intercepté, lisez vous-même le fichier common.js dans le fichier, puis remplacez manuellement la phrase this.buildFooter();. Enfin, écrivez simplement le fichier. 🎜🎜🎜Bien sûr, pensez à scanner Filter dans la classe startup, comme suit : 🎜🎜rrreee

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer