Partner – Orkes – NPI EA (cat=Spring)
announcement - icon

Modern software architecture is often broken. Slow delivery leads to missed opportunities, innovation is stalled due to architectural complexities, and engineering resources are exceedingly expensive.

Orkes is the leading workflow orchestration platform built to enable teams to transform the way they develop, connect, and deploy applications, microservices, AI agents, and more.

With Orkes Conductor managed through Orkes Cloud, developers can focus on building mission critical applications without worrying about infrastructure maintenance to meet goals and, simply put, taking new products live faster and reducing total cost of ownership.

Try a 14-Day Free Trial of Orkes Conductor today.

Partner – Orkes – NPI EA (tag=Microservices)
announcement - icon

Modern software architecture is often broken. Slow delivery leads to missed opportunities, innovation is stalled due to architectural complexities, and engineering resources are exceedingly expensive.

Orkes is the leading workflow orchestration platform built to enable teams to transform the way they develop, connect, and deploy applications, microservices, AI agents, and more.

With Orkes Conductor managed through Orkes Cloud, developers can focus on building mission critical applications without worrying about infrastructure maintenance to meet goals and, simply put, taking new products live faster and reducing total cost of ownership.

Try a 14-Day Free Trial of Orkes Conductor today.

eBook – Guide Spring Cloud – NPI EA (cat=Spring Cloud)
announcement - icon

Let's get started with a Microservice Architecture with Spring Cloud:

>> Join Pro and download the eBook

eBook – Mockito – NPI EA (tag = Mockito)
announcement - icon

Mocking is an essential part of unit testing, and the Mockito library makes it easy to write clean and intuitive unit tests for your Java code.

Get started with mocking and improve your application tests using our Mockito guide:

Download the eBook

eBook – Java Concurrency – NPI EA (cat=Java Concurrency)
announcement - icon

Handling concurrency in an application can be a tricky process with many potential pitfalls. A solid grasp of the fundamentals will go a long way to help minimize these issues.

Get started with understanding multi-threaded applications with our Java Concurrency guide:

>> Download the eBook

eBook – Reactive – NPI EA (cat=Reactive)
announcement - icon

Spring 5 added support for reactive programming with the Spring WebFlux module, which has been improved upon ever since. Get started with the Reactor project basics and reactive programming in Spring Boot:

>> Join Pro and download the eBook

eBook – Java Streams – NPI EA (cat=Java Streams)
announcement - icon

Since its introduction in Java 8, the Stream API has become a staple of Java development. The basic operations like iterating, filtering, mapping sequences of elements are deceptively simple to use.

But these can also be overused and fall into some common pitfalls.

To get a better understanding on how Streams work and how to combine them with other language features, check out our guide to Java Streams:

>> Join Pro and download the eBook

eBook – Jackson – NPI EA (cat=Jackson)
announcement - icon

Do JSON right with Jackson

Download the E-book

eBook – HTTP Client – NPI EA (cat=Http Client-Side)
announcement - icon

Get the most out of the Apache HTTP Client

Download the E-book

eBook – Maven – NPI EA (cat = Maven)
announcement - icon

Get Started with Apache Maven:

Download the E-book

eBook – Persistence – NPI EA (cat=Persistence)
announcement - icon

Working on getting your persistence layer right with Spring?

Explore the eBook

eBook – RwS – NPI EA (cat=Spring MVC)
announcement - icon

Building a REST API with Spring?

Download the E-book

Course – LS – NPI EA (cat=Jackson)
announcement - icon

Get started with Spring and Spring Boot, through the Learn Spring course:

>> LEARN SPRING
Course – RWSB – NPI EA (cat=REST)
announcement - icon

Explore Spring Boot 3 and Spring 6 in-depth through building a full REST API with the framework:

>> The New “REST With Spring Boot”

Course – LSS – NPI EA (cat=Spring Security)
announcement - icon

Yes, Spring Security can be complex, from the more advanced functionality within the Core to the deep OAuth support in the framework.

