Spring Boot で書籍の貸出状況確認・貸出申請する Web アプリケーションを作る ( その4 )( Project の作成 )
概要
Spring Boot で書籍の貸出状況確認・貸出申請する Web アプリケーションを作る ( その3 )( RabbitMQ ( Windows 版 ) のインストール ) の続きです。
- 今回の手順で確認できるのは以下の内容です。
- Project の作成
参照したサイト・書籍
目次
- はじめに
- IntelliJ IDEA の起動、Project の作成
- Project View の「Compact Empty Middle Packages」のチェックを外す
- build.gradle の編集、反映
- Settings ダイアログでの設定変更
- Project language level を設定する
- JUnit によるテスト実行時の spring.profiles.active と文字コードを設定する
- templates ディレクトリの作成
- ksbysample-webapp-email, ksbysample-webapp-basic からファイルをコピーする
- Spring MVC View に URL 一覧を表示するための設定
- Tomcat の起動、停止の確認
- GitHub へのアップロード
- 1.0.x ブランチの作成
手順
はじめに
IntelliJ IDEA の Gradle Projet の作成方法が一部変更されましたので、ksbysample-webapp-email で記載した手順を転記しつつ、まとめ直します。
またこの記事を書いている時に Spring Boot の 1.2.5 がリリースされました。今回は最初から 1.2.5 を使用します。他のライブラリも最新のバージョンを使用します。
IntelliJ IDEA の起動、Project の作成
IntelliJ IDEA を起動します。他の Project を開いている場合には、メイン画面のメニューから「File」->「Close Project」を選択して Project をクローズします。
「Welcome to IntelliJ IDEA」画面が表示されます。画面中央の「Create New Project」をクリックします。
「New Project」画面が表示されます。画面左側のリストから「Gradle」を選択し、画面右側は以下の画像の状態にして「Next」ボタンをクリックします。
GroupId、ArtifactId、Version を入力する画面が表示されます。以下の点を変更した後、「Next」ボタンをクリックします。
- 「GroupdId」に "project" を入力します。
- 「ArtifactId」に "ksbysample-webapp-lending" を入力します。
※「ArtifactId」に入力した文字列がディレクトリ名になります。C:\project-springboot\ksbysample-webapp-lending の赤文字の部分です。
Gradle の設定をする画面が表示されます。以下の点を変更した後、「Next」ボタンをクリックします。
- 「Create directories for empty roots automatically」をチェックします。
Project name、Project location を入力する画面が表示されます。「Finish」ボタンをクリックします。
※ここで「Project name」を変更してはいけません。
IntelliJ IDEA のメイン画面が表示されます。最初に Gradle が実行されて src ディレクトリが作成されるので ( メイン画面の下にメッセージが表示されています )、src ディレクトリが表示されるまで待ちます。Gradle の処理が終了すると Project View に表示されるディレクトリ構造は以下のようになります。
※src/main/java や src/test/java に以下の画像のように色が付いていることを確認します。
Project View の「Compact Empty Middle Packages」のチェックを外す
Project View の「Compact Empty Middle Packages」のチェックを外します。
build.gradle の編集、反映
build.gradle を リンク先の内容 に変更します。ksbysample-webapp-email の build.gradle から以下の点を変更しています。
- Ultimate Edition で Spring Boot プロジェクトを作成した時に build.gradle に出力されていたものの内、反映した方がよさそうなものを入れています。
- dependencies 内でバージョン番号を指定しているライブラリは jcenter で最新のバージョンを調べて修正しています。
Gradle projects View の左上にある「Refresh all Gradle projects」アイコンをクリックして、変更した build.gradle の内容を反映します。
Settings ダイアログでの設定変更
- メイン画面のメニューから「File」->「Settings...」を選択して「Settings」ダイアログを表示します。
「Editor」->「File Encodings」で文字コードを UTF-8 に変更する
Project Encoding を UTF-8 に設定します。画面左側で「Editor」->「File Encodings」を選択後、画面右側に「Project Encoding」の設定項目が表示されますので「windows-31j」→「UTF-8」に変更します。
native2ascii を有効にする
そのまま「Editor」->「File Encodings」の画面で、画面右側下部に「Properties Files (*.properties)」の設定項目が表示されていますので、以下の点を変更します。
- 「Default encoding for properties files」を「<System Default> (now windows-31j)」→「UTF-8」に変更します。
- 「Transparent native-to-ascii conversion」をチェックします。
「Enable annotaion processing」をチェックする
lombok を使用するのに必要な設定を有効にします。画面左上の検索フィールドに "Annotation" と入力すると画面左側のツリーの一番下に「Annotaion Processors」が表示されるのでそれを選択した後、画面右側に表示される「Enable annotaion processing」をチェックします。
Gradle 実行時の文字コードを UTF-8 にする
Gradle の文字コードを VM options で指定します。画面左上の検索フィールドに "Gradle" と入力した後、画面左側のツリーの一番下に表示される「Gradle-Android Compiler」を選択します。画面右側に「VM Options」の欄がありますので、ここに
-Dfile.encoding=UTF-8
を入力します。
Gradle が使用する JVM を Project の JVM に合わせる
Gradle が使用する JVM を Project の JVM に合わせます。画面左上の検索フィールドに "Gradle" と入力して画面左側のツリーから「Build, Execution, Deployment」-「Build Tools」-「Gradle」を選択した後、画面右側の「Gradle JVM」で「Use Project JDK」を選択します。
YAML ファイルを編集時に行末の空白を自動で取り除かないようにする
YAML ファイルを編集する時に IntelliJ IDEA が行末の空白を自動で取り除かないよう設定を変更します。画面左側のツリーから「Editor」-「General」を選択後、画面右側の下部にある「Strip trailing spaces on Save」で「None」を選択します。
「OK」ボタンをクリックして「Settings」ダイアログを閉じます。
Project language level を設定する
メイン画面のメニューから「File」->「Project Structure...」を選択して「Project Structure」ダイアログを表示します。
Project language level を「SDK default」に設定します。画面左側のツリーから「Project Settings」-「Project」を選択し、画面右側で「Project language level」の設定を「SDK default」へ設定後「OK」ボタンをクリックして「Project Structure」ダイアログを閉じます。
JUnit によるテスト実行時の spring.profiles.active と文字コードを設定する
メイン画面のメニューから「Run」-「Edit Configurations...」を選択します。
JUnit によるテスト実行時の spring.profiles.active の値 ( unittest ) と文字コード ( UTF-8 ) を設定します。「Run/Debug Configuraitons」ダイアログが表示されます。左側のツリーで「Defaults」-「JUnit」を選択した後、右側の画面の「VM options」の末尾に
-Dspring.profiles.active=unittest -Dfile.encoding=UTF-8
を追加します。追加後「OK」ボタンをクリックしてダイアログを閉じます。
templates ディレクトリの作成
Project View で src/main/resources の下に templates ディレクトリを作成します。
作成した templates ディレクトリの下に .gitkeep ファイルを作成します。
ksbysample-webapp-email, ksbysample-webapp-basic からファイルをコピーする
以下の画像の階層のパッケージを作成します。
ksbysample-webapp-email から以下のファイルをコピーします。
※リンクのあるファイルはリンク先の内容に変更します。
■src/main/java
- src/main/java/ksbysample/webapp/email/Application.java
→ src/main/java/ksbysample/webapp/lending/Application.java - src/main/java/ksbysample/webapp/email/config/ApplicationConfig.java
→ src/main/java/ksbysample/webapp/lending/ApplicationConfig.java - src/main/java/ksbysample/webapp/email/config/Constant.java
→ src/main/java/ksbysample/webapp/lending/Constant.java - src/main/java/ksbysample/webapp/email/config/DomaConfig.java
→ src/main/java/ksbysample/webapp/lending/DomaConfig.java - src/main/java/ksbysample/webapp/email/helper/PagenationHelper.java
→ src/main/java/ksbysample/webapp/lending/helper/page/PagenationHelper.java - src/main/java/ksbysample/webapp/email/annotation/dao/ComponentAndAutowiredDomaConfig.java
→ src/main/java/ksbysample/webapp/lending/util/doma/ComponentAndAutowiredDomaConfig.java - src/main/java/ksbysample/webapp/email/util/SelectOptionsUtils.java
→ src/main/java/ksbysample/webapp/lending/util/doma/SelectOptionsUtils.java - src/main/java/ksbysample/webapp/email/util/VelocityUtils.java
→ src/main/java/ksbysample/webapp/lending/util/velocity/VelocityUtils.java
■src/main/resources
- src/main/resources/application.properties
→ src/main/resources/application.properties - src/main/resources/applicationContext.xml
→ src/main/resources/applicationContext.xml - src/main/resources/application-develop.properties
→ src/main/resources/application-develop.properties - src/main/resources/application-product.properties
→ src/main/resources/application-product.properties - src/main/resources/application-unittest.properties
→ src/main/resources/application-unittest.properties - src/main/resources/hibernate.properties
→ src/main/resources/hibernate.properties - src/main/resources/log4jdbc.log4j2.properties
→ src/main/resources/log4jdbc.log4j2.properties - src/main/resources/logback.xml
→ src/main/resources/logback.xml - src/main/resources/logback-develop.xml
→ src/main/resources/logback-develop.xml - src/main/resources/logback-product.xml
→ src/main/resources/logback-product.xml - src/main/resources/logback-unittest.xml
→ src/main/resources/logback-unittest.xml - src/main/resources/messages_ja_JP.properties
→ src/main/resources/messages_ja_JP.properties - src/main/resources/ValidationMessages_ja_JP.properties
→ src/main/resources/ValidationMessages_ja_JP.properties
■src/test/java
- src/test/java/ksbysample/webapp/email/test/CustomModelResultMatchers.java
→ src/test/java/ksbysample/common/test/CustomModelResultMatchers.java - src/test/java/ksbysample/webapp/email/test/ErrorsResultMatchers.java
→ src/test/java/ksbysample/common/test/ErrorsResultMatchers.java - src/test/java/ksbysample/webapp/email/test/MailServerResource.java
→ src/test/java/ksbysample/common/test/MailServerResource.java - src/test/java/ksbysample/webapp/email/test/TableDataAssert.java
→ src/test/java/ksbysample/common/test/TableDataAssert.java - src/test/java/ksbysample/webapp/email/test/TestDataLoader.java
→ src/test/java/ksbysample/common/test/TestDataLoader.java - src/test/java/ksbysample/webapp/email/test/TestDataLoaderResource.java
→ src/test/java/ksbysample/common/test/TestDataLoaderResource.java - src/test/java/ksbysample/webapp/email/test/TestDataResource.java
→ src/test/java/ksbysample/common/test/TestDataResource.java - src/test/java/ksbysample/webapp/email/test/TestDataResource.java
→ src/test/java/ksbysample/common/test/TestDataResource.java - src/test/java/ksbysample/webapp/email/test/TestHelper.java
→ src/test/java/ksbysample/common/test/TestHelper.java
■その他
- /.gitignore
→ /.gitignore
- src/main/java/ksbysample/webapp/email/Application.java
ksbysample-webapp-basic から以下のファイルをコピーします。
※リンクのあるファイルはリンク先の内容に変更します。
■src/main/java
- src/main/java/ksbysample/webapp/basic/config/WebSecurityConfig.java
→ src/main/java/ksbysample/webapp/lending/config/WebSecurityConfig.java
■src/test/java
- src/main/java/ksbysample/webapp/basic/config/WebSecurityConfig.java
ファイルコピー後は以下のディレクトリ構成になります。
Spring MVC View に URL 一覧を表示するための設定
※Ultimate Edition 限定の設定です。Spring Boot でメール送信する Web アプリケーションを作る ( 番外編 )( IntelliJ IDEA の Spring MVC View に URL 一覧を表示する ) を参照してください。手順が長いので転記しません。
※設定完了後のディレクトリ構成、「Project Structure」ダイアログの設定、dispatcher-servlet.xml, web.xml の内容を記載しておきます。
Tomcat の起動、停止の確認
※PostgreSQL が起動していない場合には起動しておきます。
Gradle projects View から bootRun タスクを実行します。起動して "Started Application in ..." のログが出力されることを確認します。
Ctrl+F2 を押して Tomcat を停止します。
GitHub へのアップロード
メイン画面のメニューから「VCS」->「Import into Version Control」->「Share Project on GitHub」を選択します。
「Share Project on GitHub」ダイアログが表示されます。「Description」を記入して「Share」ボタンをクリックします。
「Add Files For Initial Commit」ダイアログが表示されます。何も変更せずに「OK」ボタンをクリックします。
チェックされたファイルが GitHub へアップロードされます。成功するとメイン画面の左下に「Successfully shared project on GitHub」のメッセージが表示されます。
ブラウザを起動し、https://github.com/ksby にアクセスします。「Popular repositories」欄に ksbysample-webapp-lending が表示されていることを確認した後、ksbysample-webapp-lending リンクをクリックします。
https://github.com/ksby/ksbysample-webapp-lending へ遷移します。ページ下部にある「Add a README」ボタンをクリックします。
README の編集画面が表示されるので適宜編集した後、ページ下部の「Commit new file」ボタンをクリックします。
https://github.com/ksby/ksbysample-webapp-lending へ戻り、README.md が作成されていることを確認します。
画面上部の「Edit」リンクをクリックして「Description」を「ファイルアップロード・ダウンロード、Cookie、セッション、Spring Session、WebAPI、Spring Security、RabbitMQ連携のサンプル」へ変更します。
IntelliJ IDEA のメインメニューから「VCS」-「Update Project...」メニューを選択します。「Update Project」ダイアログが表示されたら何も変更せずに「OK」ボタンをクリックします。
1.0.x ブランチの作成
ソースコード
build.gradle
buildscript { ext { springBootVersion = '1.2.5.RELEASE' } repositories { jcenter() maven { url "http://repo.spring.io/repo/" } } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") classpath("io.spring.gradle:dependency-management-plugin:0.5.1.RELEASE") // for Grgit classpath("org.ajoberstar:grgit:1.1.0") } } apply plugin: 'java' apply plugin: 'eclipse' apply plugin: 'idea' apply plugin: 'spring-boot' apply plugin: 'io.spring.dependency-management' // for Doma 2 // JavaクラスとSQLファイルの出力先ディレクトリを同じにする processResources.destinationDir = compileJava.destinationDir // コンパイルより前にSQLファイルを出力先ディレクトリにコピーするために依存関係を逆転する compileJava.dependsOn processResources jar { baseName = 'ksbysample-webapp-lending' version = '1.0.0-SNAPSHOT' } sourceCompatibility = 1.8 targetCompatibility = 1.8 eclipse { classpath { containers.remove('org.eclipse.jdt.launching.JRE_CONTAINER') containers 'org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8' } } idea { module { inheritOutputDirs = false outputDir = file("$buildDir/classes/main/") } } configurations { domaGenRuntime } repositories { jcenter() } dependencies { def jdbcDriver = "org.postgresql:postgresql:9.4-1201-jdbc41" // spring-boot-gradle-plugin によりバージョン番号が自動で設定されるもの // Appendix E. Dependency versions ( http://docs.spring.io/spring-boot/docs/current/reference/html/appendix-dependency-versions.html ) 参照 compile("org.springframework.boot:spring-boot-starter-web") compile("org.springframework.boot:spring-boot-starter-thymeleaf") compile("org.springframework.boot:spring-boot-starter-data-jpa") compile("org.springframework.boot:spring-boot-starter-velocity") compile("org.springframework.boot:spring-boot-starter-mail") compile("org.springframework.boot:spring-boot-starter-security") compile("org.codehaus.janino:janino") testCompile("org.springframework.boot:spring-boot-starter-test") testCompile("org.springframework.security:spring-security-test:4.0.1.RELEASE") testCompile("org.yaml:snakeyaml") // spring-boot-gradle-plugin によりバージョン番号が自動で設定されないもの compile("${jdbcDriver}") compile("org.seasar.doma:doma:2.3.1") compile("org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16") compile("org.apache.commons:commons-lang3:3.4") compile("org.projectlombok:lombok:1.16.4") compile("com.google.guava:guava:18.0") testCompile("org.dbunit:dbunit:2.5.1") testCompile("com.icegreen:greenmail:1.4.1") // for Doma-Gen domaGenRuntime("org.seasar.doma:doma-gen:2.3.1") domaGenRuntime("${jdbcDriver}") } bootRun { jvmArgs = ['-Dspring.profiles.active=develop'] } test { jvmArgs = ['-Dspring.profiles.active=unittest'] } // for Doma-Gen task gen << { def rootPackageName = 'ksbysample.webapp.lending' ant.taskdef(resource: 'domagentask.properties', classpath: configurations.domaGenRuntime.asPath) ant.gen(url: 'jdbc:postgresql://localhost/lendingdb', user: 'lending_user', password: 'xxxxxxxx') { entityConfig(packageName: "${rootPackageName}.entity", useListener: false) daoConfig(packageName: "${rootPackageName}.dao") sqlConfig() } // 自動生成したファイルを git add する def grgit = org.ajoberstar.grgit.Grgit.open(dir: project.projectDir) grgit.add(patterns: ['.']) }
Constant.java
package ksbysample.webapp.lending.config; public class Constant { }
- 定数を定義するクラスです。現時点では何も定義しません。
application.properties
hibernate.dialect=org.hibernate.dialect.PostgreSQL9Dialect doma.dialect=org.seasar.doma.jdbc.dialect.PostgresDialect spring.jpa.hibernate.ddl-auto=none spring.jpa.hibernate.naming_strategy=org.hibernate.cfg.ImprovedNamingStrategy spring.velocity.enabled=false spring.velocity.charset=UTF-8
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="*" rollback-for="Exception" timeout="3"/> </tx:attributes> </tx:advice> <aop:config> <aop:pointcut id="pointcutService" expression="execution(* ksbysample.webapp.lending..*Service.*(..))"/> <aop:advisor advice-ref="txAdvice" pointcut-ref="pointcutService"/> </aop:config> </beans>
<aop:pointcut id="pointcutService" expression="execution(* ksbysample.webapp.email..*Service.*(..))"/>
→<aop:pointcut id="pointcutService" expression="execution(* ksbysample.webapp.lending..*Service.*(..))"/>
へ変更します。
application-develop.properties
spring.datasource.url=jdbc:log4jdbc:postgresql://localhost/ksbyemail spring.datasource.username=ksbyemail_user spring.datasource.password=xxxxxxxx spring.datasource.driverClassName=net.sf.log4jdbc.sql.jdbcapi.DriverSpy spring.mail.host=localhost spring.mail.port=25 spring.messages.cache-seconds=0 spring.thymeleaf.cache=false spring.velocity.cache=false
- DB の設定は一旦そのままにします。
- 今回の Project で不要な設定を削除します。
application-product.properties
server.tomcat.basedir=C:/webapps/ksbysample-webapp-lending spring.datasource.url=jdbc:postgresql://localhost/ksbyemail spring.datasource.username=ksbyemail_user spring.datasource.password=xxxxxxxx spring.datasource.driverClassName=org.postgresql.Driver spring.mail.host=localhost spring.mail.port=25 spring.thymeleaf.cache=true
- server.tomcat.basedir の設定を変更します。
- DB の設定は一旦そのままにします。
- 今回の Project で不要な設定を削除します。
application-unittest.properties
spring.datasource.url=jdbc:postgresql://localhost/ksbyemail spring.datasource.username=ksbyemail_user spring.datasource.password=xxxxxxxx spring.datasource.driverClassName=org.postgresql.Driver spring.mail.host=localhost spring.mail.port=25 spring.thymeleaf.cache=true
- DB の設定は一旦そのままにします。
- 今回の Project で不要な設定を削除します。
logback.xml
<?xml version="1.0" encoding="UTF-8"?> <configuration> <include resource="org/springframework/boot/logging/logback/defaults.xml"/> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>UTF-8</charset> </encoder> </appender> <property name="LOG_FILE" value="C:/webapps/ksbysample-webapp-lending/logs/ksbysample-webapp-lending.log"/> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <encoder> <pattern>${FILE_LOG_PATTERN}</pattern> </encoder> <file>${LOG_FILE}</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}</fileNamePattern> <maxHistory>30</maxHistory> </rollingPolicy> </appender> <if condition='"${spring.profiles.active}" == "develop"'> <then> <include resource="logback-develop.xml"/> </then> </if> <if condition='"${spring.profiles.active}" == "unittest"'> <then> <include resource="logback-unittest.xml"/> </then> </if> <if condition='"${spring.profiles.active}" == "product"'> <then> <include resource="logback-product.xml"/> </then> </if> </configuration>
<property name="LOG_FILE" value="C:/webapps/ksbysample-webapp-email/logs/ksbysample-webapp-email.log"/>
→<property name="LOG_FILE" value="C:/webapps/ksbysample-webapp-lending/logs/ksbysample-webapp-lending.log"/>
へ変更します。
messages_ja_JP.properties
AbstractUserDetailsAuthenticationProvider.locked=入力された ID はロックされています AbstractUserDetailsAuthenticationProvider.disabled=入力された ID は使用できません AbstractUserDetailsAuthenticationProvider.expired=入力された ID の有効期限が切れています AbstractUserDetailsAuthenticationProvider.credentialsExpired=入力された ID のパスワードの有効期限が切れています AbstractUserDetailsAuthenticationProvider.badCredentials=入力された ID あるいはパスワードが正しくありません typeMismatch.java.math.BigDecimal=数値を入力して下さい。 typeMismatch.java.lang.Long=数値を入力して下さい。
TestDataResource.java
package ksbysample.common.test; import org.dbunit.database.DatabaseConnection; import org.dbunit.database.IDatabaseConnection; import org.dbunit.database.QueryDataSet; import org.dbunit.dataset.IDataSet; import org.dbunit.dataset.ReplacementDataSet; import org.dbunit.dataset.csv.CsvDataSet; import org.dbunit.dataset.xml.FlatXmlDataSet; import org.dbunit.dataset.xml.FlatXmlDataSetBuilder; import org.dbunit.operation.DatabaseOperation; import org.junit.rules.ExternalResource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.sql.DataSource; import java.io.File; import java.io.FileOutputStream; import java.nio.file.Files; import java.util.Arrays; import java.util.List; @Component public class TestDataResource extends ExternalResource { private final List<String> BACKUP_TABLES = Arrays.asList( "xxxxxxxx" , "xxxxxxxx" ); private final String BACKUP_FILE_NAME = "ksbylending_backup"; @Autowired private DataSource dataSource; private File backupFile; @Override protected void before() throws Exception { IDatabaseConnection conn = null; try { conn = new DatabaseConnection(dataSource.getConnection()); // バックアップを取得する QueryDataSet partialDataSet = new QueryDataSet(conn); for (String backupTable : BACKUP_TABLES) { partialDataSet.addTable(backupTable); } ReplacementDataSet replacementDatasetBackup = new ReplacementDataSet(partialDataSet); replacementDatasetBackup.addReplacementObject("", "[null]"); backupFile = File.createTempFile(BACKUP_FILE_NAME, "xml"); try (FileOutputStream fos = new FileOutputStream(backupFile)) { FlatXmlDataSet.write(replacementDatasetBackup, fos); } // テストデータに入れ替える IDataSet dataSet = new CsvDataSet(new File("src/test/resources/testdata")); ReplacementDataSet replacementDataset = new ReplacementDataSet(dataSet); replacementDataset.addReplacementObject("[null]", null); DatabaseOperation.CLEAN_INSERT.execute(conn, replacementDataset); } finally { if (conn != null) conn.close(); } } @Override protected void after() { try { IDatabaseConnection conn = null; try { conn = new DatabaseConnection(dataSource.getConnection()); // バックアップからリストアする if (backupFile != null) { IDataSet dataSet = new FlatXmlDataSetBuilder().build(backupFile); ReplacementDataSet replacementDatasetRestore = new ReplacementDataSet(dataSet); replacementDatasetRestore.addReplacementObject("[null]", null); DatabaseOperation.CLEAN_INSERT.execute(conn, replacementDatasetRestore); } } finally { if (backupFile != null) { Files.delete(backupFile.toPath()); backupFile = null; } try { if (conn != null) conn.close(); } catch (Exception ignored) { } } } catch (Exception e) { e.printStackTrace(); } } }
- テーブル名がまだ未定なので、BACKUP_TABLES のデータは全て
xxxxxxxx
に変更しておきます。 - BACKUP_FILE_NAME の値を
ksbylending_backup
に変更します。
WebSecurityConfig.java
package ksbysample.webapp.lending.config; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.security.SecurityProperties; import org.springframework.context.annotation.Configuration; import org.springframework.core.annotation.Order; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.web.util.matcher.AntPathRequestMatcher; import javax.sql.DataSource; @Configuration @Order(SecurityProperties.ACCESS_OVERRIDE_ORDER) public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Autowired private DataSource dataSource; @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() // 認証の対象外にしたいURLがある場合には、以下のような記述を追加します // 複数URLがある場合はantMatchersメソッドにカンマ区切りで対象URLを複数列挙します // .antMatchers("/country/**").permitAll() .anyRequest().authenticated(); http.formLogin() .loginPage("/") .loginProcessingUrl("/login") .defaultSuccessUrl("/xxxxxxxx") .failureUrl("/") .usernameParameter("id") .passwordParameter("password") .permitAll() .and() .logout() .logoutRequestMatcher(new AntPathRequestMatcher("/logout")) .logoutSuccessUrl("/") .deleteCookies("JSESSIONID") .invalidateHttpSession(true) .permitAll(); } @Autowired public void configAuthentication(AuthenticationManagerBuilder auth) throws Exception { auth.jdbcAuthentication().dataSource(dataSource) .usersByUsernameQuery("select id, password, enabled from user where id = ?") .authoritiesByUsernameQuery("select id, role from user_role where id = ?") .passwordEncoder(new BCryptPasswordEncoder()); } }
dispatcher-servlet.xml
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"> <context:component-scan base-package="ksbysample.webapp.lending.web" /> </beans>
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> </web-app>
履歴
2015/07/04
初版発行。