mirror of
https://github.com/Dannecron/spring-boot-demo.git
synced 2025-12-26 00:32:34 +03:00
add kafka producer, move configs to separate package
This commit is contained in:
39
src/main/kotlin/com/example/demo/config/AppConfig.kt
Normal file
39
src/main/kotlin/com/example/demo/config/AppConfig.kt
Normal file
@@ -0,0 +1,39 @@
|
||||
package com.example.demo.config
|
||||
|
||||
import com.example.demo.provider.CityRepository
|
||||
import com.example.demo.provider.MockedShopProvider
|
||||
import com.example.demo.provider.ProductRepository
|
||||
import com.example.demo.provider.ShopProvider
|
||||
import com.example.demo.services.CityService
|
||||
import com.example.demo.services.CityServiceImpl
|
||||
import com.example.demo.services.ProductService
|
||||
import com.example.demo.services.ProductServiceImpl
|
||||
import com.example.demo.services.kafka.Producer
|
||||
import org.springframework.beans.factory.annotation.Autowired
|
||||
import org.springframework.beans.factory.annotation.Value
|
||||
import org.springframework.context.annotation.Bean
|
||||
import org.springframework.context.annotation.Configuration
|
||||
|
||||
@Configuration
|
||||
class AppConfig(
|
||||
@Value("\${kafka.producer.product.default-sync-topic}")
|
||||
private val defaultProductSyncTopic: String
|
||||
) {
|
||||
@Bean
|
||||
fun shopProvider(): ShopProvider{
|
||||
return MockedShopProvider()
|
||||
}
|
||||
|
||||
@Bean
|
||||
fun productService(
|
||||
@Autowired productRepository: ProductRepository,
|
||||
@Autowired producer: Producer,
|
||||
): ProductService = ProductServiceImpl(
|
||||
defaultProductSyncTopic,
|
||||
productRepository,
|
||||
producer,
|
||||
)
|
||||
|
||||
@Bean
|
||||
fun cityService(@Autowired cityRepository: CityRepository): CityService = CityServiceImpl(cityRepository)
|
||||
}
|
||||
40
src/main/kotlin/com/example/demo/config/ProducerConfig.kt
Normal file
40
src/main/kotlin/com/example/demo/config/ProducerConfig.kt
Normal file
@@ -0,0 +1,40 @@
|
||||
package com.example.demo.config
|
||||
|
||||
import com.example.demo.services.kafka.Producer
|
||||
import com.example.demo.services.kafka.ProducerImpl
|
||||
import com.example.demo.services.kafka.dto.serializer.ProductSerializer
|
||||
import org.apache.kafka.clients.producer.ProducerConfig
|
||||
import org.apache.kafka.common.serialization.StringSerializer
|
||||
import org.springframework.beans.factory.annotation.Value
|
||||
import org.springframework.context.annotation.Bean
|
||||
import org.springframework.context.annotation.Configuration
|
||||
import org.springframework.kafka.core.DefaultKafkaProducerFactory
|
||||
import org.springframework.kafka.core.KafkaTemplate
|
||||
import org.springframework.kafka.core.ProducerFactory
|
||||
|
||||
@Configuration
|
||||
class ProducerConfig(
|
||||
@Value("\${kafka.bootstrap-servers}")
|
||||
val servers: String
|
||||
) {
|
||||
@Bean
|
||||
fun producerFactory(): ProducerFactory<String, Any> {
|
||||
val configProps: MutableMap<String, Any> = HashMap()
|
||||
|
||||
configProps[ProducerConfig.BOOTSTRAP_SERVERS_CONFIG] = servers
|
||||
configProps[ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG] = StringSerializer::class.java
|
||||
configProps[ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG] = ProductSerializer::class.java
|
||||
|
||||
return DefaultKafkaProducerFactory(configProps)
|
||||
}
|
||||
|
||||
@Bean
|
||||
fun kafkaTemplate(): KafkaTemplate<String, Any> = KafkaTemplate(
|
||||
producerFactory(),
|
||||
)
|
||||
|
||||
@Bean
|
||||
fun producer(): Producer = ProducerImpl(
|
||||
kafkaTemplate(),
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user