Robert Lewandowski scored the only goal as ten-man Bayern Munich beat Werder Bremen in a rain-soaked game to lift their eight Bundesliga title in a row and 30th title overall.
Bayern’s 11th straight Bundesliga win put them 10 points clear of Borussia Dortmund, who have three games left.
The league leaders dominated the first half without ever really having too many clear cut chances until Lewandowski sprung the offside trap to score his 31st league goal of the season two minutes before the interval.
Lewandowski’s 31 league goals this season equals the single-season scoring record by a foreign player in the league. Pierre-Emerick Aubameyang, now at Arsenal, scored 31 Bundesliga goals for Borussia Dortmund in 2016-17.
The Polish striker had the ball in the net again in the second half but this time he was ruled offside.
Bayern dominated proceedings but found Bremen resolute in defence and the league leaders then found themselves on the backfoot when Alphonso Davies was sent off with 11 minutes of normal time to go.
Bremen piled on the pressure and came close to delaying Bayern’s title procession but Manuel Neuer made a brilliant save from 41-year-old Claudio Pizarro in added time to prevent a Bremen equaliser.
Bayern held on for the win to complete a remarkable turnaround in a season that looked lost after the 5-1 loss to Eintracht Frankfurt, which resulted in Niko Kovac losing his job in November.
Kovac’s replacement Hansi Flick has overseen an extraordinary resurgence leading the Bavarians who dropped to seventh at one stage to 22 wins and a solitary draw in their last 23 games.
Having wrapped up the title with two games to spare, Bayern can now turn their focus to the Champions League which is set to be played in a tournament format in Lisbon from the quarterfinal stage.
The Bavarians have one leg in the quarterfinal after they destroyed Chelsea 3-0 in the first leg of their last 16 tie in London.
Bayern can complete a domestic double this season as they have also progressed to the final of the German Cup, where they will meet Bayer Leverkusen on 4 July in Berlin.