Releases: keksworks/klite
Releases · keksworks/klite
1.7.3
- openapi: fix detection of default (undefined) schema implementation
- openapi: better support for annotation instances created directly in Kotlin code
- server/openapi: fix analyzing of class-decorated handlers for OpenAPI generation
- core/openapi: fix initialization of Converter-supported types in OpenAPI generation
- json: deprecate KeyConverter and ValueConverter in favor of the ones in
klite-coremodule - server: basicAuth() helper
- jdbc:
DockerCompose.startDB()will now wait until DB actually accepts connections - jdbc: support kotlin.uuid.Uuid and kotlin.time.Instant by default
1.7.2
- server: HttpServer now accepts connections inside of workerPool, not single thread - for better scalability under very heavy load
- server:
start()method now accepts socketBacklog parameter that can be fine-tuned if you have 1000s of parallel connections - server/jobs: ensure that JobRunner logs with the same instanceId as the Server (they use the same RequestIdGenerator now)
- server:
metrics()can be provided with custom access annotations and includesrequestsActivemetric now - server:
metrics()can output Prometheus/OpenMetrics format ifAcceptheader requests it - jdbc:
metrics()for PooledDataSource connection pool include"count"and"dropped"metrics now - jdbc: changesets now support providing multiple comma-separated contexts
- jdbc: PooledDataSource now logs number of connections in the pool when dropping previous ones
- jdbc: BaseCrudRepository.get(forUpdate = true) now uses "for no key update" for Postgres to avoid unnecessary child rows locking
1.7.1
- GitHub organization changed to keksworks - update your dependency organization
- jdbc: PooledDataSource.queryTimeout can be configured separately from pool connection timeout
- server: MultipartParser and MultipartRenderer now support binary data/files
- server: nullable List of @QueryParam will now get null value if parameter is missing, not empty list
- server: introduced Metrics for publishing of app metrics, and a metrics() handler
- server: RequestTransactionHandler now supports exclude methods, to skip transactions for e.g. GET/HEAD requests
- core: new extensions for easier working with Java HttpClient, like get()/post()/put()
- xml: new module for fast and lightweight XML parsing
- Java 25 support
1.7.0
Note: this release contains small backwards-incompatible changes that may need adjusting in some projects, see below:
- core: TSIDGenerator can now be used with custom classes outside TSID companion
- core/jdbc: Any.toValues()/BaseCrudRepository.persister() will now return KProperty1 keys, not Strings for added type-safety.
- If you need to use String keys, use
toValues().mapKeys { it.key.name } - You may get "column specified more than once" errors if you have code like
entity.toValues() + ("hello" to 123), replace"hello"withEntity::helloin that case - It is now recommended to use
toValues()for both providing values and skipping them, e.g.entity.toValues(Entity::field1 = "other value, skip = setOf(Entity::field2))- this avoids creation of intermediate maps and is faster - PropValue type alias now accepts 2 type arguments, so replace usages of
PropValue<T>withPropValue<T, *>
- If you need to use String keys, use
- json:
toJsonValues()introduced for the cases when you want to modify how an entity is serialized into json (e.g. remove some keys) - jdbc: introduce
@Columnannotation to override DB column names for entity fields, previous internal typealiasColumnrenamed toColName - jdbc: make it possible to override how Enum/Array is stored using JdbcConverter, default to toString() for enums
- jdbc: db.upsert() will now work as SQL MERGE for non-Postgres databases
- server: use<>() call will fail if called inside context {} for Extensions that need Server-level initialization
- server: allow body in DELETE requests, as sometimes people do that #117
- json: improved detection if inline classes should be rendered as their value type or a string
- jackson: DeserializationFeature.FAIL_ON_TRAILING_TOKENS is now enabled by default
- smtp: SmtpEmailSender will now log the successful email sent (to address and subject)
- openapi:
- skip @AttrParam from OpenAPI spec
- allow specifying SwaggerUI config parameters in openApi() function
- skip @apiresponse responseCode=default
1.6.16
- jdbc: restore exactly the same checksums of DBMigrator changesets containing comments
1.6.15
- core: log current active ENV when it is initialized
- jdbc: improve AlreadyExistsException message (always starts with errors.alreadyExists)
- jdbc: better handling of comments inside quoted strings in migration scripts
- csv: support for providing a different encoding than UTF-8 when parsing or generating
- openapi: adding openApi() to context will now add /openapi.json, /openapi.html and /openapi routes, which will also serve Swagger-UI automatically
1.6.14
- jdbc: add helpful details to Postgres exception "no hstore extension installed"
- core: TSID.deterministic introduced for using in test data generation
- json: TSGenerator updates
- wraps records with enum keys into Partial to avoid TS wanting all the keys to be present
- outputs provided custom types as separate types and references them
- accepts -o and -p arguments for simpler usage
- optionally can generate test data from Kotlin objects using -t
1.6.13
- core: added PATCH method to TypedHttpClient
- jdbc: can use Config ENV vars in migration scripts
- jdbc-test: JUnitAssertionImprover removed, as Atrium 1.3+ improved error messages itself
- server: disallow direct assignments to
HttpExchange.responseTypeto avoid confusion,HttpExchange.send()orstartResponse()must be used to bypass renderers
1.6.12
- smtp: new module introduced for sending emails over SMTP
- server: expose Server.listen and bound Server.address as separate properties #93
- server: Server.use() can register extensions that implement multiple supported interfaces at the same time
- server: useOnly() will now add parser/renderer if it wasn't yet registered, to avoid confusion
- server: HttpExchange.rawBody can now be accessed more than once (is a lazy property now)
- jdbc:
distinctandnotDistinctoperators introduced for where expressions - jdbc: PooledDataSource: DB connections closed by server now correctly decrease connection pool size
- json: fixed some very specific regressions in TSGenerator
1.6.10
- server:
Server(InetSocketAddress(0))can now be used to bind to any available port. - server: make idle restarts quick #96
- server: initialize
HttpExchange.pathParamseven no route is matched (404), for decorators #82 - server: put list into queryParams if user specifies multiple parameters with the same name, introduce
e.queryList#63 - jdbc: between operator introduced with open and closed ranges, also in and notIn
- jdbc: @NoTransaction can now be used on jobs
- jdbc: fixed usage of multiple different DataSources when there is an active transaction
- jdbc: allow calling of
PooledConnection.close()multiple times #80 - jdbc: support for automatic persisting/mapping of arrays of @JvmInline classes (e.g. TSID)
- json: fix TSGenerator on Windows
- json: TSGenerator will now use more type-safe string template types for java.time classes, e.g.
${number}-${number}-${number}instead ofstring - slf4j: allow providing of
LOGGER_CLASSvia.envfile ifConfig.useEnvFile()is called before any logging calls #92 - jackson: serialize enums using their toString() method by default, this fixes
openapimodule usage withjackson#88 - liquibase: do not close jdbc connection if it was passed by user #81