Spring Boot + MyBatisでapplication.ymlにスキーマを指定する方法

Spring Boot + MyBatisでapplication.ymlにスキーマを指定する方法

Spring Boot + MyBatisでデータベースのスキーマをapplication.yml側で設定しておきたかったのですがあまり情報が無かったのでメモです。

以下のようにすることで設定することが可能です。

dbschemaというキーを使用していますが任意のキーで大丈夫です。SQL文中に${dbschema}とすることで、スキーマ名を展開することが可能となります。

mybatis:
configuration-properties:
dbschema: schemaname

view raw

gistfile1.txt

hosted with ❤ by GitHub

Mapper側では、${dbschema}とすれば、いきなり使用することが可能となります。

@Select(value="select * from ${dbschema}.Employees ")
public Employees findByEmployee();

view raw

gistfile1.txt

hosted with ❤ by GitHub

@Configurationでスキーマを指定する

@Configurationでクラスを作成している場合は、SqlSessionFactoryBeanのインスタンスに対して、Propertiesクラスのインスタンスを設定する必要があります。application.ymlに記述せずに、Propertiesクラスで設定しておけばSQL文中でスキーマ名が設定されます。

// この3行が必要
Properties props = new Properties();
props.setProperty("dbschema", "schemaname");
sqlSessionFactory.setConfigurationProperties(props);

view raw

gistfile1.txt

hosted with ❤ by GitHub

サンプル

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();
}
}

view raw

gistfile1.txt

hosted with ❤ by GitHub

  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA