I haven't searched Gamedev specifically, but my understanding is that there is no cure-all for instability with spring forces.
The reason springs are unstable is because the fixed time step means that sometimes things overshoot.
I went ahead and wrote a generic solution that manually recalculates the velocity as it passes over the spring's resting point. This works.
PositionComponent *l_pos = (PositionComponent*)component(GameObject::CID_POSITION);
PhysicsComponent *l_phys = (PhysicsComponent*)component(GameObject::CID_PHYSICS);
const float g_SpringConstant = 1.0f;
const float g_Mass = 1.0f;
const float g_Distance = 32.0f;
Vector2 l_tangent, l_perp;
l_tangent = l_pos->get() - m_Center;
if( l_tangent.Length2() < 1.0f )
l_perp = l_tangent;
float l_dist = l_tangent.Magnitude();
l_dist = sqrt((g_Distance - l_dist)*(g_Distance - l_dist)*g_SpringConstant/g_Mass);
l_perp = l_perp.Dot(l_phys->velocity()) * l_perp;
l_tangent = l_tangent.Dot(l_phys->velocity()) * l_tangent;
l_phys->setVelocity(l_perp + l_tangent * l_dist);
my spring is oscilating on the X-axis (mass and the spring constant are also one) so this is an overly complicated solution, but the idea is:
don't touch the component of the velocity that is perpendicular to the spring force
make the component that is tangent to the spring force have the expected value.
The only problem here is if my oscillating object overshoots too much when it passes the center.