I built the security material as two full courses - Core and OAuth, to get practical with these more complex scenarios. We explore when and how to use each feature and code through it on the backing project.

You can explore the course here:

>> Learn Spring Security

Partner – LambdaTest – NPI EA (cat=Testing)
announcement - icon

Browser testing is essential if you have a website or web applications that users interact with. Manual testing can be very helpful to an extent, but given the multiple browsers available, not to mention versions and operating system, testing everything manually becomes time-consuming and repetitive.

To help automate this process, Selenium is a popular choice for developers, as an open-source tool with a large and active community. What's more, we can further scale our automation testing by running on theLambdaTest cloud-based testing platform.

Read more through our step-by-step tutorial on how to set up Selenium tests with Java and run them on LambdaTest:

>> Automated Browser Testing With Selenium

Partner – Orkes – NPI EA (cat=Java)
announcement - icon

Modern software architecture is often broken. Slow delivery leads to missed opportunities, innovation is stalled due to architectural complexities, and engineering resources are exceedingly expensive.

Orkes is the leading workflow orchestration platform built to enable teams to transform the way they develop, connect, and deploy applications, microservices, AI agents, and more.

With Orkes Conductor managed through Orkes Cloud, developers can focus on building mission critical applications without worrying about infrastructure maintenance to meet goals and, simply put, taking new products live faster and reducing total cost of ownership.

Try a 14-Day Free Trial of Orkes Conductor today.

Course – LSD – NPI EA (tag=Spring Data JPA)
announcement - icon

Spring Data JPA is a great way to handle the complexity of JPA with the powerful simplicity of Spring Boot.

Get started with Spring Data JPA through the guided reference course:

>> CHECK OUT THE COURSE

Partner – Moderne – NPI EA (cat=Spring Boot)
announcement - icon

Refactor Java code safely — and automatically — with OpenRewrite.

Refactoring big codebases by hand is slow, risky, and easy to put off. That’s where OpenRewrite comes in. The open-source framework for large-scale, automated code transformations helps teams modernize safely and consistently.

Each month, the creators and maintainers of OpenRewrite at Moderne run live, hands-on training sessions — one for newcomers and one for experienced users. You’ll see how recipes work, how to apply them across projects, and how to modernize code with confidence.

Join the next session, bring your questions, and learn how to automate the kind of work that usually eats your sprint time.

1. Introduction

Sometimes, we want to run the Java program in the background and keep it running even after the terminal is closed.

In this tutorial, we’ll explore various ways to achieve this. We’ll look at how to run the Java process as an independent session that continues even after closing the terminal.

2. Running Java as a Background Process

One of the simplest ways to run the Java program in the background is by using the & operator inside a shell script:

#!/bin/sh
java -jar /web/server.jar &
echo $! > startupApp.pid

The & ensures that the process runs in the background, allowing us to use the terminal without waiting for it to finish.

The $! > startupApp.pid captures and stores the PID (Process ID) of the last executed background command. This PID uniquely identifies the running process and can be used later for process management tasks like monitoring or stopping it.

However, there is one downside to this approach. Even though we can continue to use the terminal, the process may still get terminated if we close the terminal. This can cause the background program to stop unexpectedly.

Also, it’s harder to control the process properly as it’s not managed as a service. We don’t get to see the logs or start/stop the process easily like we would with a proper service manager like systemd.

3. Keeping the Process Alive With Nohup

If we don’t want the process to end after closing the session, then nohup is the answer. nohup (No Hang Up) lets our process continue running even after we close the session or terminal.

Below is the shell script using nohup:

nohup java -jar /web/server.jar > output.log 2>&1 &
echo $! > startupApp.pid

nohup will keep the process running even if we close the terminal session. The > output.log 2>&1 part helps us redirect both the standard output and error output into a file named output.log, making it easy to check logs later (For debugging purposes). The & in the end, runs the process in the background.

