diff --git a/plugins/inputs/jolokia2/jolokia_agent.go b/plugins/inputs/jolokia2/jolokia_agent.go
index 30852d62d2524c0ef634db46fde3ed4be9066e9f..fd2105d5fba5e61419f882a3b19e558a70563324 100644
--- a/plugins/inputs/jolokia2/jolokia_agent.go
+++ b/plugins/inputs/jolokia2/jolokia_agent.go
@@ -23,6 +23,7 @@ type JolokiaAgent struct {
 
 	Metrics  []MetricConfig `toml:"metric"`
 	gatherer *Gatherer
+	clients  []*Client
 }
 
 func (ja *JolokiaAgent) SampleConfig() string {
@@ -60,20 +61,27 @@ func (ja *JolokiaAgent) Gather(acc telegraf.Accumulator) error {
 		ja.gatherer = NewGatherer(ja.createMetrics())
 	}
 
-	var wg sync.WaitGroup
-
-	for _, url := range ja.URLs {
-		client, err := ja.createClient(url)
-		if err != nil {
-			acc.AddError(fmt.Errorf("Unable to create client for %s: %v", url, err))
-			continue
+	// Initialize clients once
+	if ja.clients == nil {
+		ja.clients = make([]*Client, 0, len(ja.URLs))
+		for _, url := range ja.URLs {
+			client, err := ja.createClient(url)
+			if err != nil {
+				acc.AddError(fmt.Errorf("Unable to create client for %s: %v", url, err))
+				continue
+			}
+			ja.clients = append(ja.clients, client)
 		}
+	}
+
+	var wg sync.WaitGroup
 
+	for _, client := range ja.clients {
 		wg.Add(1)
 		go func(client *Client) {
 			defer wg.Done()
 
-			err = ja.gatherer.Gather(client, acc)
+			err := ja.gatherer.Gather(client, acc)
 			if err != nil {
 				acc.AddError(fmt.Errorf("Unable to gather metrics for %s: %v", client.URL, err))
 			}