Maison > Java > javaDidacticiel > Comment SpringBoot intègre P6Spy pour implémenter la journalisation SQL

Comment SpringBoot intègre P6Spy pour implémenter la journalisation SQL

WBOY
Libérer: 2023-05-15 12:10:06
avant
1336 Les gens l'ont consulté

Introduction à P6Spy

P6Spy est un framework open source qui peut être utilisé pour intercepter et modifier les instructions de manipulation de données dans les applications.

Les instructions SQL peuvent être interceptées via P6Spy, qui équivaut à un enregistreur d'instructions SQL, afin que nous puissions l'utiliser pour des analyses associées, telles que l'analyse des performances.

Scénario d'application

pom

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.20</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
            <groupId>p6spy</groupId>
            <artifactId>p6spy</artifactId>
            <version>3.8.2</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.83</version>
        </dependency>
    </dependencies>
Copier après la connexion

application.yml

spring:
source de données:
nom de classe de pilote : com.mysql.cj.jdbc.Driver
#nom de classe de pilote : com.p6spy.engine .spy.P6SpyDriver
tapez : com.alibaba.druid.pool.DruidDataSource
url : jdbc:mysql://localhost:3306/course_db?serverTimezone=GMT%2B8
# url : jdbc:p6spy:mysql://localhost : 3306/course_db?serverTimezone=GMT%2B8
nom d'utilisateur : root
mot de passe : root

# Ouvrez la sortie du journal SQL de mybatis-plus
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging. stdout .StdOutImpl

entity

@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("course_1")
public class Course {
    @TableField("cid")
    private Long cId;
    private String cName;
    private Integer userId;
    private String cStatus;
}
Copier après la connexion

Mapper

public interface CourseMapper extends BaseMapper<Course> {
}
Copier après la connexion

Startup class

@SpringBootApplication
@MapperScan(basePackages = "cn.zysheep.mapper")
public class ShardingjdbcdemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(ShardingjdbcdemoApplication.class, args);
    }
}
Copier après la connexion

Test class

@SpringBootTest
@Slf4j
class ShardingjdbcdemoApplicationTests {
    @Autowired
    private CourseMapper courseMapper;
    @SneakyThrows
    @Test
    void findCourse() {
        courseMapper.selectList(null).forEach(System.out::println);
    }
}
Copier après la connexion

mybatis-plus peut également imprimer le journal SQL de sortie, mais ce n'est pas l'effet souhaité , comment ? Pour contrôler la sortie du journal SQL souhaitée, vous pouvez utiliser le produit open source P6Spy. mybatis-plus也可以打印输出的sql日志,但是不是我们想要的效果,如何来控制想要的sql日志输出,可以使用P6Spy开源产品。

Comment SpringBoot intègre P6Spy pour implémenter la journalisation SQL

P6Spy入门使用

spy.properties

resources目录添加配置文件,类似log4j.xml

Comment SpringBoot intègre-t-il P6Spy pour implémenter les journaux SQL

Mise en route avec P6Spy

spy.properties

Ajoutez un fichier de configuration au répertoire resources, similaire à log4j.xml, pour enregistrer les informations de configuration


module.log=com .p6spy.engine.logging.P6LogFactory , com.p6spy.engine.outage.P6OutageFactory
# impression du journal SQL
# 1. logMessageFormat=com.p6spy.engine.spy.appender.SingleLineFormat
# 2. logMessageFormat=com.p6spy. engine.spy.appender.CustomLineFormat
# customLogMessageFormat=%(currentTime) | Temps d'utilisation SQL : %(executionTime) ms | informations de connexion : %(category)-%(connectionId) | exécuter sql : %(sql)
# 3. Impression de journal personnalisée (nom de classe complet)
logMessageFormat=cn.zysheep.config.P6SPYConfig
# Utiliser le système de journalisation pour enregistrer sql
appender=com.p6spy.engine.spy.appender.Slf4JLogger
## Configurer les exceptions de journalisation
includecategories=info,debug,result, batc,resultset
# Définir pour utiliser le pilote p6spy comme proxy
deregisterdrivers=true
# Format de date

dateformat=aaaa-MM-jj HH:mm:ss
# Pilote actuel

driverlist=com. mysql.cj.jdbc.Driver

# S'il faut activer l'enregistrement SQL lent

outagedetection=true

# Enregistrement SQL lent en secondes standard

outagedetectioninterval=2

P6Spy a un format de sortie SQL intégré, comme indiqué dans le fichier de configuration ci-dessus . Ici, nous utilisons l'impression de journaux SQL personnalisée

P6SPYConfig

public class P6SPYConfig  implements MessageFormattingStrategy {
    @Override
    public String formatMessage(int connectionId, String now, long elapsed, String category, String prepared, String sql, String url) {
        Map<String, Object> message = new LinkedHashMap<>(8);
        String newPrepared = prepared.replace("   ", "").replace("\n", " ");
        message.put("prepared", newPrepared);
        String newSql = sql.replace("   ", "").replace("\n", " ");
        message.put("sql", newSql);
        return JSONObject.toJSONString(message, true);
    }
}
Copier après la connexion

application.yml


spring:
datasource: # driver-class-name: com.mysql.cj.jdbc.Driver

driver-class-name: com . p6spy.engine.spy.P6SpyDriver
tapez : com.alibaba.druid.pool.DruidDataSource
# url : jdbc:mysql://localhost:3306/course_db?serverTimezone=GMT%2B8
url : jdbc:p6spy:mysql : / /localhost:3306/course_db?serverTimezone=GMT%2B8

nom d'utilisateur : root mot de passe : root

# Activez la sortie du journal SQL de mybatis-plus

mybatis-plus:Comment SpringBoot intègre P6Spy pour implémenter la journalisation SQL configuration:

log-impl : org.apache. ibatis .logging.stdout.StdOutImpl🎜🎜🎜Classe de test inchangée🎜🎜🎜🎜

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!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal