このページについて
Spring Boot2 x Doma2で開発するにあたって少しだけハマったことがいくつかあったので備忘録として残しておこうと思います。
当方のスペック
Spring Boot 2.1.7
Java11
IntelliJ 2018.3
DOMA doma-spring-boot-starter:1.1.1
MySQL 5.7
gradle 5.4.1
[DOMA4019] SQLファイルが クラスパスから見つかりませんでした
以下のようにSQLをファイルを正しいディレクトリ構成でおいてもこのエラーが出る場合があります。
例) -- SQLファイルの置く場所は間違っていない
UserRepostory findOneメソッド
src/main/xxx/domain/repository/UserResotiory.java
src/main/resources/META-INF/xxx/domain/repository/UserResotiory/findOne.sql
解決策)
build.gradleに以下を追加
processResources.destinationDir = compileJava.destinationDir
compileJava.dependsOn processResources
参考: https://github.com/domaframework/simple-boilerplate/blob/master/build.gradle
ビルド時にRepository(Dao)インターフェースの実装がないと怒られる
以下みたいなエラー
required a bean of type xxxxxRepository that could not be found.
Consider defining a bean of type xxxxxx
解決策)
1.IntellJで以下の設定をしていることが前提(Lombok入れていればやっているはず)
Preference > Build,Execution,Deployment > Annotation Processorsで
Enable annotation processing をON
2.Repository(Dao)インターフェースに ConfigAutowireableアノテーションをつける
DomaConfigの作り方
未知のカラムがあってもスルーしてほしい場合、DomaのConfigクラスを作りUnknownColumnHandlerをオーバーライドする必要がある。(他にもConfigが必要なケースはあるはず)
公式ドキュメントだとSingletonConfig を使うやり方が一番上にあるがSpring Bootの場合はフレームワークに合わせたAdvanceな方法が必要。
解決例)
@Configuration
public class DomaConfig implements Config {
@Autowired
private DomaAutoConfiguration domaAutoConfiguration;
@Autowired
private DataSource dataSource;
@Override
public DataSource getDataSource() {
return dataSource;
}
@Override
public UnknownColumnHandler getUnknownColumnHandler() {
return new UnknownColumnHandler() {
@Override
public void handle(Query query, EntityType<?> entityType, String unknownColumnName) {
// オーバーライドして潰している
}
};
}
@Override
public Dialect getDialect() {
return domaAutoConfiguration.dialect();
}
@Bean
@Primary
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource primaryDataSource(DataSourceProperties properties) {
return properties.initializeDataSourceBuilder().build();
}
}
備考
Spring Boot2のORMだとMyBatisが一般的ではあると思いますが以下の理由からDoma2を使ってみました。
- JavaとSQLを分離したい
- XMLを書かないで済む