Quantcast
Channel: ソフラボの技術ブログ
Viewing all articles
Browse latest Browse all 166

SpringBootとDomaを連携する

$
0
0

SpringBootとDomaの連携をGitHubにあるサンプルを参考に作ってみました。
ビルドはGradleを使っています。

ディレクトリ構成

SpringBoot標準の構成を使用します。

  • src/main/java
    • demo
      • ConfigAutowireable.java
      • DataSourceConfiguration.java
    • demo.dao
  • src/main/resources
    • application.properties
  • build.gradle

作成・編集するファイル

build.gradle

DBライブラリの依存関係を追加します。
JDBCドライバーはローカルまたはMavenリポジトリから取得し、ビルド後のjarファイルに含めるようにします。

dependencies {
    // SpringBoot + Thymeleaf等必要に応じて
    compile("org.springframework.boot:spring-boot-starter-aop")
    compile("org.springframework.boot:spring-boot-starter-web")
    compile("org.springframework.boot:spring-boot-starter-thymeleaf")
    compile("org.hibernate:hibernate-validator")
    compile files("C:/app/lib/lombok/lombok-1.4.4.jar")

    // 以下DB関連の依存ライブラリ// SpringJdbc
    compile("org.springframework:spring-jdbc")
    // Doma最新版
    compile("org.seasar.doma:doma:1.+")
    // ローカルのOracleDriver
    compile files("C:/app/lib/jdbc/ojdbc7.jar")
}

application.properties

SpringBootのアプリケーション設定ファイルにデータベースの設定情報を記述します。

# Oracleの場合
spring.datasource.url=jdbc:oracle:thin:@xxx.xxx.xxx.xxx:1521:sid
spring.datasource.username=username
spring.datasource.password=password
spring.datasource.driverClassName=oracle.jdbc.driver.OracleDriver

ConfigAutowireable.java

DaoクラスをSpringのDIコンテナで管理するためのアノテーションを作成します。

package demo;

import org.seasar.doma.AnnotateWith;
import org.seasar.doma.Annotation;
import org.seasar.doma.AnnotationTarget;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@AnnotateWith(annotations = {
        @Annotation(target = AnnotationTarget.CLASS, type = Component.class),
        @Annotation(target = AnnotationTarget.CONSTRUCTOR, type = Autowired.class) })
public@interface ConfigAutowireable {

}

DataSourceConfiguration.java

SpringとDomaを連携するためのデータベース設定クラスを作成します。

package demo;

import javax.annotation.Resource;
import javax.sql.DataSource;

import org.seasar.doma.jdbc.Config;
import org.seasar.doma.jdbc.DomaAbstractConfig;
import org.seasar.doma.jdbc.NoCacheSqlFileRepository;
import org.seasar.doma.jdbc.SqlFileRepository;
import org.seasar.doma.jdbc.dialect.Dialect;
import org.seasar.doma.jdbc.dialect.OracleDialect;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@Configuration@EnableTransactionManagementpublicclass DataSourceConfiguration {

	@Resourceprivate Environment env;

	@Beanpublic DataSource dataSource() {
		// application.propertiesにあるDB設定キーから値を取得し設定します。
		DriverManagerDataSource dataSource = new DriverManagerDataSource();
		dataSource.setDriverClassName(env.getRequiredProperty("spring.datasource.driverClassName"));
		dataSource.setUrl(env.getRequiredProperty("spring.datasource.url"));
		dataSource.setUsername(env.getRequiredProperty("spring.datasource.username"));
		dataSource.setPassword(env.getRequiredProperty("spring.datasource.password"));

                // TransactionAwareDataSourceProxyでラッピングしないとDoma側でコネクションがおかしくなるreturnnew TransactionAwareDataSourceProxy(dataSource);
	}

	@Beanpublic PlatformTransactionManager transactionManager() {
		returnnew DataSourceTransactionManager(dataSource());
	}

	@Beanpublic Dialect dialect() {
		// DBの方言はここで設定します。returnnew OracleDialect();
	}

	@Beanpublic SqlFileRepository sqlFileRepository() {
		returnnew NoCacheSqlFileRepository();
	}

	@Beanpublic Config config() {
		// Domaの設定を行います。デフォルトはDomaAbstractConfigを使用します。returnnew DomaAbstractConfig() {

			@Overridepublic Dialect getDialect() {
				return dialect();
			}

			@Overridepublic DataSource getDataSource() {
				return dataSource();
			}

			@Overridepublic SqlFileRepository getSqlFileRepository() {
				return sqlFileRepository();
			}
		};
	}
}

TestDao.java

先ほど作成したConfigAutowireableアノテーションをDaoに設定します。

package demo.dao;

import org.seasar.doma.Dao;

import demo.ConfigAutowireable;

@Dao@ConfigAutowireablepublicinterface TestDao {
}

Viewing all articles
Browse latest Browse all 166

Trending Articles