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

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

WBOY
WBOYavant
2023-05-15 12:10:061241parcourir

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>

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

Mapper

public interface CourseMapper extends BaseMapper<Course> {
}

Startup class

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

Test class

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

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

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!

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