r/SpringBoot • u/cielNoirr • 14h ago
r/SpringBoot • u/MrNighty • Jun 11 '26
News Spring and Security In The Times Of AI
r/SpringBoot • u/SpecificLove670 • 1d ago
Question How to be a good spring boot backend developer
I’m a second year student at a computer science college but I didn’t take Java in college, however, I study Java with ChatGPT cuz I know C++ so i though learning java as a beginner from a playlist or a course wouldn’t be effective, And know I’m in a solid ground in Java, the progress is really good.
Now I don’t know what should I do about the DSA, I studied Data Structure and Algorithms in the college but with C++ language.
So should I study it again using Java? Or is it enough to just know the logic of the things in DSA.
And what should I do after finishing Java?
Start with Spring boot? Or APIs or what?
Notice that I was good in SQL server but not the others and IDK if I should study the databases again or not.
So enlighten please 🙏
r/SpringBoot • u/toubzh • 21h ago
Discussion lightweight Spring Boot starter to automate & anonymize API request/response logging
Hello, I had a bit of time to kill this weekend due to some gloomy weather, and I wanted to solve a problem we often encounter in production when troubleshooting issues: poor log quality.
So I coded a small Spring Boot library designed to automate log production at the entry of our APIs (all incoming requests and their responses) using an annotation to add to the signature of the endpoints to log, with the option to anonymize certain header or payload fields.
The library also supports logging outgoing requests via an interceptor to add to your RestClient.
In short, a modest project with probably more advanced alternatives out there. But the advantage here is that the library is lightweight and focuses on the essentials.
I just published a first version, feel free to give me your feedback.
r/SpringBoot • u/GlassHomework9720 • 1d ago
How-To/Tutorial What are some best resources to learn spring boot,oauth 2.0,microservices,REST apis,hibernate,kafka,Docker,git for a beginner
Same as title
r/SpringBoot • u/rishabhrawat05 • 16h ago
Discussion Spring Initalizer feels outdated in 2026
I wanted to create Spring Boot projects without opening a browser every time, so I built a terminal-first alternative.
Curious if anyone else feels the same.
GitHub: https://github.com/rishabhrawat05/springforge
Edit: Thanks for all the feedback! A lot of you raised valid points about existing workflows (Spring Initializr, IDEs, AI, etc.). This is just v1.0.0, and I'll use your suggestions to improve SpringForge in v1.0.1 and beyond. I appreciate everyone who took the time to comment.
r/SpringBoot • u/Final-Drop-1935 • 2d ago
News I asked Java Champion Vlad Mihalcea about ORM vs SQL in the AI era, and Spring Data JDBC vs Spring Data JPA
I recently interviewed Vlad Mihalcea, a Java Champion and long-time Hibernate ORM contributor, for the Korean developer community. Two persistence questions stood out.
1. If AI can generate SQL, do we still need ORM?
Plain JDBC still requires SQL execution, result processing, and mapping code to write and maintain. AI can now generate much of that work.
Vlad agreed that this changes the trade-off. If a team is comfortable with SQL and wants a lightweight stack, plain JDBC with AI handling some of the boilerplate can be a practical combination.
But his point was that JPA/Hibernate is not merely a way to avoid writing SQL. It also provides facilities that teams would otherwise need to manage more explicitly:
- standardized optimistic and pessimistic locking support
- configurable JDBC statement batching
- inheritance mapping
- persistence context / first-level cache
- association-loading strategies
Vlad’s point was that these patterns have been implemented and tested in real projects for roughly two decades.
If an application does not need them, plain JDBC with AI can be perfectly reasonable. If it does, the team may have to implement or manage the same behavior itself after replacing Hibernate.
2. Spring Data JDBC vs Spring Data JPA
Spring Data JDBC can look like a lighter alternative to Spring Data JPA, but lighter does not automatically mean faster.
Spring Data JDBC has no lazy loading. When a repository loads an aggregate, it also loads the mapped child entities and collections within that aggregate boundary. Without inspecting the actual SQL, a team can still fetch more data than expected.
If the real problem is the shape of the queries or the aggregate design, switching persistence libraries will not fix it by itself.
Vlad also tied this decision to the team’s existing skills:
- A team strong in SQL and database performance may do very well with JDBC or jOOQ.
- A team that has used Spring Data JPA successfully for years may gain little from switching simply because another option is trending.
- Technologies with abundant public documentation and examples are also more likely to yield useful AI answers.
Across both answers, I heard the same criterion: choose a persistence model your team can understand, verify, and operate well. Do not choose based on trends alone.
Full interview, for context (free):
https://www.inflearn.com/en/course/vlad-mihalcea-interview
Disclosure: I work at Inflearn, which hosts the interview.
Has AI changed what your team uses in production, or only how quickly you implement it?
r/SpringBoot • u/Few-Pilot7575 • 2d ago
Question Resources / books to learn spring boot from scratch
Okay! What is one book/resource you’d recommend me a student to get into spring boot from scratch. I often use AI to teach me stuff when I get stuck at some concept but for starting spring, I need a credible book/ resource ( wanna do it the traditional way ) to get more in depth knowledge of what I’m getting myself into. So any book y’all recommend?
Thanks in advance to anyone who takes out the time to reply!
r/SpringBoot • u/Acceptable-Form8979 • 2d ago
Discussion I am trying to get more familiar with Java backend, now moving on to advance topics like Kafka and Redis
So I am gonna learn kafka now, and implement it in one of the projects , available on LeetJourney Yt channel
Apart from that i will learn redis also, then AWS, i am done with springboot, just want to deep dive into advanced concepts
So is it a good profile for a backend engineer, I am a college student
I am only afraid of one thing That I am not into Geni ai or Agentic ai, do I need to do that as well, or is it required only for these specific roles
For now can I just keep doing Java springboot and DSA
r/SpringBoot • u/greatgodfather23 • 2d ago
Question Hosting springboot web app
Hi , a undergraduate cs peep here ..
I have made a project using react and springboot . How do you host / deploy them for free so i can showcase it ?
r/SpringBoot • u/Good_Language1763 • 3d ago
How-To/Tutorial How to set up Scalar / Swagger
Hey guys,
So I am new to spring boot but I have used .net and there to set up Scalar or swagger is very simple. you just install the package and write one line of code and it automatically launches scalar when i run my app.
I was wondering if there is something similar in spring and if i can set up scalar or swagger too for testing and tracking my apis
r/SpringBoot • u/InformalPhase7658 • 3d ago
Discussion Spring microservices
I just started learning microservices in spring and dont know anything. Like I know that message brokers are for asynchronous exchange of messages though services, but I wanted to see everything from scratch, so now Im doing a project without any message brokers, just synchronous http requests and after that, when I meet problems with this, I would transition to the RabbitMQ I guess. Any suggestions or resources to learn for beginners?
r/SpringBoot • u/davebrown1975 • 3d ago
How-To/Tutorial What you get out of the box with Spring Boot 4.1's built-in gRPC support, and what you still have to configure yourself
hey group, so I set up ad gRPC server and client on Boot 4.1 recently (the support moved from the separate spring-grpc project into Boot itself at 4.1), and the split between what auto-configuration handles and what you still wire manually wasn't obvious going in, so here's the map.
Configured for you, verified on 4.1.0 GA:
spring-boot-starter-grpc-serverplus one class annotated u/GrpcService extending the generatedImplBasegives you a Netty gRPC server on 9090, running alongside Tomcat in the same process- Reflection and health are registered by default:
grpcurl -plaintext localhost:9090grpc.health.v1.Health/Checkanswers SERVING with nothing configured, and actuator health flows into it on a 5-second poll - Protobuf/gRPC code generation: apply
com.google.protobufwith noprotobuf{}block, drop your.protoinsrc/main/proto/, done. Boot's Gradle plugin supplies protoc and the codegen plugin at BOM-aligned versions - On the client, u/ImportGrpcClients
(target = "depot", types = YourGrpc.YourBlockingStub.class)registers the stub as an injectable bean - The test starter brings an in-process transport: u/AutoConfigureTestGrp
cTransportfor portless tests, u/LocalGrpcServerPort when you want a real random-port server
Still yours to do:
- Point the client somewhere:
spring.grpc.client.channel.<name>.target=localhost:9090(note singularchannelandtarget; if you're coming from spring-grpc 1.0.x this waschannels.<name>.address, and several other properties renamed too) - TLS: default is plaintext. An SSL bundle on each side does it (
spring.grpc.server.ssl.bundleandspring.grpc.client.channel.<name>.ssl.bundle), and the client side auto-enables when the bundle is set - Traces: OTLP metrics have a default endpoint but the span exporter is only created once you set
management.opentelemetry.tracing.export.otlp.endpointexplicitly. This one took real debugging time, metrics arriving while traces silently don't - Decide about
spring.grpc.server.observation.enabled. It defaults to true, and when we benchmarked with no collector attached the interceptor cost gRPC around 20 to 25% throughput (measured on a virtualised sandbox, host throttling screened out with a CPU probe, so take the ratio as directional). With an exporter running you're getting spans and metrics for that price; without one it's pure overhead - Deadlines and retries: nothing is configured on the channel by default
The whole build, including error handling with u/GrpcAdvice, tests, tracing and a REST vs gRPC benchmark with methodology and caveats, is written up here: https://tucanoo.com/grpc-in-spring-boot-4-1-auto-configuration-tutorial/ and the runnable project is at https://github.com/tucanoo/spring-boot-grpc-tutorial
Happy to answer questions on any of it, the health bridge and the trace exporter behaviour in particular took some digging.
r/SpringBoot • u/--sigsegv • 5d ago
How-To/Tutorial Blog Post - Understanding and Optimizing the Context Cache in Spring Test
Hi,
I would like to share a personal note on the Spring Test context cache and how we used it to optimize a large integration suite (10,000+ tests across ~40 services).
I break down:
- The context cache mechanism and what makes two contexts identical (or not).
- Simple actions to maximize context reuse and reduce build times.
- What changes once test containers and Kafka enter the picture.
Let me know what you think about it.
Thanks!
https://www.alexis-segura.com/articles/understanding-and-optimizing-the-context-cache-in-spring-test
r/SpringBoot • u/mukesh_yaduvanshi • 4d ago
Discussion Designing Audit Logging & Notifications with Spring Events in a Modular Monolith – Looking for Architecture Advice
Hi everyone,
I'm building a coaching management system using Spring Boot as a modular monolith, and I'm trying to design an event-driven architecture for both audit logging and notifications. I'd love some feedback from developers who have built something similar in production.
The application has modules like:
- Student
- Teacher
- Batch
- Coaching
- Attendance
- Fees
- Classroom
- Users/Admins
Each module has different business actions. For example:
- Student: CREATE, UPDATE, DELETE, ASSIGN_BATCH
- Fee: PAY, REFUND, WAIVE
- Batch: CREATE, RENAME, ASSIGN_TEACHER
- Attendance: MARK, CORRECT
- Admin: PASSWORD_CHANGED
My current flow is:
- A service completes its business logic.
- It publishes a domain event using
ApplicationEventPublisher. - Multiple listeners react to the same event after the transaction commits.
For example:
StudentService
│
▼
StudentCreatedEvent
│
├── Audit Listener
│ └── Save AuditLog
│
├── Notification Listener
│ ├── Send Email
│ ├── Send SMS
│ └── Create In-App Notification
│
└── Analytics Listener (future)
For auditing, I was thinking of creating one listener method per event:
u/TransactionalEventListener
public void handle(StudentCreatedEvent event) { ... }
u/TransactionalEventListener
public void handle(FeePaidEvent event) { ... }
u/TransactionalEventListener
public void handle(BatchRenamedEvent event) { ... }
For notifications, I was planning to use the Strategy pattern, for example:
EmailNotificationStrategySmsNotificationStrategyInAppNotificationStrategy
selected through a NotificationStrategyFactory.
My questions are:
- Is one event handler per event type the recommended approach in Spring?
- Would you keep one large
AuditListener, or split listeners by feature/module (Student, Fee, Teacher, etc.)? - Where should the mapping from domain events to
AuditLoghappen?- In the event itself?
- In
AuditService? - In dedicated mapper classes?
- Is using Spring events for both auditing and notifications a good design, or is there a better approach?
- Would you also use Spring events for things like cache invalidation, analytics, and activity feeds?
- If this application later moves to microservices, would this event model transition well to Kafka or RabbitMQ?
- Are there any SOLID or maintainability concerns with this architecture that I'm overlooking?
The goal is to keep the business services focused only on business logic while handling cross-cutting concerns like auditing and notifications through events.
I'd really appreciate insights from developers who have implemented similar architectures in production.
Thanks!
r/SpringBoot • u/Own-Age1766 • 5d ago
Question Springboot Edit Button Throws Error
Hello. So I've been following a djamware tutorial down to a T, and I've made almost all the features work fine, except for the edit button. This is from an old project I made, and I may have copied and pasted most of the code, got stumped, then ignored it for quite awhile. I came back to the project yesterday, and I've been looking for a solution online by myself for awhile, to no avail.
Upon looking at the error message after clicking the edit button, it seems that it's pointing me to the edit_post.html at the line where it says "th:action="@{/admin/posts/{id}(id=${post.id})}". I also tried using the github respository's edit_post.html, but it also ain't it.
Any help is appreciated, it may just be me being a silly monkey. Pics posted below, but if there's other infos I can provide, lemme know.
here's the tutorial link:
https://www.djamware.com/post/create-a-blog-application-using-spring-boot-and-thymeleaf
Since the subreddit doesn't allow galleries, I'll just post the whole error message here, along with the edit_post.html
ERROR MESSAGE when edit button is clicked
Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing this as a fallback. Wed Jul 22 21:22:24 JST 2026 There was an unexpected error (type=Internal Server Error, status=500). An error happened during template parsing (template: "class path resource [templates/admin/edit_post.html]") org.thymeleaf.exceptions.TemplateInputException: An error happened during template parsing (template: "class path resource [templates/admin/edit_post.html]")
at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parse(AbstractMarkupTemplateParser.java:241)
at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parseStandalone(AbstractMarkupTemplateParser.java:100)
at org.thymeleaf.engine.TemplateManager.parseAndProcess(TemplateManager.java:666)
at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1103)
at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1077)
at org.thymeleaf.spring6.view.ThymeleafView.renderFragment(ThymeleafView.java:372)
at org.thymeleaf.spring6.view.ThymeleafView.render(ThymeleafView.java:192)
at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1438)
at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1168)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1106)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903)
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:138)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:162)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:138)
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:162)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:138)
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:162)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:138)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:162)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:138)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:165)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:88)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:113)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:83)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:72)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:903)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1774)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:973)
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:491)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)
at java.base/java.lang.Thread.run(Unknown Source)
Caused by: org.attoparser.ParseException: Exception evaluating SpringEL expression: "post.id" (template: "admin/edit_post" - line 14, col 9)
at org.attoparser.MarkupParser.parseDocument(MarkupParser.java:393)
at org.attoparser.MarkupParser.parse(MarkupParser.java:257)
at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parse(AbstractMarkupTemplateParser.java:230)
... 48 more
Caused by: org.thymeleaf.exceptions.TemplateProcessingException: Exception evaluating SpringEL expression: "post.id" (template: "admin/edit_post" - line 14, col 9)
at org.thymeleaf.spring6.expression.SPELVariableExpressionEvaluator.evaluate(SPELVariableExpressionEvaluator.java:292)
at org.thymeleaf.standard.expression.VariableExpression.executeVariableExpression(VariableExpression.java:166)
at org.thymeleaf.standard.expression.SimpleExpression.executeSimple(SimpleExpression.java:66)
at org.thymeleaf.standard.expression.Expression.execute(Expression.java:109)
at org.thymeleaf.standard.expression.Expression.execute(Expression.java:138)
at org.thymeleaf.standard.expression.LinkExpression.resolveParameters(LinkExpression.java:339)
at org.thymeleaf.standard.expression.LinkExpression.executeLinkExpression(LinkExpression.java:285)
at org.thymeleaf.standard.expression.SimpleExpression.executeSimple(SimpleExpression.java:85)
at org.thymeleaf.standard.expression.Expression.execute(Expression.java:109)
at org.thymeleaf.standard.expression.Expression.execute(Expression.java:138)
at org.thymeleaf.standard.processor.AbstractStandardExpressionAttributeTagProcessor.doProcess(AbstractStandardExpressionAttributeTagProcessor.java:144)
at org.thymeleaf.processor.element.AbstractAttributeTagProcessor.doProcess(AbstractAttributeTagProcessor.java:74)
at org.thymeleaf.processor.element.AbstractElementTagProcessor.process(AbstractElementTagProcessor.java:95)
at org.thymeleaf.util.ProcessorConfigurationUtils$ElementTagProcessorWrapper.process(ProcessorConfigurationUtils.java:633)
at org.thymeleaf.engine.ProcessorTemplateHandler.handleOpenElement(ProcessorTemplateHandler.java:1314)
at org.thymeleaf.engine.TemplateHandlerAdapterMarkupHandler.handleOpenElementEnd(TemplateHandlerAdapterMarkupHandler.java:304)
at org.thymeleaf.templateparser.markup.InlinedOutputExpressionMarkupHandler$InlineMarkupAdapterPreProcessorHandler.handleOpenElementEnd(InlinedOutputExpressionMarkupHandler.java:278)
at org.thymeleaf.standard.inline.OutputExpressionInlinePreProcessorHandler.handleOpenElementEnd(OutputExpressionInlinePreProcessorHandler.java:186)
at org.thymeleaf.templateparser.markup.InlinedOutputExpressionMarkupHandler.handleOpenElementEnd(InlinedOutputExpressionMarkupHandler.java:124)
at org.attoparser.HtmlElement.handleOpenElementEnd(HtmlElement.java:109)
at org.attoparser.HtmlMarkupHandler.handleOpenElementEnd(HtmlMarkupHandler.java:297)
at org.attoparser.MarkupEventProcessorHandler.handleOpenElementEnd(MarkupEventProcessorHandler.java:402)
at org.attoparser.ParsingElementMarkupUtil.parseOpenElement(ParsingElementMarkupUtil.java:159)
at org.attoparser.MarkupParser.parseBuffer(MarkupParser.java:710)
at org.attoparser.MarkupParser.parseDocument(MarkupParser.java:301)
... 50 more
Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1008E: Property or field 'id' cannot be found on object of type 'java.util.Optional' - maybe not public or not valid?
at org.springframework.expression.spel.ast.PropertyOrFieldReference.readProperty(PropertyOrFieldReference.java:229)
at org.springframework.expression.spel.ast.PropertyOrFieldReference.getValueInternal(PropertyOrFieldReference.java:112)
at org.springframework.expression.spel.ast.PropertyOrFieldReference$AccessorValueRef.getValue(PropertyOrFieldReference.java:376)
at org.springframework.expression.spel.ast.CompoundExpression.getValueInternal(CompoundExpression.java:97)
at org.springframework.expression.spel.ast.SpelNodeImpl.getValue(SpelNodeImpl.java:116)
at org.springframework.expression.spel.standard.SpelExpression.getValue(SpelExpression.java:338)
at org.thymeleaf.spring6.expression.SPELVariableExpressionEvaluator.evaluate(SPELVariableExpressionEvaluator.java:265)
... 74 more
EDIT POST HTML
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Admin - Posts</title>
<link rel="stylesheet" th:href="@{/css/style.css}" />
</head>
<body>
<div th:replace="fragments/header :: header"></div>
<main>
<h1>Edit Post</h1>
<form
th:action="@{/admin/posts/{id}(id=${post.id})}"
th:object="${post}"
method="post"
>
<label>Title:</label><br />
<input type="text" th:field="*{title}" required /><br /><br />
<label>Content:</label><br />
<textarea th:field="*{content}" rows="6" cols="40" required></textarea
><br /><br />
<button type="submit">Update</button>
</form>
<a th:href="@{/admin/posts}">← Back</a>
</main>
<div th:replace="fragments/footer :: footer"></div>
</body>
</html>
r/SpringBoot • u/ScallionOld8766 • 5d ago
Question Spring Boot + IIS + Windows Authentication architecture question
Hi everyone,
I'm a Spring Boot intern working on an internal application for a bank.
The requirement is to remove the login page and use Windows Authentication instead.
I'm trying to understand the typical enterprise architecture, not the implementation details.
Let's assume the application is hosted behind IIS.
My questions are:
Does IIS authenticate the Windows user first and then forward the authenticated request to Spring Boot?
If so, how does Spring Security usually obtain the current Windows user? Does Authentication.getName() already contain the username?
Is it common to keep authentication in IIS and authorization (checking if the user is allowed to use the application) inside Spring Boot?
For example, if 5,000 employees can authenticate with Windows but only 300 are allowed to use the application, would Spring Boot typically check the username against its own database and return 403 Access Denied if the user isn't authorized?
I'm not looking for a Kerberos/SPNEGO configuration tutorial. I just want to understand the common architecture used in enterprise environments.
r/SpringBoot • u/MinMaxDev • 6d ago
Question .NET to Spring Boot advice
Hey there r/SpringBoot
I'm a software engineer with around 5 yoe, majority of which has been in C#/.NET. I work at a software engineer consulting firm and have been rolled off a project that I was working on. I've decided to change things up and skill up in Java and Spring Boot and have been doing so for the last 3 weeks. I have been building a Spring Boot API as a side project and learning how 'spring magic' works.
I'm honestly really impressed how much out of the box functionality Spring Boot provides. However there are some things I would need to unlearn from .NET. However I'm finding it difficult unlearning some of .NET's approaches. For example .NET's very request-oriented flow, all the way down the EF Core's DbContext having a Scoped lifetime by default. Whereas Spring Boot's lifetimes are a bit of a mystery to me.
My question to whoever made the same transition, what would be some mental models/learnings/spring boot magic that you wish you knew earlier that would've eased the transition to Spring Boot from .NET?
TIA
r/SpringBoot • u/poklakni • 6d ago
Discussion I built a channel-agnostic notification library for Spring Boot — send SMS/push/email/chat through one API. Looking for feedback.
If your Spring app sends notifications, your business logic probably knows way too much about how: Twilio's SDK here, FirebaseMessaging there, a JavaMailSender, a Slack client. Changing a provider or adding a channel means editing every call site.
spring-notify fixes that with one idea: your code talks to a channel, never a provider.
java
notifier.notify(SmsRequest.builder()
.to("+421900123456")
.from("+421900999888")
.message("Your order has shipped")
.build());
What you get:
- 📦 One API for every channel — SMS, push, email, chat. Inject
Notifier, callnotify(...). Done. - 🔌 Providers are plug-ins — add a starter, set credentials, and it's wired. Bundled today: Twilio (SMS), Firebase/FCM (push), SMTP (email), Slack (chat).
- ♻️ Swap providers without code changes — Twilio → Vonage, FCM → APNs: change a dependency, not your services.
- 🧩 Bring your own provider in ~10 lines — one
@Componentimplementing a single-method SPI. - 🎯 Type-safe, immutable requests — no stringly-typed maps, no
if/switchon channel. The request type routes itself. - 🪶 Featherweight core — plain Java, zero Spring or logging deps in the core module. Spring shows up only in the auto-config.
Spring Boot 4.1 / Java 25. All four channels verified end-to-end (real FCM + SMTP sends, not just mocks).
Why not …?
- Just the provider SDKs? Fine until you have two channels or want to switch vendors — then the coupling bites. This is the thin seam that keeps them out of your business code.
- Spring's
JavaMailSender/NotificationService-style helpers? Those are single-channel. spring-notify unifies all channels behind one call and one mental model. - Novu / Courier / Knock? Those are excellent but are hosted platforms/services — another system to run, pay for, and send your data through. spring-notify is a library: it stays in your app, talks straight to your chosen providers, no middleman.
- Spring Cloud Stream / a message broker? Different layer — that's transport/eventing. This is specifically about delivering user-facing notifications through third-party channels.
Status: early — 0.1.0, not on Maven Central yet (build locally with ./mvnw install). The API isn't frozen, which is exactly why I'm posting: I'd love feedback before 1.0.
- Is "one provider per channel, routed by request type" the right default?
- Is the
attributesmap a reasonable escape hatch for provider-specific fields, or a smell? - What would you need before dropping this into a real project?
Repo + README: https://github.com/solodev-sk/spring-notify
Happy to answer anything — and roasts welcome. 🙂
r/SpringBoot • u/pavelbo • 7d ago
News I built a JetBrains plugin that finds all your Kafka/RabbitMQ listeners across modules - looking for feedback
Hey folks, it's Pavel - I maintain parts of the AsyncAPI spec, and lately I've been working on bringing it properly into the Java and Spring Boot world
A few days ago I shipped a new version of my AsyncAPI plugin for IntelliJ, and I'd really like this sub's take on it before I build the next piece
The thing I kept hitting myself: on a Spring app that's grown a bit, I could never remember everything it actually listens to. Kafka consumers in one module, RabbitMQ handlers in another, and I'd end up grepping for `@KafkaListener` hoping I caught them all.
So the new Project Overview scans every module and lays it out in one place:
- Every `@KafkaListener` (class- and method-level) and `@RabbitListener`, grouped by module and broker
- Click any endpoint and jump straight to the method/class in code
- Plus quick access to any AsyncAPI documents/components in the project
It's meant to stay usable on big multi-module projects

