General manager Ray Shero announced the contract Friday, less than a month before the start of training camp.
Stafford, 31, had eight goals and 13 assists last season with Winnipeg and Boston. The Jets traded him to the Bruins at the deadline and had two goals in six playoff games.
Unsigned long into free agency, Stafford took a significant pay cut from the $4.35 million he made the past two seasons. He got that deal from Winnipeg coming off a 43-point season when he helped get the team to the playoffs.
In 725 NHL games with the Buffalo Sabres, Jets and Bruins, the Milwaukee native has 183 goals and 217 assists for 400 points.