Como o Spring Boot monitora a operação do SQL?

Hoje quero falar com vocês sobre a função de monitoramento no Druid.

Acredito que muitos pequenos parceiros usaram o pool de conexão do banco de dados Druid. Pessoalmente, o Druid é um projeto de código aberto relativamente bem-sucedido no Alibaba. Ao contrário do Fastjson, o Druid sempre foi excelente em todos os aspectos, com funções completas, uso conveniente e uso básico. Sem mais delongas, vamos dar uma olhada nas funções de monitoramento no Druid hoje.

1. Preparações

Primeiro, vamos criar um projeto Spring Boot, apresentar MyBatis, etc., da seguinte forma:

Escolha os drivers MyBatis e MySQL e faça um caso de teste simples.

Vamos nos conectar ao banco de dados primeiro:

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

Crie uma classe de entidade User e faça um caso de consulta simples, como segue:

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 é o seguinte:

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

Um teste muito simples, sem muito a dizer.

Todos são livres para construir este ambiente.Se você já tem um caso persistente, então vá diretamente para a segunda seção para apresentar o Druid.

Agora, o pool de conexão de banco de dados padrão usado neste projeto é HikariDataSource, que é o pool de conexão de banco de dados padrão no Spring Boot. Na verdade, isso não é ruim.

2. Apresentando o Druida

Em seguida, apresentamos Druid:

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

Observe que o Druid introduzido pelo Spring Boot é o acima, o que será mais conveniente ao configurar o monitoramento no futuro.

Em seguida, configuramos o WebStatFilter em application.properties. O WebStatFilter é usado para coletar dados relacionados ao monitoramento do 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=

Podemos configurar as cinco primeiras, e as três últimas não precisam ser configuradas.O significado de cada configuração foi listado no código.

Em seguida, abra a configuração do StatViewServlet, da seguinte forma:

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

Configure o endereço da página e configure a lista preta e branca.

Deve-se notar que mesmo se a propriedade reset-enable estiver configurada para false, o botão reset será exibido, mas clicar no botão não irá redefini-lo.

OK é isso.

3. Teste

Ok, vamos iniciar o projeto Spring Boot para teste.

Depois que o projeto Spring Boot for iniciado com sucesso, primeiro visite o seguinte endereço:

  • http://localhost:8080/druid/login.html

Neste ponto, veremos a página de autenticação de login, como segue:

Digite o nome de usuário/senha (javaboy/123) que configuramos anteriormente para efetuar login. Após efetuar login com sucesso, você poderá ver a seguinte página:

Como você pode ver na barra de título, fonte de dados, monitoramento SQL, firewall SQL e outras funções estão disponíveis.

Em seguida, acessamos o http://localhost:8080/user?username=aaaendereço e executamos um SQL. Após a execução, vamos visualizar o monitoramento do SQL:

Como você pode ver, há um registro de monitoramento da execução do SQL neste momento.

Outros dados de monitoramento também podem ser vistos, não vou listá-los um a um. Se você acha que os dados exibidos aqui não são intuitivos e deseja desenhar páginas HTML por conta própria, tudo bem. Clique na API JSON no final para ver o endereço JSON de cada item de monitoramento e exibi-lo conforme quer com JSON. show.

4. Anúncios Go

Se você quiser usar essa página de monitoramento diretamente, esta tem o anúncio da Ali, como mostra a figura abaixo, se a empresa usar, vai ser muito estranho:

Podemos querer nos livrar desse anúncio, o que também é fácil.

Primeiro, após análise, descobrimos que o anúncio é construído a partir de um arquivo chamado common.js, que está localizado druid-1.2.8.jar!/support/http/resources/js/common.jsaqui , e o arquivo common.js tem as seguintes linhas:

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

A lógica geral é como acima, o método buildFooter é responsável por construir o anúncio no final da página, e a chamada ao método buildFooter é completada no método init.

Portanto, se você deseja remover anúncios, apenas não chame o método buildFooter.

Então nossa ideia de publicidade também é bem simples, escreva um filtro, intercepte a requisição para common.js, e depois faça uma pequena modificação, como segue:

@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);
    }
}

Pode-se ver que este filtro é para interceptar a /druid/js/common.jssolicitação . Após interceptar, leia o arquivo common.js no arquivo por conta própria, depois substitua manualmente this.buildFooter();essa frase e, finalmente, grave o arquivo.

Claro, lembre-se de verificar o Filtro na classe de inicialização, da seguinte forma:

@SpringBootApplication
@ServletComponentScan("org.javaboy.druid_monitor.filter")
public class DruidMonitorApplication {
    
    

    public static void main(String[] args) {
    
    
        SpringApplication.run(DruidMonitorApplication.class, args);
    }

}

Pronto, é isso, com esse filtro os anúncios sumiram.

Você pode baixar este caso respondendo a druid_monitor no fundo da conta oficial.

Referências:

  • https://github.com/alibaba/druid/wiki/

Acho que você gosta

Origin blog.csdn.net/u012702547/article/details/122941479
Recomendado
Clasificación