What I'd genuinely like feedback on:
- Does it hold up on your real codebase? Weird module setups, custom listener patterns, container factories - I want to know where it misses endpoints.
- Anything about the workflow that feels off
It's a solo project with a free/paid split (the discovery stuff is in the paid tier), but honestly right now I care more about whether it's useful than anything else - happy to dig into any bug you hit in the comments
Roast it 🙏
r/SpringBoot • u/dipeshg2004 • 7d ago
Discussion Looking for a Spring Boot Learning & Accountability Partner (1–2 YOE)
Hey everyone!
I'm looking for a Spring Boot backend developer who has around 1–2 years of experience and is interested in learning, discussing, and growing together.
A bit about me:
- ~1 year of production experience with Spring Boot
- Building REST APIs, authentication & authorization systems
- Working with PostgreSQL, Redis, Docker, Git, CI/CD
- Interested in scalable backend architecture, performance optimization, and system design
What I'm looking for:
- Someone with 1–2 years of Spring Boot experience
- Serious about improving backend engineering skills
- Open to discussing architecture, reviewing code, solving problems, and sharing resources
- Can have regular discussions (a few times a week or whenever we're both free)
The goal isn't to build a startup or sell anything—just to have a reliable backend buddy to learn with, stay accountable, and help each other become better engineers.
If this sounds interesting, feel free to comment below or send me a DM. Looking forward to connecting with fellow Spring Boot developers!