echo $! > startupApp.pid saves the PID in startupApp.pid for future usage.

If we want to kill the process, we can run the below command:

kill $(cat startupApp.pid)

4. Running Java as a systemd Service (for Linux Servers)

For long-running Java processes and better management, we need to manage them as a service using systemd. This is a recommended approach if we are using Linux servers. Let us now take a look at how we can achieve that.

First up, we need to create a .service file using the below command:

sudo nano /etc/systemd/system/myjavaapp.service

Next, add the following content to the file:

[Unit]
Description: Java Background Service
After=network.target

[Service]
ExecStart=/usr/bin/java -jar /web/server.jar
WorkingDirectory=/web
Restart=always
User=root
StandardOutput=append:/var/log/myjavaapp.log
StandardError=append:/var/log/myjavaapp.err

[Install]
WantedBy=multi-user.target

We are trying to define how to run the Java application as a background service. In this case, we’re making sure that the app starts automatically on boot and stays running.

In the [Unit] section, with After=network.target, we specify that it should only start after the network is available. This is important if our Java application is dependent on the Internet or network services.

Next, in the [Service] section, we define how our Java application should run. Let’s break it down.

The ExecStart tells systemd to start the Java application by running the server.jar. The WorkingDirectory defines from which folder the service will execute. In this case, it is set to the /web directory.

The Restart ensures that the systemd will automatically restart the application if the application crashes for any reason.

Next, we set the User property to root, which means the service runs as the root user. However, for better security, it’s generally recommended to run the service as a non-root user.

We’re also keeping track of the logs and errors with the StandOutput and StandardError properties. These would be useful to analyze issues related to the application.

Finally, with the WantedBy=multi-user.target property, we are letting our Java app start automatically when the system reaches the normal working stage for services so that the service would start before the rendering of the GUI. Without this configuration, our service wouldn’t know when it should start automatically. It would just sit there, and we’d have to start it manually after every reboot.

Next, we need to reload the systemd and enable the service. This step is needed whenever we either create or modify a service and let systemd know about the changes.

We need to run the below command to let systemd know about our newly added (or modified) service:

sudo systemctl daemon-reload

Next, we need to create a symbolic link (shortcut) that points to the service file. The system places this shortcut in a special folder, checks it during startup, and starts the service during the multi-user.target stage.

Below is the command to create the symbolic link:

sudo systemctl enable myjavaapp

Now, to start the Java application, we need to either reboot the system or run the below command:

sudo systemctl start myjavaapp

We can use the below command to verify if the service has started:

sudo systemctl status myjavaapp

Finally, to stop the background process, we can run the below command:

sudo systemctl stop myjavaapp

5. Running Java as a Background Process with screen or tmux

Unlike systemd or nohup, screen and tmux allow us to detach (disconnect) from the session without stopping the running process and reattach (reconnect) later to exactly where we left off.

Simply put, using screen or tmux, we can start a Java application, close the laptop or lose connection, and then later come back to see the same terminal as if nothing happened, and the app will keep running in the background.

We can think of it as Windows Hibernate, but limited to terminal sessions.

Let’s use the below command:

screen -S myjavaapp java -jar /web/server.jar

To detach, we need to press Ctrl+A, release both, and then press D. To attach later, we need to run the below command:

screen -r myjavaapp

We can achieve similar results with tmux. Below is the command for the same:

tmux new-session -s myjavaapp 'java -jar /web/server.jar'

To detach, we need to press Ctrl+B, release both, then press D. To attach later, we need to run the below command:

tmux attach-session -t myjavaapp

tmux is more modern, more powerful, and easier to use, while screen is simple and good enough for basic needs. However, most Linux distributions come with screen preinstalled, while we might need to install tmux separately.

6. Conclusion

In this article, we’ve seen how to run a Java application as a background process, explored how to keep it running after closing the terminal session, and even monitored it using logs.

For simple cases, nohup or & can work, but for production environments, using the system is a more reliable method. Tools like screen and tmux give us additional flexibility to continue the process even after rebooting, as if nothing happened. We need to choose the approach that best suits our use case.

