
他是一個 Interface 我們需要幫他實作出來它的方法
public interface DataSource extends CommonDataSource, Wrapper { Connection getConnection() throws SQLException; Connection getConnection(String username, String password) throws SQLException; @Override java.io.PrintWriter getLogWriter() throws SQLException; @Override void setLogWriter(java.io.PrintWriter out) throws SQLException; @Override void setLoginTimeout(int seconds) throws SQLException; @Override int getLoginTimeout() throws SQLException; default ConnectionBuilder createConnectionBuilder() throws SQLException { throw new SQLFeatureNotSupportedException("createConnectionBuilder not implemented"); }; }
當然我們可以自己實作,不過要實作出來實在是太麻煩了,
所以我通常都會用 Apache 的 commons-dbcp2 來直接做出來,比較方便快速!
pom.xml
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-dbcp2 --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-dbcp2</artifactId> <version>2.7.0</version> </dependency>
用例:
public DataSource dataSource() { BasicDataSource ds = new BasicDataSource(); ds.setDriverClassName("com.mysql.cj.jdbc.Driver"); // 設定連線的 Driver 名稱 ds.setUrl("jdbc:mysql://localhost:4089/neon"); // 資料庫連線位置 ds.setUsername("wayne"); // 帳號 ds.setPassword("xxx"); // 密碼 ds.setInitialSize(5); // 初始連線數 // ds.setMaxTotal(10); // 最大連線數 以前叫做 maxActive。設定為 10 表示最多能有 10 人同時連線;設定為 0 表示無上限 // ds.setMaxIdle(20); // 最大空閒時間,若是超過時間,連線將被視為不可用。設定為 0 的話表示無上限 // ds.setMaxWaitMillis(); 最大「等待」連線時間,如果超過這個時間,將視為連線逾時。9000 就是 9 秒;設定為 -1 表示無限制 return ds; }
當然!我們也可以不要加入 Apache 的實例而直接使用 Spring 的 DriverManagerDataSource
@Bean public DataSource dataSource() { DriverManagerDataSource ds = new DriverManagerDataSource(); ds.setUrl("jdbc:mysql://localhost:4089/neon"); ds.setDriverClassName("com.mysql.cj.jdbc.Driver"); ds.setUsername("wayne"); ds.setPassword("xxx"); return ds; }
只是個人覺得他的功能沒有 commons-dbcp2 那麼豐富而已 但是堪用了啦~
No Comment