The Slovenian outpaced the Italian on the run to the line, with André Greipel (Lotto-Belisol) third - just metres behind - ahead of fellow German sprinters John Degenkolb (Argos-Shimano) and Gerald Ciolek (MTN Qhubeka).
The front two attacked late in the race alongside Domenico Pozzovivo (AG2R La Mondiale) and managed to stay out to the end as the Italian climber was caught.
The race, held between Eschborn and Frankfurt, is the traditional German May Day race.
Nine riders escaped early in the 200.9km race - Marcel Sieberg (Lotto-Belisol), Paul Voss (NetApp-Endura), Michael Mørkøv (Saxo-Tinkoff), Sébastien Reichenbach (IAM Cycling), Jan-Nicklas Droste (Heizomat), Tim Gebauer (Stölting), Georg Preidler (Argos-Shimano) and Michael Schweizer and Sven Forberger (both NSP-Ghost).
Their lead maxed out at 3:50 after 61km at the summit at Feldberg - returning to the route after two years - then Priedler, Voss, Sieberg, Reichenbach and Mørkøv moved out alone on the following climb, the Mammolshainer.
The others were gradually scooped up by the peloton while the front five's lead was cut to 1:40 on the second ascent of the Mammolshainer. Priedler and Reichenbach fell away and world time trial champion Tony Martin (Omega Pharma-Quick Step) caught up with the leaders to make it four riders at the front with 60km to go.
The peloton reeled them in 20km later then, heading up the Mammolshainer for a third and final time, Spilak, Moser and Pozzovivo made their move.
Their lead was 40s on the long flat finish heading into the centre of Frankfurt but that was eaten up: Pozzovivo dropped away, Moser attacked with 700m to go then Spilak responded late to snatch victory with the pack snapping at their wheels.
Danish track rider Lasse Norman Hansen (Blue Water Cycling) won the U23 race.