Baeldung Pro – NPI EA (cat = Baeldung)
announcement - icon

Baeldung Pro comes with both absolutely No-Ads as well as finally with Dark Mode, for a clean learning experience:

>> Explore a clean Baeldung

Once the early-adopter seats are all used, the price will go up and stay at $33/year.

Partner – Orkes – NPI EA (cat = Spring)
announcement - icon

Modern software architecture is often broken. Slow delivery leads to missed opportunities, innovation is stalled due to architectural complexities, and engineering resources are exceedingly expensive.

Orkes is the leading workflow orchestration platform built to enable teams to transform the way they develop, connect, and deploy applications, microservices, AI agents, and more.

With Orkes Conductor managed through Orkes Cloud, developers can focus on building mission critical applications without worrying about infrastructure maintenance to meet goals and, simply put, taking new products live faster and reducing total cost of ownership.

Try a 14-Day Free Trial of Orkes Conductor today.

Partner – Orkes – NPI EA (tag = Microservices)
announcement - icon

Modern software architecture is often broken. Slow delivery leads to missed opportunities, innovation is stalled due to architectural complexities, and engineering resources are exceedingly expensive.

Orkes is the leading workflow orchestration platform built to enable teams to transform the way they develop, connect, and deploy applications, microservices, AI agents, and more.

With Orkes Conductor managed through Orkes Cloud, developers can focus on building mission critical applications without worrying about infrastructure maintenance to meet goals and, simply put, taking new products live faster and reducing total cost of ownership.

Try a 14-Day Free Trial of Orkes Conductor today.

eBook – HTTP Client – NPI EA (cat=HTTP Client-Side)
announcement - icon

The Apache HTTP Client is a very robust library, suitable for both simple and advanced use cases when testing HTTP endpoints. Check out our guide covering basic request and response handling, as well as security, cookies, timeouts, and more:

>> Download the eBook

eBook – Java Concurrency – NPI EA (cat=Java Concurrency)
announcement - icon

Handling concurrency in an application can be a tricky process with many potential pitfalls. A solid grasp of the fundamentals will go a long way to help minimize these issues.

Get started with understanding multi-threaded applications with our Java Concurrency guide:

>> Download the eBook

eBook – Java Streams – NPI EA (cat=Java Streams)
announcement - icon

Since its introduction in Java 8, the Stream API has become a staple of Java development. The basic operations like iterating, filtering, mapping sequences of elements are deceptively simple to use.

But these can also be overused and fall into some common pitfalls.

To get a better understanding on how Streams work and how to combine them with other language features, check out our guide to Java Streams:

>> Join Pro and download the eBook

eBook – Persistence – NPI EA (cat=Persistence)
announcement - icon

Working on getting your persistence layer right with Spring?

Explore the eBook

Course – LS – NPI EA (cat=REST)

announcement - icon

Get started with Spring Boot and with core Spring, through the Learn Spring course:

>> CHECK OUT THE COURSE

Partner – Moderne – NPI EA (tag=Refactoring)
announcement - icon

Modern Java teams move fast — but codebases don’t always keep up. Frameworks change, dependencies drift, and tech debt builds until it starts to drag on delivery. OpenRewrite was built to fix that: an open-source refactoring engine that automates repetitive code changes while keeping developer intent intact.

The monthly training series, led by the creators and maintainers of OpenRewrite at Moderne, walks through real-world migrations and modernization patterns. Whether you’re new to recipes or ready to write your own, you’ll learn practical ways to refactor safely and at scale.

If you’ve ever wished refactoring felt as natural — and as fast — as writing code, this is a good place to start.

Course – LS – NPI (cat=Java)
announcement - icon

Get started with Spring Boot and with core Spring, through the Learn Spring course:

>> CHECK OUT THE COURSE

eBook Jackson – NPI EA – 3 (cat = Jackson)