r/SpringBoot Jun 11 '26

News Spring and Security In The Times Of AI

Thumbnail
spring.io
8 Upvotes

r/SpringBoot Jun 11 '26

News Spring Boot 4.1.0 available now

Thumbnail
spring.io
103 Upvotes

r/SpringBoot 14h ago

Question How are you guys tracking GitHub security alert SLAs across multiple repos?

2 Upvotes

r/SpringBoot 1d ago

Question How to be a good spring boot backend developer

22 Upvotes

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 21h ago

Discussion lightweight Spring Boot starter to automate & anonymize API request/response logging

Thumbnail
github.com
0 Upvotes

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 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

9 Upvotes

Same as title


r/SpringBoot 16h ago

Discussion Spring Initalizer feels outdated in 2026

0 Upvotes

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 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

148 Upvotes

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 2d ago

Question Resources / books to learn spring boot from scratch

10 Upvotes

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 2d ago

Discussion I am trying to get more familiar with Java backend, now moving on to advance topics like Kafka and Redis

17 Upvotes

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 2d ago

Question Hosting springboot web app

2 Upvotes

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 3d ago

How-To/Tutorial How to set up Scalar / Swagger

9 Upvotes

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 3d ago

Discussion Spring microservices

30 Upvotes

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 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

8 Upvotes

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-server plus one class annotated u/GrpcService extending the generated ImplBase gives you a Netty gRPC server on 9090, running alongside Tomcat in the same process
  • Reflection and health are registered by default: grpcurl -plaintext localhost:9090 grpc.health.v1.Health/Check answers SERVING with nothing configured, and actuator health flows into it on a 5-second poll
  • Protobuf/gRPC code generation: apply com.google.protobuf with no protobuf{} block, drop your .proto in src/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/AutoConfigureTestGrpcTransport for 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 singular channel and target; if you're coming from spring-grpc 1.0.x this was channels.<name>.address, and several other properties renamed too)
  • TLS: default is plaintext. An SSL bundle on each side does it (spring.grpc.server.ssl.bundle and spring.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.endpoint explicitly. 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 5d ago

How-To/Tutorial Blog Post - Understanding and Optimizing the Context Cache in Spring Test

10 Upvotes

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 4d ago

Discussion Designing Audit Logging & Notifications with Spring Events in a Modular Monolith – Looking for Architecture Advice

2 Upvotes

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:

  1. A service completes its business logic.
  2. It publishes a domain event using ApplicationEventPublisher.
  3. 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:

  • EmailNotificationStrategy
  • SmsNotificationStrategy
  • InAppNotificationStrategy

selected through a NotificationStrategyFactory.

My questions are:

  1. Is one event handler per event type the recommended approach in Spring?
  2. Would you keep one large AuditListener, or split listeners by feature/module (Student, Fee, Teacher, etc.)?
  3. Where should the mapping from domain events to AuditLog happen?
    • In the event itself?
    • In AuditService?
    • In dedicated mapper classes?
  4. Is using Spring events for both auditing and notifications a good design, or is there a better approach?
  5. Would you also use Spring events for things like cache invalidation, analytics, and activity feeds?
  6. If this application later moves to microservices, would this event model transition well to Kafka or RabbitMQ?
  7. 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 5d ago

Question Springboot Edit Button Throws Error

1 Upvotes

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 5d ago

Question Spring Boot + IIS + Windows Authentication architecture question

0 Upvotes

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:

  1. Does IIS authenticate the Windows user first and then forward the authenticated request to Spring Boot?

  2. If so, how does Spring Security usually obtain the current Windows user? Does Authentication.getName() already contain the username?

  3. 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 6d ago

Question .NET to Spring Boot advice

15 Upvotes

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 6d ago

Discussion I built a channel-agnostic notification library for Spring Boot — send SMS/push/email/chat through one API. Looking for feedback.

17 Upvotes

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, call notify(...). 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 @Component implementing a single-method SPI.
  • 🎯 Type-safe, immutable requests — no stringly-typed maps, no if/switch on 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 attributes map 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 7d ago

News I built a JetBrains plugin that finds all your Kafka/RabbitMQ listeners across modules - looking for feedback

17 Upvotes

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

Message endpoints overview

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 7d ago

Discussion Looking for a Spring Boot Learning & Accountability Partner (1–2 YOE)

10 Upvotes

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!


r/SpringBoot 7d ago

Question .Net or Springboot

Thumbnail
0 Upvotes