Spring Boot でメール送信する Web アプリケーションを作る ( その20 )( 気になった点を修正 )
概要
Spring Boot でメール送信する Web アプリケーションを作る ( その19 )( 送信済メール検索画面の作成2 ) の続きです。
- 今回の手順で確認できるのは以下の内容です。
ソフトウェア一覧
参考にしたサイト
- Doma - User Documentation - 設定
http://doma.readthedocs.org/ja/stable/config/
手順
Doma が SQL 文をログに出力しないようにする
SQL 文のログは INFO レベルで出力されているので、ERROR レベルのログのみ出力されるようにします。
src/main/resources の下の logback-develop.xml, logback-product.xml を リンク先の内容 に変更します。
動作確認します。Gradle projects View から bootRun タスクを実行して Tomcat を起動します。
ブラウザを起動し http://localhost:8080/mailsearch へアクセスします。画面が表示された後にログを確認すると、doma の INFO ログが出力されていないことが確認できます。
Run View で Ctrl+F2 を押して Tomcat を停止します。
commit、GitHub へ Push、1.0.x-change-doma-loglevel -> 1.0.x へ Pull Request、1.0.x でマージ、1.0.x-change-doma-loglevel ブランチを削除、をします。
Tomcat 起動中に修正した SQL ファイルが反映されるようにする
Doma の User Documentation の 設定 - SQLファイルのリポジトリ を見ると、Doma 用の Config インターフェースの実装クラスで getSqlFileRepository が返す SqlFileRepository インターフェースの実装クラスが GreedyCacheSqlFileRepository か NoCacheSqlFileRepository かでキャッシュされるか否かが分かれるようです。
develop モードの時のみ NoCacheSqlFileRepository を、それ以外は GreedyCacheSqlFileRepository を返すようにして、開発時は SQL ファイルがキャッシュされないようにします。
src/main/java/ksbysample/webapp/email/config の下の DomaConfig.java を リンク先の内容 に変更します。
動作確認します。Gradle projects View から bootRun タスクを実行して Tomcat を起動します ( develop モードです )。
ブラウザを起動し http://localhost:8080/mailsearch へアクセスします。hanako@sample.com のデータが最初に表示されています。
Tomcat は起動したままで、src/main/resources/META-INF/ksbysample/webapp/email/web/mailsearch/MailsearchDao の下の selectCondition.sql を リンク先の内容 に変更します。
再度ブラウザから http://localhost:8080/mailsearch へアクセスします。修正した SQL ファイルが反映されて、今度は xxx@yyy.zzz のデータが最初に表示されました。
src/main/resources/META-INF/ksbysample/webapp/email/web/mailsearch/MailsearchDao の下の selectCondition.sql を元に戻します。
build.gradle を リンク先の内容 に変更します。
Ctrl+F5 を押して Tomcat を再起動します ( unittest モードです )。
ブラウザから http://localhost:8080/mailsearch へアクセスします。hanako@sample.com のデータが最初に表示されています。
Tomcat は起動したままで、src/main/resources/META-INF/ksbysample/webapp/email/web/mailsearch/MailsearchDao の下の selectCondition.sql を リンク先の内容 に変更します。
再度ブラウザから http://localhost:8080/mailsearch へアクセスします。修正した SQL ファイルは反映されず、hanako@sample.com のデータが最初に表示されたままでした。
Run View で Ctrl+F2 を押して Tomcat を停止します。
src/main/resources/META-INF/ksbysample/webapp/email/web/mailsearch/MailsearchDao の下の selectCondition.sql を元に戻します。
build.gradle を元に戻します。
commit、GitHub へ Push、1.0.x-nocache-doma-sqlfile -> 1.0.x へ Pull Request、1.0.x でマージ、1.0.x-nocache-doma-sqlfile ブランチを削除、をします。
次回は。。。
もう少しいろいろ修正したり、試してみたりする予定です。
その後に、Windows で本番稼働させるためのディレクトリ作成、bat ファイル作成、サービス登録、jar ファイル配置、動作確認して完了にする予定です。
ソースコード
logback-develop.xml, logback-product.xml
<?xml version="1.0" encoding="UTF-8"?> <included> <root level="INFO"> <appender-ref ref="CONSOLE"/> </root> <!-- Spring MVC --> <logger name="org.springframework.web" level="DEBUG"/> <!-- log4jdbc-log4j2 --> <logger name="jdbc.sqlonly" level="DEBUG"/> <logger name="jdbc.sqltiming" level="INFO"/> <logger name="jdbc.audit" level="INFO"/> <logger name="jdbc.resultset" level="ERROR"/> <logger name="jdbc.resultsettable" level="ERROR"/> <logger name="jdbc.connection" level="DEBUG"/> <!-- Doma 2 --> <logger name="org.seasar.doma" level="ERROR"/> </included>
<logger name="org.seasar.doma" level="ERROR"/>
を追加します。
<?xml version="1.0" encoding="UTF-8"?> <included> <root level="INFO"> <appender-ref ref="FILE"/> </root> <!-- Doma 2 --> <logger name="org.seasar.doma" level="ERROR"/> </included>
<logger name="org.seasar.doma" level="ERROR"/>
を追加します。
DomaConfig.java
package ksbysample.webapp.email.config; import org.apache.commons.lang3.StringUtils; import org.seasar.doma.jdbc.Config; import org.seasar.doma.jdbc.GreedyCacheSqlFileRepository; import org.seasar.doma.jdbc.NoCacheSqlFileRepository; import org.seasar.doma.jdbc.SqlFileRepository; import org.seasar.doma.jdbc.dialect.Dialect; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy; import org.springframework.stereotype.Component; import javax.sql.DataSource; @Component public class DomaConfig implements Config { private DataSource dataSource; @Autowired private Dialect dialect; private SqlFileRepository sqlFileRepository; public DomaConfig() { } @Autowired public void setDataSource(DataSource dataSource) { this.dataSource = new TransactionAwareDataSourceProxy(dataSource); } @Autowired public void setSqlFileRepository(@Value("${spring.profiles.active}") String springProfilesActive) { // develop モードの時は SQL ファイルがキャッシュされないようにする if (StringUtils.equals(springProfilesActive, "develop")) { this.sqlFileRepository = new NoCacheSqlFileRepository(); } else { this.sqlFileRepository = new GreedyCacheSqlFileRepository(); } } @Override public DataSource getDataSource() { return this.dataSource; } @Override public Dialect getDialect() { return this.dialect; } @Override public SqlFileRepository getSqlFileRepository() { return this.sqlFileRepository; } @Configuration protected static class DomaBeanConfig { @Value("${doma.dialect}") private String domaDialect; @Bean public Dialect dialect() throws ClassNotFoundException, IllegalAccessException, InstantiationException { return (Dialect) Class.forName(domaDialect).newInstance(); } } }
- getSqlFileRepository メソッドを追加しますが、このメソッドは SQL 実行時に毎回呼び出されるので、SqlFileRepository インターフェースの実装クラスのインスタンスは最初に1回だけ生成されるようにします。以下の点を変更します。
private SqlFileRepository sqlFileRepository;
を追加します。@Autowired public void setSqlFileRepository(@Value("${spring.profiles.active}") String springProfilesActive) { ... }
を追加します。- getSqlFileRepository メソッドを追加します。
selectCondition.sql
order by em.to_addr desc
desc
を追加してソート順を逆にします。
build.gradle
bootRun {
jvmArgs = ['-Dspring.profiles.active=unittest']
}
develop
→unittest
に変更します
履歴
2015/06/20
初版発行。