James, 28, will arrive at the Recreation Ground following the World Cup later this year. He joins Bath from 2007 Super 14 finalists Natal Sharks.
He said: "I am looking forward to the challenge. I have heard so many good things about the club from the other South Africans that play and have played there.
"I am looking forward to experiencing life in a different country, and I am sure I will be very happy and intend on making the most of this opportunity.
"I have been fortunate to play for the Springboks, and always feel a great sense of pride to represent South Africa.
"I would like to thank the players, management and fans of Springbok and Sharks rugby who have played such a huge role in my life in the past nine years."
James played for South Africa in both Tests against England last month, and has been a key member of the Springboks' Tri-Nations squad, although he is currently being rested from Test duty.
Bath head coach Steve Meehan added: "Butch's skill-set, experience and physicality will no doubt provide the team with certainty and opportunity.
"We are sure he will contribute towards Bath being a more dangerous team in attack, and more solid defensively."