Spring Boot + MyBatisでapplication.ymlにスキーマを指定する方法
Spring Boot + MyBatisでデータベースのスキーマをapplication.yml側で設定しておきたかったのですがあまり情報が無かったのでメモです。
以下のようにすることで設定することが可能です。
dbschemaというキーを使用していますが任意のキーで大丈夫です。SQL文中に${dbschema}とすることで、スキーマ名を展開することが可能となります。
mybatis: | |
configuration-properties: | |
dbschema: schemaname |
Mapper側では、${dbschema}とすれば、いきなり使用することが可能となります。
@Configurationでスキーマを指定する
@Configurationでクラスを作成している場合は、SqlSessionFactoryBeanのインスタンスに対して、Propertiesクラスのインスタンスを設定する必要があります。application.ymlに記述せずに、Propertiesクラスで設定しておけばSQL文中でスキーマ名が設定されます。
// この3行が必要 | |
Properties props = new Properties(); | |
props.setProperty("dbschema", "schemaname"); | |
sqlSessionFactory.setConfigurationProperties(props); |
サンプル
package com.example.demo.config; | |
import java.util.Properties; | |
import javax.sql.DataSource; | |
import org.apache.ibatis.session.SqlSessionFactory; | |
import org.mybatis.spring.SqlSessionFactoryBean; | |
import org.mybatis.spring.annotation.MapperScan; | |
import org.springframework.beans.factory.annotation.Qualifier; | |
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties; | |
import org.springframework.boot.context.properties.ConfigurationProperties; | |
import org.springframework.context.annotation.Bean; | |
import org.springframework.context.annotation.Configuration; | |
import org.springframework.context.annotation.Primary; | |
import org.springframework.jdbc.datasource.DataSourceTransactionManager; | |
import org.springframework.transaction.PlatformTransactionManager; | |
@Configuration | |
@MapperScan( | |
basePackages = "com.example.demo.repository.primary", | |
sqlSessionFactoryRef = "sqlSessionFactory1" | |
) | |
public class PrimaryConfiguration { | |
@Bean | |
@Primary | |
@ConfigurationProperties(prefix = "spring.datasource.primary") | |
public DataSourceProperties primaryProperties() { | |
return new DataSourceProperties(); | |
} | |
@Bean(name = {"datasource1"}) | |
@Primary | |
public DataSource primaryDataSource(@Qualifier("primaryProperties") DataSourceProperties properties) { | |
return properties.initializeDataSourceBuilder().build(); | |
} | |
@Bean | |
@Primary | |
public PlatformTransactionManager primaryEntityManager(DataSource dataSource1) { | |
return new DataSourceTransactionManager(dataSource1); | |
} | |
@Bean(name = {"sqlSessionFactory1"}) | |
@Primary | |
public SqlSessionFactory sqlSessionFactory(@Qualifier("datasource1") DataSource datasource1) throws Exception { | |
SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean(); | |
sqlSessionFactory.setDataSource(datasource1); | |
Properties props = new Properties(); | |
props.setProperty("dbschema", "schemaname"); // ここでスキーマ名を指定する | |
sqlSessionFactory.setConfigurationProperties(props); | |
return (SqlSessionFactory) sqlSessionFactory.getObject(); | |
} | |
} |
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^