Ireland will now face the winner of the second semi-final, between France and England, in the final, while the Junior Boks will face the loser in the bronze medal match on Friday.
While the South Africans played well for large parts of the game, the Irish were more composed, used their opportunities better and defended very well, while their scrum also had the hosts on the backfoot on a few occasions.
The swirling wind made things tricky for both teams, with Ireland probably favoured a bit more in this regard before the break, but the SA U20s did very well to stay in their opponents' half of the field.
Unfortunately for the Junior Boks, some over-eagerness on attack, last passes not finding hands and unforced mistakes meant they had nothing to show for their first-half dominance, with the Irish also defending like Trojans.
Ireland had two opportunities to score and their second yielded points, moments after Janne Potgieter was sin-binned for a dangerous tackle. James Nicholson was unmarked on the left where a pin-point Sam Prendergast cross kick found his left wing for the first try of the half, in the 39th minute.
Presented with one last attacking opportunity from the restart, Jean Smith attempted a drop goal, which sailed just wide as the teams hit the sheds with Ireland leading by 7-0.
Smith pulled two penalties wide early in the second half, but six minutes after the restart, the South Africans pulled level.
Imad Khan finished under the sticks from a brilliant attack in which Regan Izaks, who came on at fullback earlier, danced his way through the Irish defence. Smith's conversion made it 7-7 and the big crowd rejoiced.
It was short-lived though as Ireland showed why they came to South Africa as back-to-back U20 Six Nations champions with three tries in 15 minutes, all converted by Prendergast.
Barnstorming No 8 Brian Gleeson crashed over from a lineout in the 51st minute; Nicholson scored a carbon copy of his first in the 61st minute and five minutes later Sam Berman exploited some weak defence out wide as mistakes started creeping into the Junior Boks' game.
Prendergast slotted his fifth straight successful kick at goal with eight minutes to go to make it 31-7 in a match where things just didn't gel for the South Africans.
Coetzee le Roux got a consolation try for the Junior Boks in the 77th minute, but Smith pulled the conversion wide.
Scorers:
Junior Springboks 12 (0) - Tries: Imad Khan, Coetzee le Roux. Conversion: Jean Smith.
Ireland U20 31 (7) - Tries: James Nicholson (2), Brian Gleeson, Sam Berman. Conversions: Sam Prendergast (4). Penalty goal: Prendergast.