Datasource 介紹與使用
Datasource 是一個連接資料庫的介面,最基本有 getConnection() 連線方法,也有 setLoginTimeout()、getLoginTimeout() 設定或取得連線 timeout 時間的方法。
Datasource 是一個連接資料庫的介面,最基本有 getConnection() 連線方法,也有 setLoginTimeout()、getLoginTimeout() 設定或取得連線 timeout 時間的方法。
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");
};
}
由於 Datasource 是一個 interface,所以他並沒有定義詳細的實作方法。當然我們可以自己實作,不過要實作出來實在是太麻煩了,所以通常都會拿第三方的實作來使用,這次用的是 Apache 的 commons-dbcp2 。
首先 import dependencies: pom.xml
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-dbcp2 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.9.0</version>
</dependency>
再來就是使用了
import javax.sql.DataSource;
import org.apache.commons.dbcp2.BasicDataSource;
// ... 略過 ...
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;
}
// ... 略過 ...
BasicDataSource 幫我們定義了不少常用的連線資訊,像是 url、username、password 等等的,只要把必要資訊定義完,使用時呼叫 getConnection() 方法,沒意外的話就可以順利連線資料庫了。