Spring Boot配置多数据源

**

1.目的

**
项目中需要连第二个数据库,去实现查询服务,方法用两个:1.另外重新写一个项目提供服务 2.在原来的项目中使用多数据源

因为只做两个查询服务,所以就不需要重新写一个服务,选择了多数据源方式

2.怎么做

0.maven配置


        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.0</version>
        </dependency>

1.application.properties 写两份配置信息

spring.datasource.jiameng.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.jiameng.jdbc-url=jdbc:mysql://${db.mysql.jiameng.address}:${db.mysql.jiameng.port}/${db.mysql.jiameng.database}?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai&allowMultiQueries=true
spring.datasource.jiameng.username=${db.mysql.jiameng.username}
spring.datasource.jiameng.password=${db.mysql.jiameng.password}
spring.datasource.jiameng.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.jiameng.initialSize=5
spring.datasource.jiameng.minIdle=5
spring.datasource.jiameng.maxActive=20
spring.datasource.jiameng.maxWait=60000
spring.datasource.jiameng.timeBetweenEvictionRunsMillis=60000
spring.datasource.jiameng.minEvictableIdleTimeMillis=300000
spring.datasource.jiameng.validationQuery=SELECT 1 FROM DUAL
spring.datasource.jiameng.testWhileIdle=true
spring.datasource.jiameng.testOnBorrow=false
spring.datasource.jiameng.testOnReturn=false
spring.datasource.jiameng.poolPreparedStatements=true
spring.datasource.jiameng.maxPoolPreparedStatementPerConnectionSize=20
spring.datasource.jiameng.filters=stat,wall,log4j
spring.datasource.jiameng.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000


spring.datasource.cms.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.cms.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.cms.jdbc-url=jdbc:mysql://${db.mysql.cms.address}:${db.mysql.cms.port}/${db.mysql.cms.database}?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai&allowMultiQueries=true
spring.datasource.cms.username=${db.mysql.cms.username}
spring.datasource.cms.password=${db.mysql.cms.password}
spring.datasource.cms.initialSize=5
spring.datasource.cms.minIdle=5
spring.datasource.cms.maxActive=20
spring.datasource.cms.maxWait=60000
spring.datasource.cms.timeBetweenEvictionRunsMillis=60000
spring.datasource.cms.minEvictableIdleTimeMillis=300000
spring.datasource.cms.validationQuery=SELECT 1 FROM DUAL
spring.datasource.cms.testWhileIdle=true
spring.datasource.cms.testOnBorrow=false
spring.datasource.cms.testOnReturn=false
spring.datasource.cms.poolPreparedStatements=true
spring.datasource.cms.maxPoolPreparedStatementPerConnectionSize=20
spring.datasource.cms.filters=stat,wall,log4j
spring.datasource.cms.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000

2.在config配置两个数据源配置文件

import javax.sql.DataSource;
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.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

@Configuration
@MapperScan(basePackages = "com.hejiameng.common.cms.persistence.mapper", sqlSessionTemplateRef = "cmsSqlSessionTemplate")
public class CmsDataSourceConfig {

	// 声明bean
	@Bean(name = "cmsDataSource")
	// 指明读取的配置
	@ConfigurationProperties(prefix = "spring.datasource.cms")
	/*
	 * 声明数据源配置
	 */
	public DataSource cmsDataSource() {
		return DataSourceBuilder.create().build();
	}

	@Bean(name = "cmsSqlSessionFactory")
	/**
	 * 使用声明的数据源,创建sqlSession工厂
	 */
	public SqlSessionFactory cmsSqlSessionFactory(@Qualifier("cmsDataSource") DataSource dataSource)
			throws Exception {
		SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
		/*
		 * 当mybatis采用映射配置文件的方式时,指明该数据源需要是扫描的xml文件路径
		 */
		bean.setDataSource(dataSource);
		bean.setMapperLocations(
				new PathMatchingResourcePatternResolver().getResources("com/hejiameng/common/cms/persistence/mapper/*.xml"));
		bean.setTypeAliasesPackage("com/hejiameng/common/cms/persistence/model");
		return bean.getObject();
	}

	@Bean(name = "cmsTransactionManager")
	/**
	 * 声明数据源有自己的事务管理
	 */
	public DataSourceTransactionManager cmsTransactionManager(@Qualifier("cmsDataSource") DataSource dataSource) {
		return new DataSourceTransactionManager(dataSource);
	}

	@Bean(name = "cmsSqlSessionTemplate")
	/**
	 * 声明SqlSessionTemplate由指定的SqlSession工厂创建
	 */
	public SqlSessionTemplate cmsSqlSessionTemplate(
			@Qualifier("cmsSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
		return new SqlSessionTemplate(sqlSessionFactory);
	}


}


@Configuration
@MapperScan(basePackages = "com.hejiameng.common.persistence.mapper", sqlSessionTemplateRef = "jiamengSqlSessionTemplate")
public class JiaMengDataSourceConfig {

	// 声明bean
	@Bean(name = "jiamengDataSource")
	// 指明读取的配置
	@ConfigurationProperties(prefix = "spring.datasource.jiameng")
	// 设置为主数据源
	@Primary
	/*
	 * 声明数据源配置
	 */
	public DataSource jiamengDataSource() {
		return DataSourceBuilder.create().build();
	}

	@Bean(name = "jiamengSqlSessionFactory")
	@Primary
	/**
	 * 使用声明的数据源,创建sqlSession工厂
	 */
	public SqlSessionFactory jiamengSqlSessionFactory(@Qualifier("jiamengDataSource") DataSource dataSource)
			throws Exception {
		SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
		/*
		 * 当mybatis采用映射配置文件的方式时,指明该数据源需要是扫描的xml文件路径
		 */
		bean.setDataSource(dataSource);
		bean.setMapperLocations( new PathMatchingResourcePatternResolver().getResources("com/hejiameng/common/persistence/mapper/*.xml"));
		bean.setTypeAliasesPackage("com/hejiameng/common/persistence/model");
		return bean.getObject();
	}

	@Bean(name = "jiamengTransactionManager")
	@Primary
	/**
	 * 声明数据源有自己的事务管理
	 */
	public DataSourceTransactionManager jiamengTransactionManager(@Qualifier("jiamengDataSource") DataSource dataSource) {
		return new DataSourceTransactionManager(dataSource);
	}

	@Bean(name = "jiamengSqlSessionTemplate")
	@Primary
	/**
	 * 声明SqlSessionTemplate由指定的SqlSession工厂创建
	 */
	public SqlSessionTemplate jiamengSqlSessionTemplate(
			@Qualifier("jiamengSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
		return new SqlSessionTemplate(sqlSessionFactory);
	}
}

这里面的包名一定要对的上
在这里插入图片描述
**

3.修改启动方法

**



@SpringBootApplication
@ComponentScan({"com.hejiameng.common.service","com.hejiameng.web"})
//@MapperScan(basePackages = {"com.hejiameng.common.persistence.mapper","com.hejiameng.common.cms.persistence.mapper"})
@EnableCaching
@EnableTransactionManagement
@EnableScheduling
@ServletComponentScan
public class JiaMengWebApplication extends SpringBootServletInitializer {

	public static void main(String[] args) throws IOException {
		Properties properties = new Properties();
		InputStream in = Application.class.getClassLoader().getResourceAsStream("application.properties");
		properties.load(in);
		SpringApplication app = new SpringApplication(Application.class);
		app.setDefaultProperties(properties);
		app.run(args);
	}

	@Override
	protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
		builder.sources(this.getClass());
		return super.configure(builder);
	}

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值