当前位置 主页 > 网站技术 > 代码类 >

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

    栏目:代码类 时间:2019-10-31 18:04

    这篇文章主要介绍了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()); 
    	}
    
    }