我正在尝试为PGInterval和Duration编写一个自定义数据类型绑定,以将jOOQ与TimescaleDB一起使用。遗憾的是,jOOQ在为数据库例程生成函数时没有使用它。
这是我的绑定类:
import org.jooq.*
import org.jooq.conf.ParamType
import org.jooq.impl.DSL
import org.postgresql.util.PGInterval
import java.sql.SQLFeatureNotSupportedException
import java.sql.Types
import java.time.Duration
import java.util.*
class PostgresIntervalDurationBinding: Binding<Any, Duration> {
override fun converter(): Converter<Any, Duration> {
return object : Converter<Any, Duration> {
override fun from(t: Any?): Duration {
return if (t == null) Duration.ZERO else Duration.ofSeconds(pgIntervalToSeconds(t as PGInterval))
}
override fun to(u: Duration?): Any? {
return if (u == null || u === Duration.ZERO) null else PGInterval().seconds = u.seconds.toDouble()
}
override fun fromType(): Class<Any> {
return Any::class.java
}
override fun toType(): Class<Duration> {
return Duration::class.java
}
}
}
override fun sql(ctx: BindingSQLContext<Duration>?) {
if (ctx?.render()?.paramType() == ParamType.INLINED)
ctx.render()?.visit(DSL.inline(ctx.convert(converter()).value()))?.sql("::interval")
else
ctx?.render()?.sql("?::interval")
}
override fun register(ctx: BindingRegisterContext<Duration>?) {
ctx?.statement()?.registerOutParameter(ctx.index(), Types.VARCHAR)
}
override fun set(ctx: BindingSetStatementContext<Duration>?) {
ctx?.statement()?.setString(ctx.index(), Objects.toString(ctx.convert(converter()).value(), null))
}
override fun get(ctx: BindingGetResultSetContext<Duration>?) {
ctx?.convert(converter())?.value(ctx.resultSet().getString(ctx.index()))
}
override fun get(ctx: BindingGetStatementContext<Duration>?) {
ctx?.convert(converter())?.value(ctx.statement().getString(ctx.index()))
}
override fun set(ctx: BindingSetSQLOutputContext<Duration>?) {
throw SQLFeatureNotSupportedException()
}
override fun get(ctx: BindingGetSQLInputContext<Duration>?) {
throw SQLFeatureNotSupportedException()
}
companion object {
fun pgIntervalToSeconds(t: PGInterval): Long {
var seconds = 0L
with(t){
seconds += Duration.ofSeconds(this.seconds.toLong()).seconds
seconds += Duration.ofMinutes(this.minutes.toLong()).seconds
seconds += Duration.ofHours(this.hours.toLong()).seconds
seconds += Duration.ofDays(this.days.toLong()).seconds
if (months > 0 || years > 0) throw SQLFeatureNotSupportedException()
}
return seconds
}
}
}
这是我在pom中的配置:
<database>
<name>org.jooq.meta.postgres.PostgresDatabase</name>
<includes>.*</includes>
<inputSchema>public</inputSchema>
<excludes>set_adaptive_chunking
| flyway_schema_history
</excludes>
<forcedTypes>
<forcedType>
<userType>java.time.Duration</userType>
<binding>de.ninjaneers.dmc.jooq.databindings.PostgresIntervalDurationBinding
</binding>
<expression>.*interval.*</expression>
<types>.*</types>
</forcedType>
</forcedTypes>
</database>
例如,我希望jOOQ生成例程
time_bucket(bucket_with interval, ts timestamp with time zone)
像
timeBucket(Field<Duration> bucketWidth, Field<Timestamp> ts)
但是我得到了
timeBucket(Field<Object> bucketWidth, Field<Timestamp> ts)
您混淆了两个配置标志:
<expression>.*interval.*</expression>
<types>.*</types>
<代码>
<types>.*interval.*</types>
<expression>.*</expression>
自定义绑定(Custom Binding)允许我们通过代码实现自定义绑定规则,从而完成更高级的业务需求。 示例代码 //.js片段 justep.Bind.bindingHandlers.yourBindingName = { init: function (element, valueAccessor, allBindings, viewModel, bindingContext) {
当我试图使用数据绑定和绑定布局中的自定义XML标记运行项目时,遇到以下描述的构建错误:
我使用react-bootstrap-datetimerangepicker库和bind()从日历中获取选定的日期,但是这个库的“on apply”函数传递了两个参数(event、picker),在“预定义”中,我没有得到假定出现在第二个参数中的startDate和endDate。没有束缚它就不起作用 https://github.com/luqin/react-bootstrap-datetim
不仅仅是falcon-agent采集的数据可以push到监控系统,一些场景下,我们自定义的一些数据指标,也可以push到open-falcon中,比如: 线上某服务的qps 某业务的在线人数 某个接⼝的响应时间 某个⻚面的状态码(500、200) 某个接⼝的请求出错次数 某个业务的每分钟的收⼊统计 …… 一个shell脚本编写的,自定义push数据到open-falcon的例子 # 注意,http
问题内容: 我正在使用REST服务(使用Spring引导),该服务运行批处理作业。我希望Batch仅与嵌入式数据源(用于存储元数据)一起使用,而默认数据源(在我的情况下为Postgres)将用于存储企业实体。 问题在于,Batch会在启动时尝试在默认数据源中创建元数据表(如 batch_job_execution , batch_job_instance 等)。 这是重现问题的示例配置: 批处理配
我正在使用运行批处理作业的REST-service(使用Spring Boot)。我希望Batch仅适用于嵌入式数据源(存储元数据),而默认数据源(在我的例子中为Postgres)将用于存储业务实体。 问题是Batch试图在启动时在默认数据源中创建元数据表(如batch_job_execution、batch_job_instance等)。 以下是重现问题的示例配置: 批量配置 数据源配置 通过这