Rumah > Java > javaTutorial > teks badan

Bagaimana SpringBoot menyepadukan P6Spy untuk melaksanakan pengelogan SQL

WBOY
Lepaskan: 2023-05-15 12:10:06
ke hadapan
1308 orang telah melayarinya

Pengenalan kepada P6Spy

P6Spy ialah rangka kerja sumber terbuka yang boleh digunakan untuk memintas dan mengubah suai pernyataan manipulasi data dalam aplikasi.

Pernyataan SQL boleh dipintas melalui P6Spy, yang bersamaan dengan perakam pernyataan SQL, supaya kita boleh menggunakannya untuk analisis berkaitan, seperti analisis prestasi.

Senario aplikasi

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>
Salin selepas log masuk

application.yml

musim bunga:
sumber data:
nama kelas pemandu: com.mysql.cj.jdbc.Pemandu
#nama-kelas-pemandu: com.p6spy.engine.spy.P6SpyDriver
taip: 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
nama pengguna: root
kata laluan: root

# Buka output log sql mybatis-plus
mybatis-plus:
konfigurasi:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

entiti

@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("course_1")
public class Course {
    @TableField("cid")
    private Long cId;
    private String cName;
    private Integer userId;
    private String cStatus;
}
Salin selepas log masuk

Mapper

public interface CourseMapper extends BaseMapper<Course> {
}
Salin selepas log masuk

Kelas permulaan

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

Kelas ujian

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

mybatis-plusAnda juga boleh mencetak sql output log, Tetapi ia bukan kesan yang kita mahu Bagaimana untuk mengawal output log sql yang diingini boleh menggunakan produk sumber terbuka P6Spy.

Bagaimana SpringBoot menyepadukan P6Spy untuk melaksanakan pengelogan SQL

Bermula dengan P6Spy

spy.properties

resourcesTambahkan fail konfigurasi pada direktori, serupa dengan log4j.xml, rekod maklumat konfigurasi

module.log=com.p6spy.engine.logging.P6LogFactory,com.p6spy.engine.outage.P6OutageFactory
# cetakan log sql
# 1. logMessageFormat= com.p6spy .engine.spy.appender.SingleLineFormat
# 2. logMessageFormat=com.p6spy.engine.spy.appender.CustomLineFormat
# customLogMessageFormat=%(currentTime) | |. maklumat sambungan : %(kategori)-%(connectionId) |. jalankan sql: %(sql)
# 3. Pencetakan log tersuai (nama kelas yang layak sepenuhnya)
logMessageFormat=cn.zysheep.config.P6SPYConfig
# Gunakan sistem log untuk merekod sql
appender=com.p6spy.engine.spy.appender.Slf4JLogger
## Konfigurasikan pengecualian Log pengelogan
excludecategories=info,debug,result,batc,resultset
# Sediakan dan gunakan pemacu p6spy sebagai proksi
deregisterdrivers=true
# Format tarikh
dateformat=yyyy-MM-dd HH:mm:ss
# Pemacu sebenar
driverlist=com. mysql.cj.jdbc .Driver
# Sama ada untuk mendayakan rakaman SQL perlahan
outagedetection=true
# Slow SQL recording standard saat
outagedetectioninterval=2

P6Spy mempunyai format output SQL terbina dalam, seperti fail konfigurasi di atas. Di sini kami menggunakan pencetakan log SQL tersuai

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);
    }
}
Salin selepas log masuk

application.yml

spring:
sumber data:
# nama kelas pemandu : com.mysql.cj.jdbc.Driver
nama kelas pemandu: com.p6spy.engine.spy.P6SpyDriver
type: 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
nama pengguna: root
kata laluan: root

# Buka output log sql mybatis-plus
mybatis-plus:
konfigurasi:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

Kelas ujian kekal tidak berubah

Bagaimana SpringBoot menyepadukan P6Spy untuk melaksanakan pengelogan SQL

Atas ialah kandungan terperinci Bagaimana SpringBoot menyepadukan P6Spy untuk melaksanakan pengelogan SQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan