SpringブートJDBC + Oracleデータベース+ Commons DBCP2の例
この記事では、SpringブートJDBCアプリケーション+ Oracleデータベース+ Commons DBCP2接続プールの作成方法を説明します。
この記事で使用されているツール:
-
春のブート1.5.1.RELEASE
-
Oracleデータベース11g Express
-
Oracle JDBCドライバojdbc7.jar
-
コモンズDBCP2 2.1.1
-
Maven
-
Java 8
1.プロジェクトの構成
標準のMavenプロジェクト構造。

プロジェクトの依存関係
-
Oracle JDBCドライバをダウンロードしてインストールします。** + Oracleのライセンス制限により、パブリックMavenリポジトリからOracle JDBCドライバを取得することはできません。代わりにOracleのWebサイトにアクセスして、ドライバをダウンロードし、リンクする必要があります。//maven/how-to-add-oracle-jdbc-driver-in-your-maven-local-repository/[ローカルMavenリポジトリに手動でインストールします]。
SpringブートJDBC
spring-boot-starter-jdbc
、Oracle JDBCドライバ(手動インストール)` ojdbc7`、Common DBCP2接続プールを宣言します。
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4__0__0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mkyong</groupId>
<artifactId>spring-boot-jdbc</artifactId>
<packaging>jar</packaging>
<version>1.0</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.1.RELEASE</version>
</parent>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- Exclude teh default Tomcat connection pool -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
<exclusions>
<exclusion>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jdbc</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- Oracle JDBC driver -->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc7</artifactId>
<version>12.1.0</version>
</dependency>
<!-- Common DBCP2 connection pool -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.1.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<!-- Package as an executable jar/war -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
ターミナル
$ mvn dependency:tree[INFO]Scanning for projects...[INFO][INFO]------------------------------------------------------------------------[INFO]Building spring-boot-jdbc 1.0[INFO]------------------------------------------------------------------------[INFO][INFO]--- maven-dependency-plugin:2.10:tree (default-cli) @ spring-boot-jdbc ---[INFO]com.mkyong:spring-boot-jdbc:jar:1.0[INFO]+- org.springframework.boot:spring-boot-starter:jar:1.5.1.RELEASE:compile[INFO]| +- org.springframework.boot:spring-boot:jar:1.5.1.RELEASE:compile[INFO]| | \- org.springframework:spring-context:jar:4.3.6.RELEASE:compile[INFO]| | +- org.springframework:spring-aop:jar:4.3.6.RELEASE:compile[INFO]| | \- org.springframework:spring-expression:jar:4.3.6.RELEASE:compile[INFO]| +- org.springframework.boot:spring-boot-autoconfigure:jar:1.5.1.RELEASE:compile[INFO]| +- org.springframework.boot:spring-boot-starter-logging:jar:1.5.1.RELEASE:compile[INFO]| | +- ch.qos.logback:logback-classic:jar:1.1.9:compile[INFO]| | | +- ch.qos.logback:logback-core:jar:1.1.9:compile[INFO]| | | \- org.slf4j:slf4j-api:jar:1.7.22:compile[INFO]| | +- org.slf4j:jcl-over-slf4j:jar:1.7.22:compile[INFO]| | +- org.slf4j:jul-to-slf4j:jar:1.7.22:compile[INFO]| | \- org.slf4j:log4j-over-slf4j:jar:1.7.22:compile[INFO]| +- org.springframework:spring-core:jar:4.3.6.RELEASE:compile[INFO]| \- org.yaml:snakeyaml:jar:1.17:runtime[INFO]+- org.springframework.boot:spring-boot-starter-jdbc:jar:1.5.1.RELEASE:compile[INFO]| \- org.springframework:spring-jdbc:jar:4.3.6.RELEASE:compile[INFO]| +- org.springframework:spring-beans:jar:4.3.6.RELEASE:compile[INFO]| \- org.springframework:spring-tx:jar:4.3.6.RELEASE:compile[INFO]+- com.oracle:ojdbc7:jar:12.1.0:compile[INFO]\- org.apache.commons:commons-dbcp2:jar:2.1.1:compile[INFO] +- org.apache.commons:commons-pool2:jar:2.4.2:compile[INFO] \- commons-logging:commons-logging:jar:1.2:compile[INFO]------------------------------------------------------------------------
-
データベース接続プーリング** + Spring BootはデフォルトでTomcatに `tomcat-jdbc`をプールし、このシーケンスに従って接続プールを探します:
Tomcat pool -->> - HikariCP -->> Commons DBCP -->> Commons DBCP2
この公式のSpringブートのドキュメントを読む –
Connection本番データベースへ
3. JdbcTemplate
3.1 SpringBootは `JdbcTemplate`を自動的に登録し、あなたのbeanに注入します。
CustomerRepository.java
package com.mkyong.dao;
import com.mkyong.model.Customer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public class CustomerRepository {
@Autowired
private JdbcTemplate jdbcTemplate;
//thanks Java 8, look the custom RowMapper
public List<Customer> findAll() {
List<Customer> result = jdbcTemplate.query(
"SELECT id, name, email, created__date FROM customer",
(rs, rowNum) -> new Customer(rs.getInt("id"),
rs.getString("name"), rs.getString("email"), rs.getDate("created__date"))
);
return result;
}
}
3.2顧客モデル。
Customer.java
package com.mkyong.model;
import java.util.Date;
public class Customer {
int id;
String name;
String email;
Date date;
public Customer(int id, String name, String email, Date date) {
this.id = id;
this.name = name;
this.email = email;
this.date = date;
}
//getters and setters and toString...
}
4.データベースの初期化
SpringブートはデフォルトでdataSource初期化子を有効にし、クラスパスのルートから
schema.sql`と
data.sql`というSQLスクリプトをロードします。
4.1 `customer`テーブルを作成するためのSQLスクリプト。
schema.sql
CREATE TABLE CUSTOMER( ID NUMBER(10) NOT NULL, NAME VARCHAR2(100) NOT NULL, EMAIL VARCHAR2(100) NOT NULL, CREATED__DATE DATE NOT NULL, CONSTRAINT CUSTOMER__PK PRIMARY KEY (ID) );
4.2 `customer`テーブルに3行を挿入するSQLスクリプト。
data.sql
INSERT INTO "CUSTOMER" (ID, NAME, EMAIL, CREATED__DATE) VALUES(1, 'mkyong','[email protected]', TO__DATE('2017-02-11', 'yyyy-mm-dd')); INSERT INTO "CUSTOMER" (ID, NAME, EMAIL, CREATED__DATE) VALUES(2, 'yflow','[email protected]', TO__DATE('2017-02-12', 'yyyy-mm-dd')); INSERT INTO "CUSTOMER" (ID, NAME, EMAIL, CREATED__DATE) VALUES(3, 'zilap','[email protected]', TO__DATE('2017-02-13', 'yyyy-mm-dd'));
-
注** +これを読む –
データベースの初期化
5.設定
Oracleとhttps://commons.apache.org/proper/commons-dbcp/configuration.html[dbcp2設定]を設定します。
application.properties
spring.main.banner-mode=off # Set true for first time db initialization. spring.datasource.initialize=true spring.datasource.url=jdbc:oracle:thin:@localhost:1521:xe spring.datasource.username=system spring.datasource.password=password spring.datasource.driver-class-oracle.jdbc.driver.OracleDriver # dbcp2 settings # spring.datasource.dbcp2.** spring.datasource.dbcp2.initial-size=7 spring.datasource.dbcp2.max-total=20 spring.datasource.dbcp2.pool-prepared-statements=true
6. @SpringBootApplication
Springブートコマンドラインアプリケーション
SpringBootConsoleApplication.java
package com.mkyong;
import com.mkyong.dao.CustomerRepository;
import com.mkyong.model.Customer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import javax.sql.DataSource;
import java.util.List;
import static java.lang.System.exit;
@SpringBootApplication
public class SpringBootConsoleApplication implements CommandLineRunner {
@Autowired
DataSource dataSource;
@Autowired
CustomerRepository customerRepository;
public static void main(String[]args) throws Exception {
SpringApplication.run(SpringBootConsoleApplication.class, args);
}
@Override
public void run(String... args) throws Exception {
System.out.println("DATASOURCE = " + dataSource);
///Get dbcp2 datasource settings
//BasicDataSource newds = (BasicDataSource) dataSource;
//System.out.println("BasicDataSource = " + newds.getInitialSize());
System.out.println("Display all customers...");
List<Customer> list = customerRepository.findAll();
list.forEach(x -> System.out.println(x));
System.out.println("Done!");
exit(0);
}
}
デモ
それを実行すると、SpringBootは
schema.sql`と
data.sql`スクリプトを自動的にロードし、その結果を表示します。
ターミナル
DATASOURCE = org.apache.commons.dbcp2.BasicDataSource@4eb386df
Display all customers...
Customer{id=1, name='mkyong', email='[email protected]', date=2017-02-11}
Customer{id=2, name='yflow', email='[email protected]', date=2017-02-12}
Customer{id=3, name='zilap', email='[email protected]', date=2017-02-13}
Done!
デバッグ・セッションでブレークポイントを設定する場合は、Oracle Web管理者のセッション・ページを確認してください。

ソースコードをダウンロードする
ダウンロード:
spring-boot-jdbc-oracle-example.zip
(7 KB)
参考文献
-
リンク://maven/how-to-add-oracle-jdbc-driver-in-your-maven-local-repository/[Maven
Oracle JDBCドライバをインストール]。 link://jdbc/connect-to-oracle-db-via-jdbc-driver-java/[接続先
JDBCドライバ経由のOracle DB]。
https:///////
ブート – SQLデータベースの操作]。
https:///////
ブート – データベースの初期化]。
http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html
[Spring
ブート共通アプリケーションのプロパティ]。
http://docs.oracle.com/cd/E11882__01/appdev.112/e13995/oracle/jdbc/OracleDriver.html
[OracleDriver
データベース12.1.0.2 JDBCドライバ
Java with Oracle Database]。
https://commons.apache.org/proper/commons-dbcp/configuration.html
[Commons
DBCP2構成パラメータ]
リンク://タグ/接続プール/[接続プール]リンク://タグ/dbcp2/[dbcp2]
jdbc
oracle
spring boot
spring
jdbc