DataSource

DataSource

他是一個 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");
  };
}

當然我們可以自己實作,不過要實作出來實在是太麻煩了,
所以我通常都會用 Apachecommons-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 那麼豐富而已 但是堪用了啦~

wayne

No Comment

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

文章分類