java properties xml 118 lines · 4 tabs

Custom Spring Boot starters

David Kumar Jan 2026
4 tabs
package com.example.starter.config;

import com.example.starter.properties.CustomProperties;
import com.example.starter.service.CustomService;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;

@AutoConfiguration
@ConditionalOnClass(CustomService.class)
@EnableConfigurationProperties(CustomProperties.class)
@ConditionalOnProperty(
    prefix = "custom.service",
    name = "enabled",
    havingValue = "true",
    matchIfMissing = true
)
public class CustomAutoConfiguration {

    @Bean
    @ConditionalOnMissingBean
    public CustomService customService(CustomProperties properties) {
        return new CustomService(
            properties.getApiKey(),
            properties.getTimeout(),
            properties.getRetryAttempts()
        );
    }
}
4 files · java, properties, xml Explain with highlit

Spring Boot starters provide autoconfiguration for libraries. I create custom starters to standardize configurations across microservices. Starters contain @Configuration classes with @ConditionalOnClass, @ConditionalOnProperty annotations. spring.factories registers auto-configuration classes. Starters follow naming convention: xxx-spring-boot-starter. Configuration properties use @ConfigurationProperties with metadata for IDE support. Starters encapsulate library setup, reducing boilerplate in applications. Order matters—@AutoConfigureAfter, @AutoConfigureBefore control sequence. Custom starters promote consistency, enable centralized updates, and simplify dependency management. They're essential for maintaining standards across large organizations with many Spring Boot applications.


Related snips

graphql
type User {
    id: ID!
    name: String!
    email: String!
    posts: [Post!]!
    createdAt: String!

GraphQL API with Spring Boot

java graphql spring-boot
by David Kumar 3 tabs
java
package com.example.demo.config;

import org.apache.kafka.clients.consumer.ConsumerConfig;
import org.apache.kafka.clients.producer.ProducerConfig;
import org.apache.kafka.common.serialization.StringDeserializer;
import org.apache.kafka.common.serialization.StringSerializer;

Messaging with Apache Kafka

java kafka messaging
by David Kumar 3 tabs
java
package com.example.demo.controller;

import com.example.demo.dto.FileMetadata;
import com.example.demo.service.FileStorageService;
import org.springframework.core.io.Resource;
import org.springframework.http.HttpHeaders;

File upload and download handling

java spring-boot file-upload
by David Kumar 2 tabs
sql
CREATE TABLE users (
    id BIGSERIAL PRIMARY KEY,
    username VARCHAR(100) NOT NULL UNIQUE,
    email VARCHAR(255) NOT NULL UNIQUE,
    password VARCHAR(255) NOT NULL,
    created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

Database migration with Flyway

java flyway database-migration
by David Kumar 6 tabs
java
package com.example.demo.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;

WebSocket for real-time communication

java websocket spring-boot
by David Kumar 3 tabs
java
package com.example.demo.model;

import lombok.Builder;
import lombok.Data;
import java.time.LocalDateTime;

Builder pattern for object construction

java design-patterns builder
by David Kumar 2 tabs

Share this code

Here's the card — post it anywhere.

Custom Spring Boot starters — share card
Link copied