Struts has long been a solid framework for Java web apps. When you want to boost performance—like for caching sessions, throttling, or simple pub/sub—you can’t go wrong with Redis. This guide walks through setting up Redis in a Struts application using Docker for local development and Kubernetes for production, with clean separation between environments and minimal fuss.
1. Add Redis & Kubernetes Dependencies
Add these to your
pom.xml
to get Redis connectivity and optional Kubernetes integration:
<dependencies>
<!-- Struts framework -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>${struts.version}</version>
</dependency>
<!-- Jedis Redis client -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>4.4.3</version>
</dependency>
<!-- Kubernetes client (optional) -->
<dependency>
<groupId>io.fabric8</groupId>
<artifactId>kubernetes-client</artifactId>
<version>${fabric8.version}</version>
</dependency>
</dependencies>
You’ll have Struts for web logic, Jedis for Redis, and Kubernetes support for production configurations.
2. Run Redis Locally via Docker
For development, keep it simple with Redis in Docker:
version: '3'
services:
redis:
image: redis:7.0-alpine
ports:
- "6379:6379"
Run it:
docker-compose up -d
Redis is now available at
localhost:6379
, ready for caching and quick data storage.
3. Create Dev Configuration: redis-dev.properties
Place this in your
src/main/resources
:
redis.host=localhost>redis.port=6379
redis.timeout=2000
In your Struts helper or action class, load these settings:
Properties props = new Properties();
props.load(getClass().getResourceAsStream("/redis-dev.properties"));
JedisPoolConfig poolConfig = new JedisPoolConfig();
JedisPool pool = new JedisPool(
poolConfig,
props.getProperty("redis.host"),
Integer.parseInt(props.getProperty("redis.port")),
Integer.parseInt(props.getProperty("redis.timeout"))
);
// Later in code:
try (Jedis jedis = pool.getResource()) {
jedis.set("myKey", "Hello, Redis!");
}
That gives you fast local development with working caching or key-value access.
4. Prepare Kubernetes for Production
In production, keep sensitive config out of code by using Kubernetes ConfigMaps and Secrets:
kubectl create configmap redis-config \
--from-literal=REDIS_HOST=redis-service \
--from-literal=REDIS_PORT=6379 \
--from-literal=REDIS_TIMEOUT=2000
kubectl create secret generic redis-secret \
--from-literal=REDIS_PASSWORD=prodpass
5. Create Production Config: redis-prod.properties
Add this to your JAR under
src/main/resources
:
redis.host=${REDIS_HOST}
redis.port=${REDIS_PORT}
redis.timeout=${REDIS_TIMEOUT}
redis.password=${REDIS_PASSWORD}
At runtime, environment variables supplied by Kubernetes are automatically used.
6. Add Kubernetes Deployment Snippet
Ensure your pod spec injects the values:
env:
- name: REDIS_HOST
valueFrom:
configMapKeyRef:
name: redis-config
key: REDIS_HOST
- name: REDIS_PORT
valueFrom:
configMapKeyRef:
name: redis-config
key: REDIS_PORT
- name: REDIS_TIMEOUT
valueFrom:
configMapKeyRef:
name: redis-config
key: REDIS_TIMEOUT
- name: REDIS_PASSWORD
valueFrom:
secretKeyRef:
name: redis-secret
key: REDIS_PASSWORD
This ensures your Struts app reads secure parameters at launch.
7. Code Example in Production
Your Struts-based helper might look like:
JedisPoolConfig poolConfig = new JedisPoolConfig();
JedisPool pool = new JedisPool(
poolConfig,
System.getenv("REDIS_HOST"),
Integer.parseInt(System.getenv("REDIS_PORT")),
Integer.parseInt(System.getenv("REDIS_TIMEOUT")),
System.getenv("REDIS_PASSWORD")
);
// Executing a command
try (Jedis jedis = pool.getResource()) {
String val = jedis.get("someKey");
}
You can publish or cache freely, with the same codebase in both environments.
Why This Setup Makes Sense
- Quick dev loop: Docker + local config = fast iteration.
- Secure production: No credentials hardcoded; Kubernetes manages them securely.
- Single codebase: Same logic works in development and production.
- Easy separation: Distinct dev/prod configuration files minimize mistakes.
With Docker, Kubernetes, and Redis, you can give your Struts application a responsive, cache-ready data layer that behaves consistently across environments. Whether you're serving user sessions or caching API responses, this setup is simple to build, test locally, and scale securely in production.
image quote pre code