jdbc-observations / datasource-micrometer

Micrometer Observation API instrumentation and Spring Boot 3 Auto-Configuration for JDBC APIs
Apache License 2.0
50 stars 8 forks source link

Fix query param writing for no params #7

Closed ttddyy closed 1 year ago

ttddyy commented 1 year ago

In DefaultQueryParametersSpanTagProvider when a query does not have any parameters, it throws following exception:

Caused by: java.lang.StringIndexOutOfBoundsException: Index -1 out of bounds for length 0
    at java.base/jdk.internal.util.Preconditions$1.apply(Preconditions.java:55)
    at java.base/jdk.internal.util.Preconditions$1.apply(Preconditions.java:52)
    at java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:213)
    at java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:210)
    at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:98)
    at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:106)
    at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:302)
    at java.base/java.lang.String.checkIndex(String.java:4557)
    at java.base/java.lang.AbstractStringBuilder.charAt(AbstractStringBuilder.java:344)
    at java.base/java.lang.StringBuilder.charAt(StringBuilder.java:91)
    at net.ttddyy.dsproxy.listener.logging.AbstractQueryLogEntryCreator.chompIfEndWith(AbstractQueryLogEntryCreator.java:68)
    at net.ttddyy.observation.tracing.DefaultQueryParametersSpanTagProvider.getParameters(DefaultQueryParametersSpanTagProvider.java:58)
    at net.ttddyy.observation.tracing.DataSourceObservationListener.populateQueryContext(DataSourceObservationListener.java:127)
    at net.ttddyy.observation.tracing.DataSourceObservationListener.startQueryObservation(DataSourceObservationListener.java:112)
    at net.ttddyy.observation.tracing.DataSourceObservationListener.beforeQuery(DataSourceObservationListener.java:93)
    at net.ttddyy.dsproxy.listener.ChainListener.beforeQuery(ChainListener.java:20)
    at net.ttddyy.dsproxy.proxy.StatementProxyLogic.performQueryExecutionListener(StatementProxyLogic.java:308)
    at net.ttddyy.dsproxy.proxy.StatementProxyLogic.access$700(StatementProxyLogic.java:37)
    at net.ttddyy.dsproxy.proxy.StatementProxyLogic$1.execute(StatementProxyLogic.java:123)
    at net.ttddyy.dsproxy.listener.MethodExecutionListenerUtils.invoke(MethodExecutionListenerUtils.java:42)
    at net.ttddyy.dsproxy.proxy.StatementProxyLogic.invoke(StatementProxyLogic.java:120)
    at net.ttddyy.dsproxy.proxy.jdk.StatementInvocationHandler.invoke(StatementInvocationHandler.java:34)
    at jdk.proxy2/jdk.proxy2.$Proxy126.execute(Unknown Source)
    at org.flywaydb.core.internal.jdbc.JdbcTemplate.executeStatement(JdbcTemplate.java:201)
    at org.flywaydb.core.internal.sqlscript.ParsedSqlStatement.execute(ParsedSqlStatement.java:95)
    at org.flywaydb.core.internal.sqlscript.DefaultSqlScriptExecutor.executeStatement(DefaultSqlScriptExecutor.java:210)
    at org.flywaydb.core.internal.sqlscript.DefaultSqlScriptExecutor.execute(DefaultSqlScriptExecutor.java:126)
    at org.flywaydb.core.internal.schemahistory.JdbcTableSchemaHistory$1$1.call(JdbcTableSchemaHistory.java:117)
    at org.flywaydb.core.internal.jdbc.TransactionalExecutionTemplate.execute(TransactionalExecutionTemplate.java:55)
    at org.flywaydb.core.internal.schemahistory.JdbcTableSchemaHistory$1.call(JdbcTableSchemaHistory.java:113)
    at org.flywaydb.core.internal.jdbc.TableLockingExecutionTemplate$1.call(TableLockingExecutionTemplate.java:36)
    at org.flywaydb.core.internal.jdbc.TransactionalExecutionTemplate.execute(TransactionalExecutionTemplate.java:55)
    at org.flywaydb.core.internal.jdbc.TableLockingExecutionTemplate.execute(TableLockingExecutionTemplate.java:31)
    at org.flywaydb.core.internal.database.base.Connection.lock(Connection.java:102)
    at org.flywaydb.core.internal.schemahistory.JdbcTableSchemaHistory.create(JdbcTableSchemaHistory.java:103)
    at org.flywaydb.core.Flyway.lambda$migrate$0(Flyway.java:173)
    at org.flywaydb.core.FlywayExecutor.execute(FlywayExecutor.java:204)
    at org.flywaydb.core.Flyway.migrate(Flyway.java:128)
    at org.springframework.boot.autoconfigure.flyway.FlywayMigrationInitializer.afterPropertiesSet(FlywayMigrationInitializer.java:66)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1800)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1750)
    ... 19 common frames omitted