Spring Boot Mybatisマルチデータソース構成
9097 ワード
Spring bootプロジェクトで複数のデータソースを構成する場合は開発中によく見かけますが、Spring Boot+MyBatisでmysql+Postgresqlデュアルデータソースプロジェクトの構築を実現します.詳細コードは以下を参照してください.
https://gitee.com/senn-wen/my...
一、依存構成
pom.xmlファイルには、
二、Spring boot配置
2.1 application.yml構成
接続が必要なデータベース接続パラメータを構成します.次の例ではpostgresqlとmysqlを構成します.hikariCPを接続プールとして選択したので、下にhikariを構成します.オンラインのサービスであれば、実際のサーバのパフォーマンスサイズに応じてパラメータを設定することをお勧めします.パラメータを接続する構成パスを覚えておいて、後で使用します.
2.2 Spring datasource自動化構成依存性の排除
Spring Bootは構成を自動的に組み立てるので、カスタム構成を有効にするには@SpringBootApplicationでdatasoureに関連する構成を排除する必要があります.主に3つあります.データソース:DataSourceAutoConfiguration.class 取引:D a t o u r c e T r o n s a c t ionManagerAutoConfiguration.class Jdbcテンプレート:JdbcTemplateAutoConfiguration.class
三、データソースの配置
上記の基本構成が完了すると、特定のBeanを構成する必要があります.各データ・ソースの推奨は、後でメンテナンスするのに便利です.データ・ソース構成には、次の2つの主要な手順があります.ソースデータの構成(プロファイルを読み込み、新しいDataSourceを生成) ORMフレームワークがどこでこのデータソース を使用するかを指定する.
この2つはフレームワークでは与えられず、手動で構成するしかありません.
3.1 MySQLデータソース構成
Postgresqlデータソース構成
@Senn・森
https://gitee.com/senn-wen/my...
一、依存構成
pom.xmlファイルには、
postgresql
および mysql
のドライバファイルが導入されています.
org.postgresql
postgresql
runtime
mysql
mysql-connector-java
runtime
二、Spring boot配置
2.1 application.yml構成
接続が必要なデータベース接続パラメータを構成します.次の例ではpostgresqlとmysqlを構成します.hikariCPを接続プールとして選択したので、下にhikariを構成します.オンラインのサービスであれば、実際のサーバのパフォーマンスサイズに応じてパラメータを設定することをお勧めします.パラメータを接続する構成パスを覚えておいて、後で使用します.
spring:
datasource:
postgresql:
driver-class-name: org.postgresql.Driver
url: jdbc:postgresql://url:port/database
username: postGIS
password: postGIS
mysql:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://url:port/database
username: root
password: root
hikari:
maximum-pool-size: 3
connection-timeout: 500
2.2 Spring datasource自動化構成依存性の排除
Spring Bootは構成を自動的に組み立てるので、カスタム構成を有効にするには@SpringBootApplicationでdatasoureに関連する構成を排除する必要があります.主に3つあります.
@SpringBootApplication(exclude = {
DataSourceAutoConfiguration.class,
DataSourceTransactionManagerAutoConfiguration.class,
JdbcTemplateAutoConfiguration.class
})
public class PostgresqlApplication {
public static void main(String[] args) {
SpringApplication.run(PostgresqlApplication.class, args);
}
}
三、データソースの配置
上記の基本構成が完了すると、特定のBeanを構成する必要があります.各データ・ソースの推奨は、後でメンテナンスするのに便利です.データ・ソース構成には、次の2つの主要な手順があります.
この2つはフレームワークでは与えられず、手動で構成するしかありません.
3.1 MySQLデータソース構成
package com.senn.postgresql.config;
import com.zaxxer.hikari.HikariDataSource;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
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.DependsOn;
import org.springframework.context.annotation.Primary;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import javax.sql.DataSource;
/**
* @author senn
* @version 1.0.0
* @ClassName MsqlDataSourceConfig.java
* @Description mysql
* @createTime 2021 01 15 09:02:00
*/
@Configuration
@Slf4j
@MapperScan(basePackages = "com.senn.postgresql.common.mapper.mysql",
sqlSessionFactoryRef = "mysqlDataSourceFactory")
public class MsqlDataSourceConfig {
/**
* @description mysql DataSource Properties
* @updateTime 2021/1/15 9:04
*/
@Bean(name = "mysqlDataSourceProperties")
@ConfigurationProperties("spring.datasource.mysql")
public DataSourceProperties mysqlDataSourceProperties() {
return new DataSourceProperties();
}
/**
* @description mysql DataSource
* @updateTime 2021/1/15 9:11
*/
@Bean(name = "mysqlDataSource")
@ConfigurationProperties("spring.datasource.mysql.configuration")
public javax.sql.DataSource mysqlDataSource() {
DataSourceProperties dataSourceProperties = mysqlDataSourceProperties();
log.info(dataSourceProperties.getUrl());
// Hikari
return mysqlDataSourceProperties().initializeDataSourceBuilder().type(HikariDataSource.class).build();
}
// mybatis
/**
* @description mysql
* @updateTime 2021/1/15 9:18
*/
@Bean("mysqlDataSourceFactory")
@DependsOn("mysqlDataSource")
public SqlSessionFactory dataSourceFactory() throws Exception {
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
factoryBean.setDataSource(mysqlDataSource());
return factoryBean.getObject();
}
/**
* @description mysql session
* @updateTime 2021/1/15 9:22
*/
@Bean("mysqlSqlSessionTemplate")
@DependsOn("mysqlDataSourceFactory")
public SqlSessionTemplate sqlSessionTemplate(@Qualifier("mysqlDataSourceFactory") SqlSessionFactory sessionFactory) {
return new SqlSessionTemplate(sessionFactory);
}
/**
* @description mysql
* @updateTime 2021/1/15 9:22
*/
@Bean(name = "mysqlTransactionManager")
@DependsOn("mysqlDataSource")
public DataSourceTransactionManager mysqlTransactionManager(@Qualifier("mysqlDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
}
Postgresqlデータソース構成
package com.senn.postgresql.config;
import com.zaxxer.hikari.HikariDataSource;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
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.DependsOn;
import org.springframework.context.annotation.Primary;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import javax.sql.DataSource;
/**
* @author senn
* @version 1.0.0
* @ClassName DataSourceConfig.java
* @Description psotgresql
* @createTime 2021 01 14 15:56:00
*/
@Configuration
@Slf4j
@MapperScan(basePackages = "com.senn.postgresql.common.mapper.postgresql",
sqlSessionFactoryRef = "postgresqlDataSourceFactory")
public class PostgresqlDataSourceConfig {
/**
* @description postgresql DataSource Properties
* @updateTime 2021/1/15 9:04
*/
@Bean(name = "postgresqlDataSourceProperties")
@ConfigurationProperties("spring.datasource.postgresql")
public DataSourceProperties postgresqlDataSourceProperties() {
return new DataSourceProperties();
}
/**
* @description postgresql DataSource
* @param
* @updateTime 2021/1/15 9:11
* @throws
*/
@Bean(name = "postgresqlDataSource")
@ConfigurationProperties("spring.datasource.postgresql.configuration")
public DataSource postgresqlDataSource() {
DataSourceProperties dataSourceProperties = postgresqlDataSourceProperties();
log.info(dataSourceProperties.getUrl());
// Hikari
return postgresqlDataSourceProperties().initializeDataSourceBuilder().type(HikariDataSource.class).build();
}
// mybatis
/**
* @description postgresql
* @updateTime 2021/1/15 9:18
*/
@Bean("postgresqlDataSourceFactory")
@DependsOn("postgresqlDataSource")
public SqlSessionFactory dataSourceFactory() throws Exception {
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
factoryBean.setDataSource(postgresqlDataSource());
return factoryBean.getObject();
}
/**
* @description postgresql session
* @updateTime 2021/1/15 9:22
*/
@Bean("postgresqlSqlSessionTemplate")
@Primary
@DependsOn("postgresqlDataSourceFactory")
public SqlSessionTemplate sqlSessionTemplate(@Qualifier("postgresqlDataSourceFactory") SqlSessionFactory sessionFactory) {
return new SqlSessionTemplate(sessionFactory);
}
/**
* @description postgresql
* @updateTime 2021/1/15 9:22
*/
@Bean(name = "postgresqlTransactionManager")
@DependsOn("postgresqlDataSource")
public DataSourceTransactionManager fawkesTransactionManager(@Qualifier("postgresqlDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
}
@Senn・森