Spring-boot集成pg、mongo多数据源过程详解

所属分类: 软件编程 / java 阅读数: 49
收藏 0 赞 0 分享

这篇文章主要介绍了Spring-boot集成pg、mongo多数据源过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

修改POM文件,增加相应Jar包

<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-data-mongodb</artifactId>
	</dependency>
<dependency>
		<groupId>org.postgresql</groupId>
		<artifactId>postgresql</artifactId>
		<scope>runtime</scope>
	</dependency>
<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

修改启动类,去除原有的数据源自动加载机制

@SpringBootApplication(
    exclude = {DataSourceAutoConfiguration.class, 
          PageHelperAutoConfiguration.class ,
    		  MongoAutoConfiguration.class, MongoDataAutoConfiguration.class//禁用数据源自动配置
    })
@EnableEurekaClient
public class MainApplication {、、、

编写application.yml文件,增加配置信息

spring:
  # 默认的postgreSQL库
 datasource:
  pg:
   url: jdbc:postgresql://127.0.0.1:5432/pgdb
   username: us_wu
   password: netcool@919
   driver-class-name: org.postgresql.Driver
  mg:
   host: 127.0.0.1
   username: aaa
   password: aaa
   database: mgdb
   port: 27017

分别手动增加PG、mongo的数据源以及使用样例

pg

1、手动加载数据源

@Configuration
public class DataSourceConfig {
  final String cmspg="spring.datasource.pg";

  @Bean(name = "pgDS")
  @ConfigurationProperties(prefix =pg) 
  public DataSource dataSource() {
    return DataSourceBuilder.create().build();
  }

2、创建pg配置文件,指定SqlSessionFactory以及要扫描的Dao

@Configuration
@MapperScan(basePackages = {"com.**.mapper.pg"}, sqlSessionFactoryRef = "sqlSessionFactory")
public class PostgresDBConfig {

  @Autowired
  @Qualifier("pgDS")
  private DataSource pgDS;


  @Bean
  public SqlSessionFactory sqlSessionFactory() throws Exception {
    SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
    factoryBean.setDataSource(pgDS);  
    return factoryBean.getObject();

  }
  @Bean
  public SqlSessionTemplate sqlSessionTemplate() throws Exception {
    SqlSessionTemplate template = new SqlSessionTemplate(sqlSessionFactory()); // 使用上面配置的Factory
    return template;
  }
}

3、编写Dao--注解形式

@Repository
@Mapper
public interface StCableFiberMapper {

  @Select("SELECT * FROM st_cable_fiber WHERE id = #{id}")
  St_cable_fiber findById(@Param("id") String id);

mongo

1、加载mongo配置信息

public abstract class AbstractMongoConfigure {

		private String host, database, username, password;
		private int port;
		// Setter methods go here..
	 
		/*
		 * Method that creates MongoDbFactory Common to both of the MongoDb
		 * connections
		 */
		public MongoDbFactory mongoDbFactory() throws Exception {
			ServerAddress serverAddress = new ServerAddress(host, port);
			List<MongoCredential> mongoCredentialList = new ArrayList<>();
			mongoCredentialList.add(MongoCredential.createScramSha1Credential(username, database, password.toCharArray()));
			return new SimpleMongoDbFactory(new MongoClient(serverAddress,mongoCredentialList), database);
		}
	 
		/*
		 * Factory method to create the MongoTemplate
		 */
		abstract public MongoTemplate getMongoTemplate() throws Exception;
}

@Configuration
@EnableMongoRepositories(basePackages = {"com.**.mapper.mg"},mongoTemplateRef = "mongoTemplate") 
@ComponentScan
@ConfigurationProperties(prefix = "spring.datasource.mg")
public class MongoMasterConfig extends AbstractMongoConfigure{

	@Override
	@Bean("mongoTemplate")
	public MongoTemplate getMongoTemplate() throws Exception {
		return new MongoTemplate(mongoDbFactory()); 
	}

}

编写Dao MongoTemplate模式

@Repository
public class CmCableDetailRepo{

	@Autowired
	private MongoTemplate mongoTemplate;

	public Page<Cm_Cable> findByLevelAndName(String areacode, int level,String name,int pageNum, int pageSize){

		PageRequest page = new PageRequest(pageNum, pageSize);
		Query query = new Query();
		Criteria criteria = new Criteria();
		criteria.and("areacode").regex("^"+areacode);
		if(level > -1){
			criteria.and("cableSegment_level").is(level);
		}
		if(null != name && name.trim().length() > 0){
			criteria.and("zh_label").regex(".*?"+name+".*");
		}
		query.addCriteria(criteria);
		Long count = mongoTemplate.count(query, Cm_Cable.class);

		List<Cm_Cable> list = mongoTemplate.find(query.with(page), Cm_Cable.class);
		return new PageImpl<Cm_Cable>(list, page, count);
	}

MongoRepository模式

@Repository
public interface CmCableDetailMapper extends MongoRepository<Cm_Cable, String>{
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

更多精彩内容其他人还在看

JavaWeb项目部署到服务器详细步骤详解

这篇文章主要介绍了JavaWeb项目如何部署到服务器,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

IDEA基于支付宝小程序搭建springboot项目的详细步骤

这篇文章主要介绍了IDEA基于支付宝小程序搭建springboot项目的详细步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

详解SpringBoot应用服务启动与安全终止

这篇文章主要介绍了SpringBoot应用服务启动与安全终止,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Spring Boot启动及退出加载项的方法

这篇文章主要介绍了Spring Boot启动及退出加载项的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Spring Data Jpa 自动生成表结构的方法示例

这篇文章主要介绍了Spring Data Jpa 自动生成表结构的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

IDEA中osgi的开发应用指南详解

这篇文章主要介绍了IDEA中osgi的开发应用指南详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

详解用maven将dubbo工程打成jar包运行

这篇文章主要介绍了详解用maven将dubbo工程打成jar包运行,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

详解Java合并数组的两种实现方式

这篇文章主要介绍了Java合并数组的两种实现方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

使用Jenkins Pipeline自动化构建发布Java项目的方法

这篇文章主要介绍了使用Jenkins Pipeline自动化构建发布Java项目的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

使用Maven配置Spring的方法步骤

这篇文章主要介绍了使用Maven配置Spring的方法步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享
查看更多