NOTE: Forked from Spring Boot logic to avoid hard dependency on Boot.
Convenience class for building a javax.sql.DataSource with common implementations and
properties. If Tomcat, HikariCP or Commons DBCP are on the classpath one of them will
be selected (in that order with Tomcat first). In the interest of a uniform interface,
and so that there can be a fallback to an embedded database if one can be detected on
the classpath, only a small set of common configuration properties are supported. To
inject additional properties into the result you can downcast it, or use