问题:
可以看一下我的回答,其中部分参考自ChatGPT:
针对你的问题1的解答:
在数据库层使用Druid的Filter功能,将SQL语句拦截下来,并用StatFilter来记录SQL执行的时间,慢查询,执行次数等信息。
在业务层使用Druid的DataSourceProxy,可以拦截Connection对象的操作,记录每个链接的创建时间,销毁时间,以及使用时长等信息。
在Controller层使用Druid的WebStatFilter,监控url的访问情况,以及访问时长,页面访问的次数等信息。
通过上述方案,可以有效的实现Druid对分布式环境的数据源监控,从而更好的分析系统的运行状况,提高系统的性能。
针对你的问题2解答:不是在数据库上进行监控的,Druid 可以监控你在业务层使用的数据库操作。它提供了一个高效的 JDBC 监控和管理功能,其中包括用户名、IP、SQL 语句、时间、执行时间等统计信息。它使用一个内置的数据库进行监控,可以通过 SQL 语句进行监控,而不是通过 MyBatis 注解来实现的。
该回答引用GPTᴼᴾᴱᴺᴬᴵ
Druid是一个数据库连接池和监控平台,它提供了连接池的功能,可以实现高效、安全地管理连接,同时也提供了监控和统计功能,可以监控数据库连接池的状态、执行的SQL语句、响应时间等信息。
要使用Druid的数据源监控功能,需要进行如下配置:
1.引入Druid依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.12</version>
</dependency>
2.配置Druid数据源
# 数据库连接配置
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&failOverReadOnly=false
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
# 数据源配置
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.druid.initial-size=5
spring.datasource.druid.min-idle=5
spring.datasource.druid.max-active=20
spring.datasource.druid.max-wait=60000
spring.datasource.druid.time-between-eviction-runs-millis=60000
spring.datasource.druid.min-evictable-idle-time-millis=300000
spring.datasource.druid.validation-query=SELECT 1 FROM DUAL
spring.datasource.druid.test-while-idle=true
spring.datasource.druid.test-on-borrow=false
spring.datasource.druid.test-on-return=false
spring.datasource.druid.pool-prepared-statements=true
spring.datasource.druid.max-pool-prepared-statement-per-connection-size=20
spring.datasource.druid.filters=stat,wall,log4j
spring.datasource.druid.connection-properties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
配置Druid监控平台
```
@Configuration
public class DruidConfig {
@Value("${spring.datasource.url}")
private String dbUrl;
@Value("${spring.datasource.username}")
private String username;
@Value("${spring.datasource.password}")
private String password;
@Value("${spring.datasource.driver-class-name}")
private String driverClassName;
@Value("${spring.datasource.druid.initial-size}")
private int initialSize;
@Value("${spring.datasource.druid.min-idle}")
private int minIdle;
@Value("${spring.datasource.druid.max-active}")
private int maxActive;
@Value("${spring.datasource.druid.max-wait}")
private int maxWait;
@Value("${spring.datasource.druid.time-between-eviction-runs-millis}")
private int timeBetweenEvictionRunsMillis;
@Value("${spring.datasource.druid.min-evictable-idle-time-millis}")
private int minEvictableIdleTimeMillis;
@Value("${spring.datasource.druid.validation-query}")
private String validationQuery;
@Value("${spring.datasource.druid.test-while-idle}")
private boolean testWhileIdle;
@Value("${spring.datasource.druid.test-on-borrow}")
private boolean testOnBorrow;
@Value("${spring.datasource.druid.test-on-return}")
private boolean testOnReturn;
@Value("${spring.datasource.druid.pool-prepared-statements}")
private boolean poolPreparedStatements;
@Value("${spring.datasource.druid.max-pool-prepared-statement-per-connection-size}")
private int maxPoolPreparedStatementPerConnectionSize;
```
你使用的是人家的数据源,只有有数据源并且真正执行sql的地方才能拦截到sql