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