• springboot:mybatis配置多数据源


    第一个数据源:

    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.stereotype.Component;
    
    @Component
    @ConfigurationProperties(prefix = "spring.datasource")
    public class PropertiesDatasource {
    
      private String driverClassName;
      private String url;
      private String username;
      private String password;
      private String connectionProperties;
      private Integer initialSize = 1;
      private Integer minIdle = 3;
      private Integer maxActive = 20;
      private Integer timeBetweenEvictionRunsMillis = 60000;
      private Integer minEvictableIdleTimeMillis = 300000;
      private Boolean testWhileIdle = true;
      private String validationQuery = null;
      private Boolean testOnBorrow = false;
      private Boolean testOnReturn = false;
      private Boolean poolPreparedStatements = true;
      private Integer maxPoolPreparedStatementPerConnectionSize = 20;
      private String filters = "stat";
    
      public final String getDriverClassName() {
        return driverClassName;
      }
    
      public final void setDriverClassName(String driverClassName) {
        this.driverClassName = driverClassName;
      }
    
      public final String getUrl() {
        return url;
      }
    
      public final void setUrl(String url) {
        this.url = url;
      }
    
      public final String getUsername() {
        return username;
      }
    
      public final void setUsername(String username) {
        this.username = username;
      }
    
      public final String getPassword() {
        return password;
      }
    
      public final void setPassword(String password) {
        this.password = password;
      }
    
      public final String getConnectionProperties() {
        return connectionProperties;
      }
    
      public final void setConnectionProperties(String connectionProperties) {
        this.connectionProperties = connectionProperties;
      }
    
      public final Integer getInitialSize() {
        return initialSize;
      }
    
      public final void setInitialSize(Integer initialSize) {
        this.initialSize = initialSize;
      }
    
      public final Integer getMinIdle() {
        return minIdle;
      }
    
      public final void setMinIdle(Integer minIdle) {
        this.minIdle = minIdle;
      }
    
      public final Integer getMaxActive() {
        return maxActive;
      }
    
      public final void setMaxActive(Integer maxActive) {
        this.maxActive = maxActive;
      }
    
      public final Integer getTimeBetweenEvictionRunsMillis() {
        return timeBetweenEvictionRunsMillis;
      }
    
      public final void setTimeBetweenEvictionRunsMillis(Integer timeBetweenEvictionRunsMillis) {
        this.timeBetweenEvictionRunsMillis = timeBetweenEvictionRunsMillis;
      }
    
      public final Integer getMinEvictableIdleTimeMillis() {
        return minEvictableIdleTimeMillis;
      }
    
      public final void setMinEvictableIdleTimeMillis(Integer minEvictableIdleTimeMillis) {
        this.minEvictableIdleTimeMillis = minEvictableIdleTimeMillis;
      }
    
      public final Boolean getTestWhileIdle() {
        return testWhileIdle;
      }
    
      public final void setTestWhileIdle(Boolean testWhileIdle) {
        this.testWhileIdle = testWhileIdle;
      }
    
      public final String getValidationQuery() {
        return validationQuery;
      }
    
      public final void setValidationQuery(String validationQuery) {
        this.validationQuery = validationQuery;
      }
    
      public final Boolean getTestOnBorrow() {
        return testOnBorrow;
      }
    
      public final void setTestOnBorrow(Boolean testOnBorrow) {
        this.testOnBorrow = testOnBorrow;
      }
    
      public final Boolean getTestOnReturn() {
        return testOnReturn;
      }
    
      public final void setTestOnReturn(Boolean testOnReturn) {
        this.testOnReturn = testOnReturn;
      }
    
      public final Boolean getPoolPreparedStatements() {
        return poolPreparedStatements;
      }
    
      public final void setPoolPreparedStatements(Boolean poolPreparedStatements) {
        this.poolPreparedStatements = poolPreparedStatements;
      }
    
      public final Integer getMaxPoolPreparedStatementPerConnectionSize() {
        return maxPoolPreparedStatementPerConnectionSize;
      }
    
      public final void setMaxPoolPreparedStatementPerConnectionSize(Integer maxPoolPreparedStatementPerConnectionSize) {
        this.maxPoolPreparedStatementPerConnectionSize = maxPoolPreparedStatementPerConnectionSize;
      }
    
      public final String getFilters() {
        return filters;
      }
    
      public final void setFilters(String filters) {
        this.filters = filters;
      }
    
    }
    import java.sql.SQLException;
    
    import javax.sql.DataSource;
    
    import org.apache.commons.lang3.StringUtils;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.mybatis.spring.SqlSessionFactoryBean;
    import org.mybatis.spring.SqlSessionTemplate;
    import org.mybatis.spring.annotation.MapperScan;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.Primary;
    import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
    import org.springframework.jdbc.datasource.DataSourceTransactionManager;
    import org.springframework.transaction.annotation.EnableTransactionManagement;
    
    import com.alibaba.druid.pool.DruidDataSource;
    import com.csget.properties.PropertiesDatasource;
    
    @Configuration
    @EnableTransactionManagement
    @MapperScan(basePackages = "com.test.dao", sqlSessionTemplateRef = "sqlSessionTemplate")
    public class ConfigDataSource {
    
      private Logger logger = LoggerFactory.getLogger(ConfigDataSource.class);
    
      @Autowired
      private PropertiesDatasource propertiesDatasource;
    
      @Bean(name = "dataSource")
      @Primary
      public DataSource dataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setUrl(propertiesDatasource.getUrl());
        dataSource.setDriverClassName(propertiesDatasource.getDriverClassName());
        dataSource.setUsername(propertiesDatasource.getUsername());
        dataSource.setPassword(propertiesDatasource.getPassword());
        if (StringUtils.isNotBlank(propertiesDatasource.getConnectionProperties())) {
          dataSource.setConnectionProperties(propertiesDatasource.getConnectionProperties());
        }
        dataSource.setInitialSize(propertiesDatasource.getInitialSize());
        dataSource.setMinIdle(propertiesDatasource.getMinIdle());
        dataSource.setMaxWait(propertiesDatasource.getMaxActive());
        dataSource.setMaxActive(propertiesDatasource.getMaxActive());
        dataSource.setTimeBetweenEvictionRunsMillis(propertiesDatasource.getTimeBetweenEvictionRunsMillis());
        dataSource.setMinEvictableIdleTimeMillis(propertiesDatasource.getMinEvictableIdleTimeMillis());
        dataSource.setTestWhileIdle(propertiesDatasource.getTestWhileIdle());
        if(StringUtils.isNotBlank(propertiesDatasource.getValidationQuery())) {
          dataSource.setValidationQuery(propertiesDatasource.getValidationQuery());
        }
        dataSource.setTestOnBorrow(propertiesDatasource.getTestOnBorrow());
        dataSource.setTestOnReturn(propertiesDatasource.getTestOnReturn());
        dataSource.setPoolPreparedStatements(propertiesDatasource.getPoolPreparedStatements());
        dataSource.setMaxPoolPreparedStatementPerConnectionSize(
            propertiesDatasource.getMaxPoolPreparedStatementPerConnectionSize());
        if (StringUtils.isNotBlank(propertiesDatasource.getFilters())) {
          try {
            dataSource.setFilters(propertiesDatasource.getFilters());
          } catch (SQLException e) {
            logger.error("初始化数据库连接池发生异常:{}", e.toString());
          }
        }
        return dataSource;
      }
    
      @Bean(name = "sqlSessionFactory")
      @Primary
      public SqlSessionFactory sqlSessionFactory(@Qualifier("dataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        bean.setConfigLocation(
            new PathMatchingResourcePatternResolver().getResource("classpath:config/mybatis-config.xml"));
        bean.setMapperLocations(
            new PathMatchingResourcePatternResolver().getResources("classpath*:com/csget/dao/xml/**/*.xml"));
        return bean.getObject();
      }
    
      @Bean(name = "transactionManager")
      @Primary
      public DataSourceTransactionManager transactionManager(@Qualifier("dataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
      }
    
      @Bean(name = "sqlSessionTemplate")
      @Primary
      public SqlSessionTemplate sqlSessionTemplate(@Qualifier("sqlSessionFactory") SqlSessionFactory sqlSessionFactory)
          throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
      }
    
    }

    第二个数据源:

    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.stereotype.Component;
    
    @Component
    @ConfigurationProperties(prefix = "spring.datasource.history")
    public class PropertiesDatasourceHistory {
    
      private String driverClassName;
      private String url;
      private String username;
      private String password;
      private String connectionProperties;
      private Integer initialSize = 1;
      private Integer minIdle = 3;
      private Integer maxActive = 20;
      private Integer timeBetweenEvictionRunsMillis = 60000;
      private Integer minEvictableIdleTimeMillis = 300000;
      private Boolean testWhileIdle = true;
      private String validationQuery = null;
      private Boolean testOnBorrow = false;
      private Boolean testOnReturn = false;
      private Boolean poolPreparedStatements = true;
      private Integer maxPoolPreparedStatementPerConnectionSize = 20;
      private String filters = "stat";
    
      public final String getDriverClassName() {
        return driverClassName;
      }
    
      public final void setDriverClassName(String driverClassName) {
        this.driverClassName = driverClassName;
      }
    
      public final String getUrl() {
        return url;
      }
    
      public final void setUrl(String url) {
        this.url = url;
      }
    
      public final String getUsername() {
        return username;
      }
    
      public final void setUsername(String username) {
        this.username = username;
      }
    
      public final String getPassword() {
        return password;
      }
    
      public final void setPassword(String password) {
        this.password = password;
      }
    
      public final String getConnectionProperties() {
        return connectionProperties;
      }
    
      public final void setConnectionProperties(String connectionProperties) {
        this.connectionProperties = connectionProperties;
      }
    
      public final Integer getInitialSize() {
        return initialSize;
      }
    
      public final void setInitialSize(Integer initialSize) {
        this.initialSize = initialSize;
      }
    
      public final Integer getMinIdle() {
        return minIdle;
      }
    
      public final void setMinIdle(Integer minIdle) {
        this.minIdle = minIdle;
      }
    
      public final Integer getMaxActive() {
        return maxActive;
      }
    
      public final void setMaxActive(Integer maxActive) {
        this.maxActive = maxActive;
      }
    
      public final Integer getTimeBetweenEvictionRunsMillis() {
        return timeBetweenEvictionRunsMillis;
      }
    
      public final void setTimeBetweenEvictionRunsMillis(Integer timeBetweenEvictionRunsMillis) {
        this.timeBetweenEvictionRunsMillis = timeBetweenEvictionRunsMillis;
      }
    
      public final Integer getMinEvictableIdleTimeMillis() {
        return minEvictableIdleTimeMillis;
      }
    
      public final void setMinEvictableIdleTimeMillis(Integer minEvictableIdleTimeMillis) {
        this.minEvictableIdleTimeMillis = minEvictableIdleTimeMillis;
      }
    
      public final Boolean getTestWhileIdle() {
        return testWhileIdle;
      }
    
      public final void setTestWhileIdle(Boolean testWhileIdle) {
        this.testWhileIdle = testWhileIdle;
      }
    
      public final String getValidationQuery() {
        return validationQuery;
      }
    
      public final void setValidationQuery(String validationQuery) {
        this.validationQuery = validationQuery;
      }
    
      public final Boolean getTestOnBorrow() {
        return testOnBorrow;
      }
    
      public final void setTestOnBorrow(Boolean testOnBorrow) {
        this.testOnBorrow = testOnBorrow;
      }
    
      public final Boolean getTestOnReturn() {
        return testOnReturn;
      }
    
      public final void setTestOnReturn(Boolean testOnReturn) {
        this.testOnReturn = testOnReturn;
      }
    
      public final Boolean getPoolPreparedStatements() {
        return poolPreparedStatements;
      }
    
      public final void setPoolPreparedStatements(Boolean poolPreparedStatements) {
        this.poolPreparedStatements = poolPreparedStatements;
      }
    
      public final Integer getMaxPoolPreparedStatementPerConnectionSize() {
        return maxPoolPreparedStatementPerConnectionSize;
      }
    
      public final void setMaxPoolPreparedStatementPerConnectionSize(Integer maxPoolPreparedStatementPerConnectionSize) {
        this.maxPoolPreparedStatementPerConnectionSize = maxPoolPreparedStatementPerConnectionSize;
      }
    
      public final String getFilters() {
        return filters;
      }
    
      public final void setFilters(String filters) {
        this.filters = filters;
      }
    
    }
    /**
     * 
     * 类描述: 历史库
     *
     */
    @Configuration
    @EnableTransactionManagement
    @MapperScan(basePackages = "com.test.history.dao", sqlSessionTemplateRef = "sqlSessionTemplateHistory")
    public class ConfigDataSourceHistory {
    
      private Logger logger = LoggerFactory.getLogger(ConfigDataSourceHistory.class);
    
      @Autowired
      private PropertiesDatasourceHistory propertiesDatasourceHistory;
    
      @Bean(name = "dataSourceHistory")
      public DataSource dataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setUrl(propertiesDatasourceHistory.getUrl());
        dataSource.setDriverClassName(propertiesDatasourceHistory.getDriverClassName());
        dataSource.setUsername(propertiesDatasourceHistory.getUsername());
        dataSource.setPassword(propertiesDatasourceHistory.getPassword());
        if (StringUtils.isNotBlank(propertiesDatasourceHistory.getConnectionProperties())) {
          dataSource.setConnectionProperties(propertiesDatasourceHistory.getConnectionProperties());
        }
        dataSource.setInitialSize(propertiesDatasourceHistory.getInitialSize());
        dataSource.setMinIdle(propertiesDatasourceHistory.getMinIdle());
        dataSource.setMaxWait(propertiesDatasourceHistory.getMaxActive());
        dataSource.setMaxActive(propertiesDatasourceHistory.getMaxActive());
        dataSource.setTimeBetweenEvictionRunsMillis(propertiesDatasourceHistory.getTimeBetweenEvictionRunsMillis());
        dataSource.setMinEvictableIdleTimeMillis(propertiesDatasourceHistory.getMinEvictableIdleTimeMillis());
        dataSource.setTestWhileIdle(propertiesDatasourceHistory.getTestWhileIdle());
        if (StringUtils.isNotBlank(propertiesDatasourceHistory.getValidationQuery())) {
          dataSource.setValidationQuery(propertiesDatasourceHistory.getValidationQuery());
        }
        dataSource.setTestOnBorrow(propertiesDatasourceHistory.getTestOnBorrow());
        dataSource.setTestOnReturn(propertiesDatasourceHistory.getTestOnReturn());
        dataSource.setPoolPreparedStatements(propertiesDatasourceHistory.getPoolPreparedStatements());
        dataSource.setMaxPoolPreparedStatementPerConnectionSize(
            propertiesDatasourceHistory.getMaxPoolPreparedStatementPerConnectionSize());
        if (StringUtils.isNotBlank(propertiesDatasourceHistory.getFilters())) {
          try {
            dataSource.setFilters(propertiesDatasourceHistory.getFilters());
          } catch (SQLException e) {
            logger.error("初始化数据库连接池发生异常:{}", e.toString());
          }
        }
        return dataSource;
      }
    
      @Bean(name = "sqlSessionFactoryHistory")
      public SqlSessionFactory sqlSessionFactoryHistory(@Qualifier("dataSourceHistory") DataSource dataSourceHistory) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSourceHistory);
        bean.setConfigLocation(
            new PathMatchingResourcePatternResolver().getResource("classpath:config/mybatis-config.xml"));
        bean.setMapperLocations(
            new PathMatchingResourcePatternResolver().getResources("classpath*:com/csget/history/dao/xml/**/*.xml"));
        return bean.getObject();
      }
    
      @Bean(name = "transactionManagerHistory")
      public DataSourceTransactionManager transactionManagerHistory(@Qualifier("dataSourceHistory") DataSource dataSourceHistory) {
        return new DataSourceTransactionManager(dataSourceHistory);
      }
    
      @Bean(name = "sqlSessionTemplateHistory")
      public SqlSessionTemplate sqlSessionTemplate(@Qualifier("sqlSessionFactoryHistory") SqlSessionFactory sqlSessionFactoryHistory)
          throws Exception {
        return new SqlSessionTemplate(sqlSessionFactoryHistory);
      }
    
    }

    注意:

      @Primary 这个注解只能存在于一个数据源中。

  • 相关阅读:
    Bootstrap 模态对话框只加载一次 remote 数据的解决办法
    通过反射查找泛型的属性值
    基于Bootstrap的超酷jQuery开关按钮插件
    解決BufferedReader读取UTF-8文件中文乱码(转)
    Hibernate学习笔记
    freemarker XMLGregorianCalendar 转日期
    Android中手机号、车牌号正则表达式
    Eclipse中启动tomcat报错java.lang.OutOfMemoryError: PermGen space的解决方法
    WPF 引用DLL纯图像资源包类库中的图片
    “ sgen.exe ”已退出,代码为 1
  • 原文地址:https://www.cnblogs.com/huiy/p/9492742.html
Copyright © 2020-2023  润新知