Skip to content

Instantly share code, notes, and snippets.

Avatar

Stephan Oudmaijer soudmaijer

View GitHub Profile
View TracingAspect.kt
import brave.Tracer
import org.aspectj.lang.ProceedingJoinPoint
import org.aspectj.lang.annotation.Around
import org.aspectj.lang.annotation.Aspect
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.stereotype.Component
@Aspect
@Component
class TracingAspect {
@soudmaijer
soudmaijer / TestProducer.kt
Created Jan 31, 2020
Kotlin Spring Boot Kafka producer example
View TestProducer.kt
package nl.sourcelabs.kafka.producer
import org.slf4j.LoggerFactory
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.CommandLineRunner
import org.springframework.boot.SpringApplication
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.kafka.core.KafkaTemplate
@SpringBootApplication
@soudmaijer
soudmaijer / pom.xml
Created Dec 12, 2019
Maven Kotlin Compiler
View pom.xml
<project>
<build>
<plugins>
<plugin>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-plugin</artifactId>
<executions>
<execution>
<id>compile</id>
<phase>process-sources</phase>
@soudmaijer
soudmaijer / pom.xml
Last active Dec 12, 2019
Maven Java Compiler
View pom.xml
<project>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>9</source>
@soudmaijer
soudmaijer / LockManager.kt
Created Apr 17, 2019
Postgres transaction-level advisory lock implementation that uses Spring JDBC
View LockManager.kt
import org.slf4j.LoggerFactory
import org.springframework.jdbc.core.JdbcTemplate
import org.springframework.stereotype.Component
import org.springframework.transaction.annotation.Propagation
import org.springframework.transaction.annotation.Transactional
import java.time.Duration
interface LockManager {
fun <T> tryWithLock(key: Long, timeout: Duration, function: () -> T): T
}
@soudmaijer
soudmaijer / GiftCardService.kt
Last active Sep 26, 2018
Using Kotlin Coroutines to async fetch data from an external service
View GiftCardService.kt
import kotlinx.coroutines.experimental.GlobalScope
import kotlinx.coroutines.experimental.async
import kotlinx.coroutines.experimental.runBlocking
import java.util.*
data class GiftCard(val id: Int, val code: String)
class GiftCardService {
/**
View Optional.kt
val orderOrElse: Order = orderById?.apply {
// do stuff with order
} ?: Order() // orElse with default
val orderOrElseThrow: Order = orderById?.apply {
// do stuff with order
} ?: throw RuntimeException("orElseThrow") // orElseThrow
val orderId: Long? = orderById?.let {
// do stuff with order
View DoStuffWithOrder.kt
fun doStuffWithOrder(id: Long) {
val orderById: Order? = orderRepository.findOrderById(id)
orderById?.run {
// do stuff with order
}
orderById.id // Compiler error: Only safe ?. or non-null asserted calls are allowed on a nullable receiver of type Order?
}
View DoStuffWithOrder.java
public void doStuffWithOrder(Long id) {
Optional<Order> orderById = orderRepository.findOrderById(id);
orderById.ifPresent( order -> {
// do stuff with order
});
}
View OrderRepository1.kt
import org.springframework.jdbc.core.JdbcTemplate
import org.springframework.jdbc.core.RowMapper
import org.springframework.stereotype.Repository
@Repository
class OrderRepository(private val jdbcTemplate: JdbcTemplate) {
private val rowMapper: RowMapper<Order> = RowMapper { rs, i -> Order(rs.getLong("id")) }
fun findOrderById(id: Long): Order? {
val result = jdbcTemplate.query<Order>("select * from orders where id=:id", rowMapper, id)
You can’t perform that action at this time.